Files API
Sube archivos de referencia de imagen, video o audio para solicitudes de generación de Rivya API, con comprobaciones MIME, límites de tamaño y tokens de duración.
Última revisión el 2026/08/26
Usa POST /api/v1/files para subir medios de referencia para modelos que necesitan entradas de imagen, video o audio.
Files API es solo para entradas de referencia. No crea tareas de generación por sí misma. Después de subir el archivo, pasa la url devuelta y los metadatos a los params del modelo, normalmente mediante params.referenceMediaItems.
Endpoint
POST https://rivya.ai/api/v1/files
GET https://rivya.ai/api/v1/files/{fileId}Headers requeridos:
Authorization: Bearer rvya_sk_...
Content-Type: multipart/form-dataLa clave API debe incluir el scope files:create para subir archivos y files:read para recuperar metadatos. Las claves nuevas de Rivya API incluyen ambos scopes por defecto.
Campos multipart
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
file | binary | sí | El archivo de imagen, video o audio que se va a subir. |
kind | string | sí | Uno de image, video o audio. |
model | string | no | ID público del modelo. Cuando está presente, Rivya valida que el modelo acepte este tipo de archivo. |
client_request_id | string | no | Tu ID de trazabilidad, de hasta 128 caracteres. |
Usa model cuando el archivo esté destinado a un modelo específico. Esto te da validación MIME y de tamaño específica del modelo antes de que se acepte el archivo.
Límites de subida
Files API usa la misma política de subida que las referencias de Rivya.
Límites por defecto:
| Tipo | Tamaño máximo por defecto | Tipos MIME comunes |
|---|---|---|
image | 10 MB | image/jpeg, image/png, image/webp |
video | 50 MB | video/mp4, video/quicktime, video/webm |
audio | 10 MB | audio/mpeg, audio/mp4, audio/wav, audio/x-wav, audio/aac, audio/ogg |
Algunos modelos tienen límites diferentes. Por ejemplo, ciertos modelos con imagen de referencia admiten imágenes más grandes, y ciertos modelos con video de referencia admiten archivos hasta el techo de subida seguro del producto. Pasa siempre model cuando conozcas el modelo objetivo y lee la referencia de modelos de la API antes de aceptar subidas de usuarios.
Los límites de las referencias de imagen firmadas incluyen:
| Modelo | Máximo de imágenes | Límite por imagen | Tipos MIME de imagen admitidos |
|---|---|---|---|
seedream-5-pro | 10 | 10 MB | JPEG, PNG, WebP |
seedream-5-pro-layer-decomposition | exactamente 1 | 30 MB | JPEG, PNG, WebP, BMP, GIF, TIFF |
nano-banana-2-lite | 10 | 30 MB | JPEG, PNG, WebP |
qwen-image-3 / qwen-image-3-pro | 3 | 10 MB | JPEG, PNG, WebP, BMP, GIF, TIFF |
grok-imagine-image-2-0 | 5 | 10 MB | JPEG, PNG, WebP |
wan-3-0-video | 10 en modo de referencia; 1–2 en modo de fotogramas | 20 MB | JPEG, PNG sin transparencia, WebP, BMP |
Cada imagen de referencia de Image5, Grok Imagine Image 2.0 o Wan 3.0 debe subirse indicando su model objetivo. Conserva width, height, size_bytes e image_dimensions_token de la respuesta original; en la solicitud de generación debes enviarlos como width, height, sizeBytes e imageDimensionsToken. Una URL externa arbitraria no satisface esta validación vinculada al modelo.
La descomposición en capas también valida las dimensiones detectadas antes de subir la imagen: entre 262.144 y 36.000.000 píxeles en total y una relación de aspecto de 1:16 a 16:1.
Los límites de subida específicos de los modelos con referencia de video son:
| Modelo | Entradas de imagen | Entradas de video | Entradas de audio |
|---|---|---|---|
kling-3-turbo | 1 × 10 MB; JPEG o PNG | no admitidas | no admitidas |
seedance-2-mini | hasta 9 × 30 MB; JPEG, PNG, WebP, BMP, GIF o TIFF | hasta 3 × 50 MB; MP4 o MOV | hasta 3 × 15 MB; MP3 o WAV |
seedance-2-5 | hasta 30 × 30 MB; JPEG, PNG, WebP, BMP, GIF o TIFF | hasta 10 × 95 MB; MP4 o MOV | hasta 10 × 15 MB; MP3 o WAV |
minimax-h3 | hasta 9 × 30 MB; JPEG, PNG o WebP | hasta 3 × 50 MB; MP4 o MOV | hasta 3 × 15 MB; MP3 o WAV |
happyhorse-1-1 | hasta 9 × 20 MB; JPEG, PNG o WebP | no admitidas | no admitidas |
omnihuman-1-5 | 1 × 10 MB; JPEG, PNG o WebP | no admitidas | 1 × 10 MB; MP3, M4A, WAV, AAC u OGG |
volcengine-video-lip-sync | no admitidas | 1 × 95 MB; MP4 o MOV | 1 × 10 MB; MP3, M4A, WAV, AAC u OGG |
wan-3-0-video | fotogramas: 1 obligatorio y 1 opcional; referencia: hasta 10 × 20 MB; JPEG, PNG sin transparencia, WebP o BMP | referencia: hasta 5 × 95 MB; MP4 o MOV; 1–15 segundos cada uno y 15 segundos en total | referencia: hasta 5 × 15 MB; MP3 o WAV; 1–15 segundos cada uno y 15 segundos en total; no se acepta como único tipo de entrada |
Estos son los límites de subida admitidos por Rivya, que pueden ser inferiores a los del servicio proveedor. Sube cada referencia de Video8 o Wan 3.0 indicando su model objetivo. Los videos de referencia requieren tanto la prueba de duración firmada como los metadatos de video firmados de la respuesta original de subida vinculada al modelo. Los tokens de duración de audio de Wan 3.0 también vinculan el tipo MIME detectado y el tamaño de la subida en bytes.
Las imágenes de Wan 3.0 deben medir entre 240 y 8.000 píxeles por lado, y los videos entre 240 y 4.096 píxeles por lado; ambos deben respetar una relación de aspecto de 1:8–8:1. En el modo de referencia, el video y el audio tienen límites totales independientes de 15 segundos, y el audio no puede ser el único tipo de referencia.
Rivya valida la firma detectada del archivo, no solo la extensión del nombre de archivo.
Ejemplo curl
curl https://rivya.ai/api/v1/files \
-H "Authorization: Bearer rvya_sk_..." \
-F "file=@./reference.png" \
-F "kind=image" \
-F "model=nano-banana-2-lite" \
-F "client_request_id=asset-123"Ejemplo JavaScript
import { readFile } from "node:fs/promises";
const form = new FormData();
const file = new Blob([await readFile("./reference.png")], {
type: "image/png"
});
form.set("file", file, "reference.png");
form.set("kind", "image");
form.set("model", "nano-banana-2-lite");
form.set("client_request_id", "asset-123");
const response = await fetch("https://rivya.ai/api/v1/files", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIVYA_API_KEY}`
},
body: form
});
const uploadedFile = await response.json();
console.log(uploadedFile.id, uploadedFile.url);Ejemplo Python
import os
import requests
with open("./reference.png", "rb") as file_handle:
response = requests.post(
"https://rivya.ai/api/v1/files",
headers={
"Authorization": f"Bearer {os.environ['RIVYA_API_KEY']}",
},
files={"file": ("reference.png", file_handle, "image/png")},
data={
"kind": "image",
"model": "nano-banana-2-lite",
"client_request_id": "asset-123",
},
timeout=60,
)
uploaded_file = response.json()
print(uploaded_file["id"], uploaded_file["url"])Respuesta
{
"id": "file_...",
"object": "file",
"kind": "image",
"file_name": "reference.png",
"mime_type": "image/png",
"size_bytes": 482314,
"url": "https://...",
"duration_seconds": null,
"duration_token": null,
"width": 1024,
"height": 1024,
"image_dimensions_token": "signed_image_metadata_token",
"video_width": null,
"video_height": null,
"frames_per_second": null,
"video_bitrate_mbps": null,
"video_file_size_bytes": null,
"video_metadata_token": null,
"created_at": "2026-05-11T00:00:00.000Z",
"expires_at": null
}En subidas de video y audio, duration_seconds puede venir poblado. Cuando un modelo requiere verificación de duración, copia duration_token al parámetro de generación relacionado como durationToken.
En las subidas de imagen compatibles, width y height se detectan a partir de los bytes reales del archivo. Los cinco modelos Image5, Grok Imagine Image 2.0 y Wan 3.0 exigen el image_dimensions_token firmado de la respuesta original vinculada al modelo; cópialo al elemento de referencia como imageDimensionsToken y copia size_bytes como sizeBytes. Una consulta posterior de metadatos puede devolver el token como null; si el token original falta o ha caducado, vuelve a subir la imagen.
En las subidas de video compatibles con Video8 y Wan 3.0, Rivya inspecciona los bytes MP4 o MOV y devuelve video_width, video_height, frames_per_second, video_bitrate_mbps, video_file_size_bytes y video_metadata_token. Cópialos al elemento de referencia como width, height, framesPerSecond, videoBitrateMbps, sizeBytes y videoMetadataToken. El token queda vinculado a la cuenta, el modelo objetivo, la URL, el tipo MIME, las dimensiones, la frecuencia de fotogramas, el bitrate y el tamaño de la subida. La duración se verifica por separado mediante durationToken. Una consulta posterior de metadatos puede devolver video_metadata_token como null; vuelve a subir el video fuente en lugar de inventar metadatos.
Recuperar metadatos de archivo
Usa GET /api/v1/files/{fileId} para leer metadatos de un archivo que pertenece a la misma cuenta de Rivya:
curl https://rivya.ai/api/v1/files/file_... \
-H "Authorization: Bearer rvya_sk_..."La respuesta usa la misma forma PublicApiFile que la subida. Si el archivo pertenece a otra cuenta o ya no está disponible, la API devuelve not_found.
Usar la subida en params de generación
No envíes un campo files de nivel superior a POST /api/v1/generations.
Para integraciones nuevas, pasa el resultado de la subida mediante params.referenceMediaItems:
{
"model": "nano-banana-2-lite",
"prompt": "Restyle this product photo for a clean editorial catalog page",
"params": {
"referenceMediaItems": [
{
"url": "https://...",
"kind": "image",
"name": "reference.png",
"mimeType": "image/png",
"width": 1024,
"height": 1024,
"sizeBytes": 482314,
"imageDimensionsToken": "image_dimensions_token_from_files_api"
}
]
},
"client_request_id": "order-123-preview"
}Para video o audio:
{
"url": "https://...",
"kind": "video",
"name": "source.mov",
"mimeType": "video/quicktime",
"durationSeconds": 12.4,
"durationToken": "duration_token_from_files_api",
"width": 1920,
"height": 1080,
"framesPerSecond": 30,
"videoBitrateMbps": 8.5,
"sizeBytes": 26214400,
"videoMetadataToken": "video_metadata_token_from_files_api"
}Los campos de video firmados completos del ejemplo anterior son obligatorios para las referencias de video de Video8 y Wan 3.0. Las referencias de audio de Wan 3.0 usan mimeType, sizeBytes, durationSeconds y durationToken; las referencias de imagen usan el contrato de metadatos específico del modelo descrito anteriormente.
Para Seedream 5.0 Pro Layer Decomposition, envía exactamente una imagen y los metadatos firmados devueltos por la subida vinculada al modelo:
{
"model": "seedream-5-pro-layer-decomposition",
"prompt": "Separa el producto, la sombra, la tipografía y el fondo en capas limpias",
"params": {
"size": "auto",
"output_format": "png",
"referenceMediaItems": [
{
"url": "https://...",
"kind": "image",
"name": "campaign.tiff",
"mimeType": "image/tiff",
"width": 2048,
"height": 2048,
"sizeBytes": 6291456,
"imageDimensionsToken": "image_dimensions_token_from_files_api"
}
]
}
}Algunos parámetros de modelos más antiguos todavía usan campos URL específicos del modelo. Si la referencia de modelos de la API documenta un parámetro específico, sigue esa página del modelo en lugar de inventar un campo nuevo.
Errores
Files API usa el mismo envoltorio público de error que el resto de Rivya API:
{
"error": {
"code": "validation_failed",
"message": "The request is invalid.",
"requestId": "req_..."
}
}Casos comunes:
| HTTP | Código | Causa |
|---|---|---|
| 400 | validation_failed | Falta file, kind no es compatible, el tipo MIME no es compatible, el archivo es demasiado grande o el modelo no acepta el tipo seleccionado. |
| 401 | api_key_missing / api_key_invalid | Falta la clave API Bearer o no es válida. |
| 403 | api_scope_denied | La clave no incluye files:create o files:read para la acción solicitada. |
| 429 | rate_limited | Demasiadas subidas de archivos en el minuto actual. |
| 503 | public_api_disabled | Public API está desactivada en el entorno actual. |
Notas de seguridad
No guardes claves API completas en navegadores, clientes móviles, logs, eventos de analytics ni capturas de pantalla.
Trata las URL de archivos subidos y los valores duration_token, image_dimensions_token y video_metadata_token como material temporal de integración. Úsalos solo para construir la solicitud de generación siguiente y no los expongas en páginas públicas.
Páginas relacionadas
Errores y límites de la API
Maneja códigos públicos de error de Rivya API, estados HTTP, límites de tasa, conflictos de idempotencia y decisiones de reintento.
Webhooks de API
Crea endpoints de webhook firmados para la API de Rivya, verifica firmas de entrega, revisa intentos de entrega y envía eventos de prueba seguros.