Guías
Autenticación
Cada operación requiere una clave de API enviada como bearer token. Solo un administrador puede crear una clave, y la clave actúa como ese administrador, así que decide quién la posee antes de crearla.
Enviar la clave
Enlace a esta sección: Enviar la clavePon la clave en la cabecera Authorization de cada petición, como token bearer. Toda clave empieza por fk_live_: hay un único prefijo y no existen claves de prueba ni de sandbox, así que toda clave funciona sobre los datos reales de su cuenta. La documentación es pública; lo restringido es la credencial.
GET /api/v1/account HTTP/1.1
Host: app.filmo.io
Authorization: Bearer <your API key>Para comprobar qué puede hacer una clave, llama a GET /api. Devuelve la clave que hizo la petición, con su nombre y sus permisos, pero nunca su secreto (apiKey).
# The scopes of the key are in data.apiKey.scopes.
curl -sS "${FILMO_BASE_URL:-https://app.filmo.io}/api/v1/account" \
-H "Authorization: Bearer $FILMO_API_KEY" | jq '.data.apiKey'const base = process.env.FILMO_BASE_URL ?? "https://app.filmo.io";
const res = await fetch(base + "/api/v1/account", {
headers: { Authorization: `Bearer ${process.env.FILMO_API_KEY}` },
});
if (!res.ok) {
// 401 and 403 come back as application/problem+json: branch on `code`.
const problem = await res.json();
throw new Error(res.status + " " + problem.code + " (request " + problem.requestId + ")");
}
const { data } = await res.json();
console.log(data.apiKey.name, data.apiKey.scopes);import os
import requests
base = os.environ.get("FILMO_BASE_URL", "https://app.filmo.io")
res = requests.get(
base + "/api/v1/account",
headers={"Authorization": f"Bearer {os.environ['FILMO_API_KEY']}"},
timeout=30,
)
if not res.ok:
# 401 and 403 come back as application/problem+json: branch on "code".
problem = res.json()
raise SystemExit(f"{res.status_code} {problem['code']} (request {problem['requestId']})")
key = res.json()["data"]["apiKey"]
print(key["name"], key["scopes"])Crear una clave
Enlace a esta sección: Crear una claveIniciar sesión como administrador
Solo los administradores de la cuenta pueden crear claves, a mano o mediante OAuth.
Abrir los ajustes de API y MCP
En la interfaz en español, la sección se llama Ajustes → API y MCP.
Crea la clave y ponle el nombre de la integración
Usa una clave por integración, para poder revocar una sin tocar las demás.
Elegir los scopes
Marca solo los permisos que la integración llama. Los scopes de una clave no se pueden editar después: para cambiarlos, crea una clave nueva y revoca la antigua. Consulta Permisos (scopes).
Establecer una fecha de caducidad, si quieres una
La fecha es opcional y debe ser futura. Una clave sin fecha no caduca, y ninguna clave caduca por falta de uso.
Copia la clave y guárdala
Filmo muestra la clave una sola vez y guarda solo un hash de ella, así que no puede volver a mostrarla. Guárdala en un gestor de secretos o en una variable de entorno antes de cerrar el diálogo.
La clave se muestra una sola vez y equivale a acceso programático a los datos de tu empresa. Si la pierdes, crea una clave nueva y revoca la anterior.
El centro de ayuda tiene el mismo procedimiento con pantallas: Generar una clave de API.
De quién es la clave
Enlace a esta sección: De quién es la claveUna clave depende de un administrador real de la cuenta, el que la creó, y todo lo que escribe se atribuye a ese administrador. Lo mismo vale para cada conexión OAuth.
Filmo comprueba esa condición en cada petición, no solo cuando se crea la clave. Si la persona que creó la clave deja la cuenta o se desactiva, la clave responde 401 api_key_owner_inactive. Si deja de ser administradora, responde 401 api_key_owner_not_admin. La clave en sí está bien: lo que cambió es el rol de su propietario, y la solución es volver a emitir la clave desde una cuenta que siga siendo administradora.
Crear las claves de producción desde una cuenta de administrador dedicada
Enlace a esta sección: Crear las claves de producción desde una cuenta de administrador dedicadaNo crees claves de producción desde la cuenta de una persona que pueda marcharse o cambiar de rol. Crea una cuenta de administrador dedicada y duradera para las integraciones, ponle un nombre que diga para qué sirve y crea las claves desde ella. Hoy no existe un usuario de servicio ni de bot: el propietario de la clave es un usuario real. La clave en sí no ocupa una plaza, pero la cuenta de administrador desde la que la creas es un usuario como cualquier otro y sí la ocupa, así que cuenta con esa cuenta en tu presupuesto.
Contratistas y agencias
Enlace a esta sección: Contratistas y agenciasUn desarrollador o una agencia que trabaja para una empresa de alquiler no es administrador de su cuenta y no puede crear una clave. El administrador de la empresa de alquiler crea la clave solo con los scopes que necesita el trabajo y la entrega mediante un gestor de secretos compartido, nunca por correo ni por chat. El contratista no necesita un acceso de administrador. Cuando termina el trabajo, el administrador revoca la clave.
Revocar o rotar una clave
Enlace a esta sección: Revocar o rotar una claveRevoca una clave en la sección API y MCP de los ajustes (*Ajustes → API y MCP*). Una clave revocada responde 401 api_key_revoked. Una conexión hecha mediante OAuth aparece ahí etiquetada como integración conectada, y revocarla corta el acceso de inmediato.
No hay un comando de rotación. Pueden estar activas varias claves a la vez, y ese solapamiento es la forma de rotar una clave sin tiempo de inactividad:
Crear una clave nueva
Mismo patrón de nombre y mismos scopes.
Desplegarla
Actualiza el secreto que lee tu integración y reinicia la integración.
Revisar el tráfico
Confirma que las llamadas de la integración funcionan con la nueva clave.
Revoca la clave antigua
Una suscripción puede tener hasta 50 claves sin revocar (una clave caducada sigue contando). Las conexiones OAuth cuentan en ese total, pero solo se rechaza al llegar al límite la creación de una clave a mano. Revoca las que ya no uses.
Errores de autenticación
Enlace a esta sección: Errores de autenticaciónUna petición sin una clave utilizable se responde con 401 y un documento de problema. Ramifica según code. Filmo comprueba una clave en este orden: se reconoce, luego no está revocada, luego no ha caducado, luego su propietario sigue siendo un administrador activo; la primera comprobación que falla decide el código. Un 401 y un 403 insufficient_scope no consumen cuota del límite de peticiones; toda otra respuesta de una clave autenticada sí.
| Estado | Error | Significado | Qué hacer |
|---|---|---|---|
| 401 | unauthorized | La petición no lleva una cabecera Authorization bearer válida. | Envía Authorization: Bearer <key>. |
| 401 | api_key_invalid | La clave no se reconoce. | Comprueba que se ha copiado la clave entera; crea una nueva si tienes dudas. |
| 401 | api_key_revoked | La clave fue revocada. | Crea una clave nueva. |
| 401 | api_key_expired | La clave ha caducado. | Crea una clave nueva. |
| 401 | api_key_owner_inactive | El administrador que creó la clave salió de la cuenta o fue desactivado. | Vuelve a emitir la clave desde una cuenta que siga siendo administradora. |
| 401 | api_key_owner_not_admin | El propietario de la clave ya no es administrador. | Vuelve a emitir la clave desde una cuenta de administrador. |
Un 403 es un problema distinto: la clave se autenticó, pero no puede hacer esto. insufficient_scope se refiere a la clave, forbidden a su propietario y addon_required (402) al add-on de un módulo. Errores los distingue. Todo cuerpo de error lleva un requestId; cítalo cuando contactes con soporte.
Mantén la clave segura
Enlace a esta sección: Mantén la clave segura- Llama a la API desde un servidor. No pongas nunca una clave en código de navegador, en una app móvil ni en un repositorio público: quien la tenga tiene acceso programático a los datos de la empresa. En producción la API acepta peticiones de navegador de otro origen solo desde
https://, y los endpoints de OAuth y MCP no envían ninguna cabecera CORS, así que una página de cualquier otro origen no puede llamarla de todos modos.docs. filmo. io - Lee la clave de una variable de entorno o de un gestor de secretos, como hacen los ejemplos con
FILMO_API_KEY. - No escribas la cabecera
Authorizationen los registros. - Da a cada integración su propia clave, con los scopes más estrictos que necesite.
- Configura alertas para 401
api_key_owner_inactiveyapi_key_owner_not_admin: significan que una integración está a punto de dejar de funcionar. Consulta Pasar a producción.
Cómo funcionan los scopes
Enlace a esta sección: Cómo funcionan los scopesCada clave lleva un conjunto de permisos (scopes), elegidos cuando un administrador la crea en la sección de API y MCP de los ajustes (*Ajustes → API y MCP*). Cada operación exige exactamente un permiso (scope), que se muestra en su página y en el archivo OpenAPI como x-required-scope. En total hay 59 permisos (scopes).
orders:readpermite a una clave leer pedidos.orders:writele permite crearlos, modificarlos y actuar sobre ellos. No des por hecho que escribir incluye leer: una clave que escribe pedidos y los vuelve a leer necesita ambos.- Un permiso (scope) cubre un recurso, no una sola operación. Un permiso (scope) de escritura cubre todas las creaciones, actualizaciones, eliminaciones y acciones sobre ese recurso.
- Algunos scopes no tienen gemelo de escritura, como
account:read,users:readyschedule:read. - Dos permisos son especiales.
workflows:runejecuta un workflow.ai:askpregunta a la IA sobre tus datos y gasta créditos de IA.
Los permisos (scopes) acotan qué operaciones puede llamar una clave. Los datos que ve se acotan aparte por la cuenta (consulta Cuentas y aislamiento), y algunas operaciones necesitan además un add-on en la cuenta. Por MCP rigen los mismos scopes, y una clave solo ve las herramientas que puede llamar.
Cuando se rechaza una llamada: 403 insufficient_scope
Enlace a esta sección: Cuando se rechaza una llamada: 403 insufficient_scopeUna clave sin el scope que necesita una operación recibe 403 insufficient_scope. El cuerpo nombra el scope que falta en requiredScope. Se arregla emitiendo una clave que tenga ese scope.
{
"type": "https://docs.filmo.io/errors/insufficient_scope",
"title": "Insufficient scope",
"status": 403,
"code": "insufficient_scope",
"detail": "The API key does not have the required scope (orders:write)",
"requiredScope": "orders:write",
"requestId": "req_5f1c2f4e3a5b4f6d8e7a0b1c2d3e4f5a"
}Otras dos denegaciones se parecen y tienen soluciones distintas.
| Respuesta | Acerca de | Solución |
|---|---|---|
403 insufficient_scope | La clave. Le falta el scope. | Emite una clave con el scope indicado en requiredScope. |
403 forbidden | El propietario de la clave. La clave es correcta, pero su propietario carece del módulo, la organización o el permiso de administrador que necesita la operación. | Un administrador de la cuenta concede el permiso. |
402 addon_required | El plan. La cuenta no ha contratado, o ha dejado caducar, el add-on de ese módulo. | Contrata el add-on indicado en requiredAddon. Ningún rol lo evita. |
El centro de ayuda explica los permisos en la app: Scopes y permisos de la API y Roles y permisos.
Mínimo privilegio
Enlace a esta sección: Mínimo privilegio- Una clave por integración, para poder revocar una sin tocar las demás.
- Empieza con los scopes
:read. Añade un scope de escritura solo para el recurso en el que escribes. - Incluye siempre
account:read.GET /apies la primera llamada de cualquier integración: devuelve los permisos (scope) de la clave, los add-ons de la cuenta y la versión del contrato./v1 /account - Deja fuera
ai:askyworkflows:runsalvo que la integración los use de verdad. - Comprueba qué puede hacer realmente una clave llamando a
GET /apicon ella. Una clave creada mediante OAuth puede acabar con scopes distintos de los solicitados (menos, o adicionales que ha marcado el administrador)./v1 /account
curl -sS "${FILMO_BASE_URL:-https://app.filmo.io}/api/v1/account" \
-H "Authorization: Bearer $FILMO_API_KEY"Recetas por tipo de integración
Enlace a esta sección: Recetas por tipo de integraciónSon puntos de partida. Quita lo que tu integración no use; añade lo que una llamada concreta pida en requiredScope.
Sincronización de contactos del CRM
Enlace a esta sección: Sincronización de contactos del CRMaccount:readcontacts:readcontacts:write- Opcional:
custom-fields:readpara mapear los campos personalizados, ytags:readytags:writepara etiquetar lo que importes.
Formulario web que crea una oportunidad
Enlace a esta sección: Formulario web que crea una oportunidadaccount:readcontacts:readpara buscar a la personacontacts:writepara crearlacrm:readpara leer los embudoscrm:writepara crear la oportunidad- Las operaciones de CRM también necesitan el add-on de CRM en la cuenta.
Disponibilidad y reservas en un sitio de reservas
Enlace a esta sección: Disponibilidad y reservas en un sitio de reservasaccount:readavailability:readitems:readcontacts:readycontacts:writeorders:readyorders:writepara crear y reservar el pedido
Sincronización de inventario
Enlace a esta sección: Sincronización de inventarioaccount:readitems:read, que también cubre las unidades serializadas- Opcional:
spaces:readpara los almacenes yitems:writesolo si escribes de vuelta datos de stock
Sincronizar la agenda
Enlace a esta sección: Sincronizar la agendaaccount:readschedule:read- Opcional:
tasks:read,planner:read,staff:readyvehicles:readsi también necesitas tareas, recursos asignables, personal o vehículos
Facturas a contabilidad
Enlace a esta sección: Facturas a contabilidadaccount:readinvoices:read, que cubre las facturas, sus líneas y las notas de créditotreasury:readpara los pagoscontacts:readpara el identificador fiscal del clienteinvoices:writesolo si reflejas las facturas emitidas por tu ERP conPUT /api/v1 /invoices /external /{originSystem} /{originExternalId}
Cada permiso (scope), con las operaciones que lo necesitan, está en la página de scopes.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasGuías
Permisos (scopes)
Una clave lleva permisos; cada operación exige exactamente uno. Concede los mínimos que necesites.
Guías
OAuth
Filmo implementa OAuth 2.1 para clientes públicos: código de autorización con PKCE, sin secreto de cliente. El token que emite es una clave de API de tipo OAuth, así que funciona en toda la API REST y en MCP, con los permisos (scopes) que concedió el administrador.
Guí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
Lista de comprobación de salida a producción
Repasa estas ocho comprobaciones antes de que tu integración funcione con datos de producción. Cada una remite a la guía que la explica.
¿Te ha resultado útil esta página?