Guías
Respuestas
Las respuestas correctas envuelven su contenido en data; las listas añaden pagination; algunas operaciones añaden meta; los errores son problemas RFC 9457. Las respuestas de la API comparten un mismo conjunto de cabeceras.
Variantes del sobre
Enlace a esta sección: Variantes del sobreUna lista devuelve sus registros en data y el estado de paginación en pagination. nextCursor es null en la última página. total aparece solo cuando lo pides con includeTotal.
{
"data": [
{
"id": "5e8d1a9c",
"orderNumber": "ORD-0412",
"status": "reserved",
"startDate": "2026-10-17T08:00:00.000Z",
"endDate": "2026-10-19T17:00:00.000Z",
"contact": { "id": "c71f40b2", "name": "Acme Rentals" },
"grossPrice": "1234.50"
}
],
"pagination": { "nextCursor": "opaque-cursor", "hasMore": true }
}Recurso único
Enlace a esta sección: Recurso únicoUna lectura de detalle, una creación y una actualización devuelven el recurso en data. Las operaciones que crean un recurso responden 201; las lecturas y las actualizaciones responden 200.
Recurso con meta
Enlace a esta sección: Recurso con metaUnas pocas operaciones también te informan, en meta, de lo que la llamada hizo en otros registros. POST /api informa meta., las tareas de entrega y devolución que creó la reserva; POST /api informa meta.. Ambas devuelven el pedido completo en data.
Sin cuerpo
Enlace a esta sección: Sin cuerpoLa mayoría de los borrados y las dos operaciones de archivado (PUT /api y PUT /api) responden 204 sin cuerpo. Cuatro borrados responden 200 y devuelven en su lugar el registro que han cambiado: DELETE /api y DELETE /api devuelven el contacto, DELETE /api devuelve el resultado de la desasignación y DELETE /api devuelve el proyecto. Una lectura condicional cuyo ETag está vigente responde 304, también sin cuerpo.
Resultados del lote
Enlace a esta sección: Resultados del lotePOST /api es un lote. Responde 200 con un resultado por elemento, en el orden de la petición. Con atomic: false responde 207 y cada elemento lleva su propio status y error. Consulta la tabla de reintentos en Errores.
Los errores son application y llevan type, title, status, code, detail y requestId, además de errors, requiredScope, requiredAddon o retryAfter cuando corresponden. Se describen en Errores.
Cabeceras de respuesta
Enlace a esta sección: Cabeceras de respuestaEstas cabeceras provienen del documento OpenAPI, más la estándar Date.
| Cabecera | Dónde | Qué te dice |
|---|---|---|
X-Request-Id | Todas las respuestas de la API. No los endpoints de OAuth, ni el 401 del descubrimiento de MCP | El identificador de la petición (req_…), generado por el servidor. Los cuerpos de error lo repiten como requestId; el 401 del endpoint MCP lo lleva solo en el cuerpo. Regístralo y cítalo al contactar con soporte. |
RateLimit-Limit | Toda respuesta que consumió cuota (todas salvo un 401 y un 403 insufficient_scope) | Peticiones permitidas por minuto en la cuota más estricta que consumió la petición. |
RateLimit-Remaining | Igual | Peticiones restantes en la ventana actual de un minuto de esa cuota. |
RateLimit-Reset | Igual | Segundos hasta que esa ventana se reinicia. |
Retry-After | Respuestas 429 | Segundos que esperar antes de reintentar; el problema 429 repite el valor en retryAfter. Consulta Límites de peticiones. |
ETag | Lecturas de detalle y escrituras que devuelven el recurso | Una etiqueta fuerte de la representación. Devuélvela como If-Match en una escritura, o como If-None-Match en una lectura. |
Content-Language | Respuestas de error | El idioma de detail y errors[]., negociado a partir de Accept-Language. |
Idempotent-Replay | Declarado por las operaciones de escritura; presente en una respuesta reproducida para un Idempotency-Key repetido | true cuando es la respuesta almacenada del primer intento, no una ejecución nueva. Está ausente en la primera ejecución, y un error almacenado también se reproduce. |
Date | Todas las respuestas | La hora de los servidores de Filmo. Úsala, y no tu propio reloj, siempre que calcules una ventana para lecturas incrementales. |
Deprecation, Sunset, Link | Respuestas de una operación obsoleta | Anuncia que la operación está obsoleta, el día en que se retirará y dónde está el aviso (rel="deprecation"). |
Las cabeceras de cuota se explican en Límites de peticiones, Idempotent-Replay en Idempotencia y ETag en Concurrencia.
Lecturas condicionales
Enlace a esta sección: Lecturas condicionalesLas lecturas de detalle devuelven un ETag. Envía el que ya tienes en If-None-Match: si sigue vigente, la respuesta es 304 sin cuerpo y con la cabecera ETag, y tu copia está al día. Si el recurso cambió, recibes el 200 completo con un ETag nuevo.
# First read: note the ETag header.
curl -sS -D - -o /dev/null "https://app.filmo.io/api/v1/account" \
-H "Authorization: Bearer $FILMO_API_KEY"
# Later: ask only for a newer version (paste the ETag you received, quotes included).
curl -sS -i "https://app.filmo.io/api/v1/account" \
-H "Authorization: Bearer $FILMO_API_KEY" \
-H 'If-None-Match: "<the ETag you received>"'Avisos en meta
Enlace a esta sección: Avisos en metaUna operación marcada como obsoleta lleva las cabeceras Deprecation y Sunset, y cada cuerpo JSON que devuelve lleva meta. con una entrada cuyo code es deprecated. Registra esos avisos y configura alertas sobre ellos: el día de la retirada es al menos seis meses posterior a la entrada en vigor de la obsolescencia. Más adelante pueden añadirse entradas con otros códigos; ignora las que no conozcas.
{ "data": { "id": "5e8d1a9c" }, "meta": { "warnings": [{ "code": "deprecated" }] } }Estados en uso
Enlace a esta sección: Estados en uso| Estado | Significado |
|---|---|
| 200 | Éxito. Lecturas, actualizaciones, acciones y consultas. |
| 201 | Se creó un recurso. |
| 204 | Éxito sin cuerpo: la mayoría de los borrados y las operaciones de archivado. Cuatro borrados responden 200 con el registro modificado. |
| 207 | Resultado parcial de un lote: solo POST /api con atomic: false. Lee el status de cada elemento. |
| 304 | No modificado: el ETag que enviaste en If-None-Match está vigente. |
| 400 | validation_error: la consulta o el cuerpo no son válidos. |
| 401 | La clave falta o no se puede usar: unauthorized y los códigos api_key_*. |
| 402 | addon_required: la cuenta no tiene el add-on de ese módulo. |
| 403 | insufficient_scope o forbidden. |
| 404 | not_found: no existe o queda fuera del aislamiento de la clave. |
| 409 | conflict (su causa está en errors[0].), contact_in_use, address_in_use o insufficient_stock. |
| 412 | precondition_failed: If-Match no coincidió. |
| 422 | idempotency_key_reused. |
| 429 | rate_limited. |
| 500 | internal_error. |
| 503 | service_unavailable: la funcionalidad está desactivada para la cuenta. |
Tolera lo que no conoces
Enlace a esta sección: Tolera lo que no conocesDentro de v1, Filmo añade propiedades a las respuestas y valores a las uniones, como los estados, sin previo aviso. Ignora las propiedades que no uses, trata un valor de enum desconocido como desconocido y no como un error, y no valides las respuestas con un esquema que rechace propiedades adicionales. Los clientes generados con enums cerrados se rompen con los cambios aditivos: consulta Versionado.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasGuías
Errores
Los errores son documentos de problema RFC 9457. Ramifica según el
codeestable, nunca según el texto, y usa la tabla de reintentos para decidir si volver a intentarlo.Guías
Paginación
Las listas devuelven una página cada vez. Pide una página con
limity, mientraspagination.seahasMore true, vuelve a llamar con elnextCursorque te dieron.Guías
Tipos de datos
El dinero es una cadena decimal, las fechas son ISO 8601, una propiedad puede estar presente y ser null, y los campos personalizados son mapas. Interpreta cada tipo una sola vez, en el borde de tu integración.
Guías
Versionado y obsolescencia
Dentro de v1 Filmo solo añade cosas. Cualquier cosa que pueda romper tu integración se anuncia antes, ya sea como una nueva versión mayor o como una obsolescencia con al menos seis meses antes de la retirada.
¿Te ha resultado útil esta página?