API pública
Todas las rutas de abajo están bajo el prefijo /api.
Autenticación
Los endpoints públicos (recepción y recolección) aceptan el API Token de la aplicación en tres formatos equivalentes:
x-api-token: <token>
Authorization: Bearer <token>
Authorization: Basic <base64(cualquiera:token)>En el Basic, el login y la contraseña de una Credencial de Entrada de la Aplicación también
valen: el CMS prueba la contraseña como token y, si no lo es, verifica el par como Credencial.
Los endpoints administrativos usan JWT de usuario (Authorization: Bearer <jwt>), obtenido en
POST /auth/login.
Recepción de mensaje (Entrega)
POST /api/{siglaFila}/{siglaMensagem}Catch-all de dos segmentos. Por eso las rutas administrativas que podrían colisionar usan tres
segmentos (/collectors/sap/..., /definitions/sap/...).
Recepción de recolección
POST /api/collect/{siglaFila}/{siglaColeta}Endpoint público equivalente al de entrega, para que un productor externo accione una Recolección informando sus Parámetros de Entrada: la búsqueda en el origen corre al instante, y el reenvío a los destinos en el próximo ciclo de la cola. Tres segmentos, justamente para no colisionar con el catch-all anterior. Solo existe para una Recolección con al menos un Parámetro de Entrada — sin eso, 404.
La respuesta trae un id_message por mensaje generado: una Recolección SQL que trajo cinco filas
devuelve un array con cinco. Si la Recolección tiene Devolver el resultado de la recolección en la
respuesta de la API activado, la respuesta trae también collected_payload, con lo que devolvió la
búsqueda — ver Registros.
La respuesta de una Recolección viene con message_type: "SYNC": la búsqueda en el origen ya corrió
dentro de la llamada. El return_message dice lo que pasó — Data collected successfully, o Data collected; forwarding to destinations queued cuando el resultado solo sigue a los destinos. ASYNC
queda para el caso de la Aplicación de origen fuera de línea, en que la búsqueda se posterga.
Documentar la integración para quien la va a consumir
Dos exportaciones describen, en un archivo, todo lo que una Aplicación recibe y envía. Sirven para entregar al equipo del otro lado sin escribir documentación a mano.
| Endpoint | Genera |
|---|---|
GET /api/postman/application/:id | Colección Postman v2.1, con una carpeta por Interfaz y un request por Definición |
GET /api/openapi/application/:id | Documento OpenAPI 3 de las Definiciones de Entrega de la Aplicación |
Los dos exigen JWT y la Herramienta /definitions — el archivo describe las Definiciones, y es quien
las cuida el que lo entrega. La colección Postman también sale por el ícono naranja en la pantalla de
Aplicaciones.
El token nunca va en el archivo. La colección declara una variable para él, que cada persona completa en su Postman. Un archivo de colección circula por correo y por repositorio — un token embebido ahí es una fuga segura.
La URL base de ambos se resuelve a partir de la dirección por la que llegó la solicitud (respetando
X-Forwarded-Host/X-Forwarded-Proto), así que el archivo ya sale apuntando a una dirección
alcanzable desde afuera — el mismo tratamiento que recibe el WSDL.
SOAP
GET /api/ws/{siglaFila}/{siglaMensagem}?wsdl
POST /api/ws/{siglaFila}/{siglaMensagem}WSDL generado dinámicamente a partir de la Definición. Autenticación por header o WS-Security UsernameToken.
La API de Recolección tiene su equivalente SOAP, para la Recolección con Activar WebService (WSDL) activado:
GET /api/ws/collect/{siglaFila}/{siglaColeta}?wsdl
POST /api/ws/collect/{siglaFila}/{siglaColeta}La operación es ExecutarColeta, con un elemento por Parámetro de Entrada dentro de <parametros>.
El token va en el elemento apiToken del cuerpo, o en el wsse:UsernameToken con WS-Security — que
aquí acepta también el login y la contraseña de una Credencial de Entrada. Detalles en
Registros.
Autenticación de usuario y 2FA
| Endpoint | Función |
|---|---|
POST /auth/login | Login; con 2FA activo devuelve tempToken (5 min) |
POST /auth/2fa/validate | Cambia tempToken + código TOTP por el JWT definitivo |
POST /auth/2fa/generate | Genera el código QR para activar 2FA en la propia cuenta. Con el 2FA ya activo, exige el código actual en code |
POST /auth/2fa/confirmar | Confirma la activación con el primer código |
GET /auth/me/interfaces | Interfaces liberadas para el propio usuario, agrupadas por Aplicación |
PATCH /auth/me/foto | Cambia la foto del avatar (data:image/...) o la quita con foto: null |
Los dos últimos están bajo /auth, y no bajo /users, a propósito: todo usuario conectado tiene
que ver y ajustar lo que es suyo, incluso sin la Herramienta Usuarios en el perfil.
Endpoint de configuración por IA
POST /api/mcp es el servidor MCP del CMS: JSON-RPC 2.0 sobre HTTP, sin
sesión — cada petición es completa en sí misma. Se autentica con un token propio, creado en
/mcp-tokens:
Authorization: Bearer cms_mcp_...Endpoint de integraciones por IA
POST /api/mcp/applications/{sigla} es el servidor MCP de
integraciones de una Aplicación: también JSON-RPC 2.0 sobre
HTTP, lista como tools las Entregas y Recolecciones de esa Aplicación marcadas con Exponer como
tool MCP, y las ejecuta por el mismo camino de la recepción de mensajes. Se autentica con API Key,
con Credencial de Entrada (Basic) o con token MCP de usuario con la Herramienta
/mcp/integration-tools.
No confundas los tres canales:
| Mensaje | Integraciones por IA | Configuración | |
|---|---|---|---|
| Endpoint | POST /api/{interfaz}/{definicion} | POST /api/mcp/applications/{sigla} | POST /api/mcp |
| Credencial | API Key o Credencial de Entrada | API Key, Credencial de Entrada o token MCP | Token MCP |
| Sirve para | Mover dato de negocio | Que un agente de IA mueva dato de negocio | Leer, diagnosticar y crear integraciones |
Una API Key no autentica en /api/mcp, y un token MCP no envía mensajes por el endpoint de
recepción — solo por las tools que alguien marcó, y con la Herramienta propia en el Perfil. La
separación es deliberada: son niveles de riesgo distintos y se conceden por separado.
Endpoints internos
No son expuestos por el nginx — solo existen dentro de la red del compose:
| Endpoint | Servicio | Función |
|---|---|---|
POST /internal/sap-idoc/receber | cms-api | Recibe IDocs del cms-idoc-connector |
POST /rfc/call, POST /rfc/test | cms-sap-connector | Llamada RFC/BAPI |
POST /idoc/listeners/sync, GET /idoc/listeners/status | cms-idoc-connector | Reconcilia listeners |
Los endpoints internos exigen el header X-Internal-Token cuando el token correspondiente está
configurado — defensa en profundidad, además del aislamiento de red.