Skip to content

Subir archivos con API Token

La subida con API Token está pensada para scripts, tareas automatizadas y programas de terceros. No hace falta abrir la interfaz web: con la URL del sitio, el token, la ruta del archivo local y un canal de subida real, puedes subir el archivo a ImgHost y recibir su URL al terminar.

Editar API Token

Preparación

Entra al panel de administración y abre:

text
System Settings -> Security Settings -> API Token

Al crear o editar el API Token, asegúrate de que tenga permiso de subida y un canal de subida predeterminado real. Las subidas con API Token no usan la entrada de asignación inteligente, y los scripts también deben enviar un canal real.

Descargar scripts de subida

La documentación incluye dos scripts de Node.js:

ScriptUso
script de subida en una sola peticiónLlama una sola vez a /upload. Sirve para archivos pequeños y pruebas de conectividad.
script de subida por partesUsa subidas por partes, subidas directas o sesiones de plataforma mediante API Token. Recomendado para archivos grandes.

Necesitas Node.js 18 o superior.

Listar canales disponibles

Ambos scripts pueden listar primero los canales de subida disponibles para el API Token actual:

powershell
node imghost-token-single-upload.mjs --base-url "https://your-domain" --token "your API Token" --list-channels
node imghost-token-chunk-upload.mjs --base-url "https://your-domain" --token "your API Token" --list-channels

Para listar canales no necesitas pasar --file ni --channel. La respuesta incluye el canal predeterminado, las claves de canal, los nombres de subcanales y el estado de balanceo de carga. No devuelve claves, tokens de actualización ni otros datos sensibles.

Qué modo de subida elegir

ModoCuándo usarloDescripción
Una sola peticiónArchivos pequeños, scripts sencillos, pruebas de APIEnvía el archivo completo a /upload en una sola petición.
Subida por partesArchivos grandes o propensos a agotar el tiempo de esperaEl script usa el flujo por partes, directo o de sesión según el canal.

Para archivos grandes, usa primero el script de subida por partes. La subida en una sola petición está limitada por el tamaño de petición de Cloudflare, la memoria del Worker y los límites propios de cada plataforma.

Subida en una sola petición

El script de una sola petición llama una vez a /upload.

powershell
node imghost-token-single-upload.mjs `
  --base-url "https://your-domain" `
  --token "your API Token" `
  --file "D:\test\image.png" `
  --channel s3 `
  --folder "photos/2026"

También puedes poner el Token en una variable de entorno:

powershell
$env:IMGHOST_API_TOKEN="your API Token"
node imghost-token-single-upload.mjs --base-url "https://your-domain" --file "D:\test\image.png" --channel s3

Parámetros de subida en una sola petición

ParámetroObligatorioDescripción
--base-url <url>URL del sitio ImgHost, por ejemplo https://image.ai6.me.
--token <token>API Token. También puedes usar la variable IMGHOST_API_TOKEN.
--file <path>Ruta del archivo local.
--channel <key>Canal de subida.
--folder <path>NoCarpeta de destino, por ejemplo photos/2026 o /user/.
--name-type <type>NoModo de nombre, corresponde a uploadNameType en el servidor. Por defecto default.
--channel-name <name>NoSelecciona un subcanal o cuenta concreta. Si se omite, decide la configuración del servidor.
--retries <n>NoReintentos ante fallos temporales. Por defecto 3.
--timeout-ms <n>NoTimeout de la petición. Por defecto 180000.
--output <pretty|json>NoFormato de salida. Por defecto pretty.
--save-response <path>NoGuarda la respuesta final como JSON.
--list-channelsNoLista los canales disponibles para el token y termina sin subir.

Canales para una sola petición

ClaveCanal
telegram / tgTelegram
discord / dcDiscord
cfr2 / r2Cloudflare R2
s3S3
webdav / wdCanal de almacenamiento WebDAV
github / ghGitHub Releases
gitlab / glGitLab Packages
huggingface / hfHugging Face
onedrive / odOneDrive
googledrive / google / gdGoogle Drive
dropbox / dbDropbox
yandex / yxYandex Disk
pcloud / pdpCloud

Límites de una sola petición

Conviene mantener los archivos de una sola petición por debajo de 100 MB.

Estos canales tienen umbrales explícitos para /upload en una sola petición:

CanalLímite
Telegram20 MiB
Discord10 MiB
S364 MiB
WebDAV64 MiB
GitHub Releases64 MiB
GitLab Packages64 MiB

Si se supera el límite, el script muestra el error correspondiente localmente. Para otros canales, el script no impone un límite local fijo de 100 MB. Si el cuerpo de la petición supera la capacidad de Cloudflare o de la plataforma, el error vendrá de Cloudflare o del servicio remoto.

Subida por partes

El script de subida por partes pide primero al servidor que resuelva el destino del archivo y luego usa el flujo de archivo grande del canal elegido. No tienes que implementar sesiones de partes, fusión ni finalización.

powershell
node imghost-token-chunk-upload.mjs `
  --base-url "https://your-domain" `
  --token "your API Token" `
  --file "D:\test\video.zip" `
  --channel github `
  --folder "photos/2026" `
  --concurrency 3

Parámetros de subida por partes

ParámetroObligatorioDescripción
--base-url <url>URL del sitio ImgHost.
--token <token>API Token. También puedes usar IMGHOST_API_TOKEN.
--file <path>Ruta del archivo local.
--channel <key>Canal de subida.
--folder <path>NoCarpeta de destino.
--name-type <type>NoModo de nombre, corresponde a uploadNameType. Por defecto default.
--channel-name <name>NoSelecciona un subcanal o cuenta concreta. Si se omite, decide la configuración del servidor.
--concurrency <n>NoNúmero de subidas concurrentes. Por defecto 1, máximo 3.
--retries <n>NoReintentos ante fallos temporales. Por defecto 3.
--timeout-ms <n>NoTimeout por petición. Por defecto 180000.
--output <pretty|json>NoFormato de salida. Por defecto pretty.
--save-response <path>NoGuarda la respuesta final como JSON.
--list-channelsNoLista los canales disponibles para el token y termina sin subir.

Canales de subida por partes

ClaveFlujo de subida
telegram / tgSesión real por partes sobre /upload
discord / dcSesión real por partes sobre /upload
cfr2 / r2Sesión real por partes sobre /upload
github / ghSesión real por partes sobre /upload
gitlab / glSesión real por partes sobre /upload
webdav / wdSesión real por partes sobre /upload
s3Subida multipart de S3
onedrive / odSesión de subida de OneDrive
googledrive / google / gdSubida reanudable de Google Drive
dropbox / dbSesión de subida de Dropbox
yandex / yxURL de subida directa de Yandex
pcloud / pdEnlace de subida de pCloud
huggingface / hfSubida Hugging Face LFS

Las pruebas con archivos comprimidos en Yandex fueron inestables. Los archivos no comprimidos sí se han verificado correctamente.

Resultado de subida

Al subir correctamente, el script imprime:

text
success
src: /file/photos/2026/example.png
url: https://your-domain/file/photos/2026/example.png
fileId: photos/2026/example.png
CampoDescripción
srcRuta interna del archivo en el sitio.
urlURL completa, lista para usar en tus scripts o base de datos.
fileIdID del archivo, útil para consultas, gestión o registros posteriores.
channelNameEl script por partes puede devolver el subcanal o cuenta usado realmente.

Con --output json, el script imprime el JSON completo para procesamiento automático.

Llamar directamente a la API de una sola petición

Si no usas el script, también puedes llamar directamente al punto de conexión de subida en una sola petición:

text
POST https://your-domain/upload?uploadChannel=s3&uploadFolder=photos/2026&uploadNameType=default
Authorization: Bearer your API Token
Content-Type: multipart/form-data

Campo del formulario:

CampoObligatorioDescripción
fileArchivo que se va a subir.

Parámetros de consulta:

ParámetroObligatorioDescripción
uploadChannelCanal de subida real.
uploadFolderNoCarpeta de destino.
uploadNameTypeNoModo de nombre.
channelNameNoSubcanal o cuenta concreta.

Respuesta correcta de ejemplo:

json
{
  "success": true,
  "src": "/file/photos/2026/example.png",
  "url": "https://your-domain/file/photos/2026/example.png",
  "fileId": "photos/2026/example.png"
}

Preguntas frecuentes

Falla la subida grande en una sola petición

/upload en una sola petición envía el archivo completo de una vez. Los archivos grandes pueden ser bloqueados por Cloudflare o por la plataforma remota. Para archivos grandes usa el script de subida por partes.

Pasé --channel-name y aun así falla

Comprueba en el panel que ese canal tenga un subcanal con el mismo nombre y que esté habilitado. Si no pasas --channel-name, el servidor elige una cuenta disponible según la configuración del canal.

Quiero usar el resultado en otro programa

Usa --output json o añade --save-response result.json. Tu programa puede leer el campo url para obtener el enlace completo.

Yandex no sube archivos comprimidos

Yandex no admite formatos de archivo comprimido. Puede deberse a su política de plataforma. Si usas Yandex, sube archivos no comprimidos siempre que sea posible.

Released as user documentation for ImgHost.