Subida de archivos
Sube archivos (documentos, audio, video, imágenes) a Videsk usando tu API Key.
Las subidas son un flujo de dos pasos:
Solicitar una autorización a
https://api.videsk.iocon tu API key. Recibes un JWT de corta duración y la URL de subida.Enviar el archivo a la URL de subida usando ese JWT.
La autorización tiene en la práctica semántica de un solo uso: expira en 5 minutos y queda acotada a un único bucket, prefijo de key, lista de mime types permitidos y tamaño máximo. Reutilizarla es técnicamente posible hasta exp, pero deberías pedir una nueva por cada archivo.
Autenticación
Ambos pasos usan Authorization: Bearer <token> pero con tokens distintos:
1. Autorización
https://api.videsk.io
Tu API key
2. Subida
uploadUrl (devuelta en el paso 1)
El JWT devuelto en el paso 1
Nunca expongas tu API key en código de navegador. Genera la autorización desde tu backend y, si un usuario final sube el archivo directamente, pasale sólo el JWT de corta duración.
Paso 1: Solicitar una autorización de subida
Endpoint
Headers
Body
Campos
purpose
string
sí
Uno de los propósitos soportados (ver abajo).
projectId
string
condicional
Requerido cuando purpose=cip. Debe referenciar un proyecto AI que pertenezca a tu cuenta.
filename
string
no
Nombre original del archivo. Se usa para componer el key del objeto. Sanitizado server-side.
size
number
no
Tamaño declarado en bytes. Informativo; el servicio aplica maxBytes igual.
mime
string
no
Mime declarado. El servicio detecta el mime real desde los magic bytes.
Respuesta
token
JWT firmado con EdDSA. Pasalo como Authorization: Bearer <token> en el paso 2.
exp
Timestamp Unix (segundos) en el que el token expira. ~5 minutos desde su emisión.
uploadUrl
URL exacta a la que enviar el archivo. Usala tal cual.
credentialId
Credencial de almacenamiento utilizada (informativo, para auditoría).
Errores
400
unknown purpose
purpose no está en la lista permitida.
400
cip grants require projectId
Falta projectId para purpose=cip.
401
unauthorized
API key faltante o inválida.
404
project not found
El projectId no existe o pertenece a otra cuenta.
Paso 2: Enviar el archivo
Endpoint
Debes usar el uploadUrl devuelto en el paso 1 tal cual:
Headers
Body
Un único multipart/form-data con la parte llamada file:
Respuesta (éxito)
mime
Mime detectado a partir de los magic bytes del archivo (no del Content-Type declarado).
bytes
Tamaño final después del strip de EXIF / re-encoding.
sha256
Digest hexadecimal del contenido subido. Útil para deduplicación.
key
Path completo del objeto almacenado.
Guarda key + sha256 de ser necesario. Esos dos valores son todo lo que necesitas para referenciar, deduplicar o descargar el archivo más tarde.
Errores
401
unauthorized
JWT faltante, mal formado, expirado o firmado con clave incorrecta.
403
forbidden_credential / forbidden_bucket
La autorización referencia una credencial o bucket no permitido. No debería ocurrir con autorizaciones emitidas por la API.
413
too_large
El archivo excede el maxBytes de la autorización.
415
invalid_mime
Los magic bytes no coinciden con los allowedMimes de la autorización. El Content-Type declarado se ignora.
400
bad_request
No es multipart, falta la parte file, etc.
Ejemplos
Buenas prácticas
Una autorización por archivo
Las autorizaciones son de corta duración. Aunque técnicamente sean reutilizables hasta exp, conviene que cada archivo tenga la suya para que los logs de auditoría mapeen 1:1 contra los objetos almacenados.
Confía en la detección de mime del servidor
El servicio ignora el Content-Type que declaras y lee los magic bytes reales del archivo. Un .csv con Content-Type: image/png se rechaza con invalid_mime. Siempre entrega el archivo original sin modificar.
Política de reintentos
400, 401, 403, 413, 415: no reintentar, la respuesta no va a cambiar.
5xx, errores de red: reintentar con backoff exponencial, pidiendo una autorización nueva si la anterior ya expiró.
Rate limits
Endpoint de autorización: 60 requests/minuto por API key. Endpoint de subida: sin límite por key, pero la concurrencia del servicio puede encolar requests en picos altos.
Seguridad
Los tokens de autorización están firmados con EdDSA (Ed25519). El servicio de subida verifica cada request contra la clave pública.
Cada autorización codifica el bucket exacto, prefijo de key, lista de mimes y tope de bytes. Un token comprometido no puede usarse fuera de ese alcance.
Las imágenes pasan por
sharp().rotate(), que elimina toda la metadata EXIF (incluyendo GPS) y aplica el flag de orientación antes de escribir al almacenamiento.El servicio cumple con SOC 2: las credenciales de almacenamiento están acotadas por bucket, así que el alcance de una credencial no puede alcanzar otro bucket.
Última actualización
¿Te fue útil?

