URL base
app.famulor.io es la plataforma alojada. Si inicias sesión en un dominio de tenant de marca blanca, usa ese dominio: la API funciona bajo él con la marca del tenant y se aplican las mismas rutas.
Autenticación
Todas las solicitudes requieren un token Bearer en el encabezadoAuthorization. Se aceptan dos tipos de tokens:
- Claves de API (
fam_...) — créalas en Configuración → Claves de API. La clave completa se muestra una única vez al crearla; después solo se guarda un hash. Opcionalmente puedes restringir las claves a permisos concretos (por ejemplo,assistants:read,calls:write,campaigns:write,dashboards:read,dashboards:write,leads:write,phone_numbers:write,sip_trunks:write,knowledge:write,voices:read,billing:read) y asignarles una fecha de caducidad. Una clave sin restricciones de permisos tiene acceso completo; un permiso*:writeincluye automáticamente el*:readcorrespondiente. Es la mejor opción para integraciones servidor a servidor. Los endpoints del Panel también aceptancalls:read/write, así que los clientes OAuth que usan los cuatro permisos estándar siguen siendo compatibles. - Tokens de acceso OAuth 2.0 (
fam_at_...) — se emiten a través del flujo OAuth de la plataforma (authorization code + PKCE, registro dinámico de clientes). Tienen permisos acotados y vida corta (1 hora, con refresh tokens). Son la mejor opción para apps de terceros que actúan en nombre de un usuario.
Estructura de la respuesta
Todos los endpoints devuelven una estructura JSON coherente. Las respuestas correctas envuelven el payload endata (más un meta opcional):
Qué devuelve la API y qué no
La API REST y el endpoint MCP devuelven la misma vista deliberadamente curada de los datos de tu espacio de trabajo: todo lo que necesitas para construir, nada sobre cómo funciona la plataforma internamente. No se incluye en ninguna respuesta:- Identificadores de infraestructura: identificadores de sesión de medios, sala, troncal, enrutamiento y operador de la pila de telefonía subyacente.
- Rutas de almacenamiento internas: las grabaciones se sirven como URL firmada con caducidad (
GET /calls/{id}/recording), nunca como ruta del bucket. - Costes de plataforma e interioridades de facturación: costes de proveedores, contadores de tokens/caracteres/segundos y estado de los cargos. Tu propio consumo se informa en las unidades que se te facturan: minutos y créditos (
GET /balance,GET /transactions). - Detalles internos de modelos: qué modelo evaluó una llamada o escribió el resumen. Se devuelven el veredicto, la puntuación y el resumen, no el motor que los generó.
- Secretos: contraseñas, tokens y credenciales de operador nunca se pueden volver a leer una vez guardados; como máximo obtienes una pista enmascarada.
- Diagnóstico operativo: los eventos internos de llamada (conmutaciones de componentes, errores de sesión, registros de consumo) se filtran de los eventos de
GET /calls/{id}.
Paginación
Los endpoints de listado se paginan con los parámetros de consultalimit y offset:
El
meta.pagination.total de la respuesta indica el número total de coincidencias (sin tener en cuenta limit/offset), así que puedes seguir paginando hasta que offset + limit >= total:
Errores
Los fallos devuelven una estructura de error con uncode estable y legible por máquina, y un message legible para humanos:
Límites de solicitudes
Se aplican límites de uso razonable por cuenta. Si los superas, la API responde con429 Too Many Requests; reduce la frecuencia y vuelve a intentarlo con un retraso exponencial. Los límites publicados por plan se documentarán aquí.