Saltar al contenido principal

Referencia de API

Todo lo que expone el backend cuelga del prefijo /api, fijado en backend/src/main.ts.

Esta tabla no está escrita a mano: se lee de los decoradores @Controller y @Get/@Post/… de cada controlador cada vez que se construye el sitio. Si añades un endpoint, aparece aquí solo.

Cómo describir un endpoint

La columna «Qué hace» sale del comentario JSDoc del método. Documentar un endpoint es comentarlo donde se implementa:

/** Devuelve los huecos libres de un servicio en un rango de fechas. */
@Get('slots')
async getSlots(@Query() query: SlotsQuery) { ... }

La especificación OpenAPI​

El mismo inventario se publica como openapi.json, en OpenAPI 3.1. Sirve para importar todos los endpoints en Postman o Insomnia de una vez.

No lleva esquemas de cuerpo ni de respuesta, y es una limitación honesta: el backend no usa class-validator ni decoradores de Swagger, así que no hay de dónde inferirlos sin inventárselos. Lleva las rutas, los métodos, los parámetros de ruta y los guards de cada uno.

Sobre la autenticación​

El backend no autentica globalmente las peticiones HTTP: no hay un guard global en main.ts. La protección es por endpoint, con los guards que aparecen en la columna correspondiente (SuperadminGuard, PermissionGuard, ModuleGuard, SandboxModeGuard).

Un endpoint sin guards es accesible por cualquiera que alcance el backend. En algunos casos es deliberado —los webhooks entrantes y el widget de chat web tienen que serlo, y se validan por firma o por token propio— pero conviene mirar dos veces antes de dar por hecho que algo está protegido.

Los orígenes permitidos para el navegador se controlan con CORS_ORIGINS, salvo para las rutas públicas del widget (/api/webhooks/webchat y /api/bots/message), que aceptan cualquier origen porque el widget se incrusta en webs de clientes.

Todos los endpoints​

Generado automáticamente desde backend/src/**/*.controller.ts al construir el sitio. No se edita a mano: se actualiza con yarn gen en docs/.
MétodoRutaQué haceGuardsCódigo
GET/apisin describirningunoApp
POST/api/admin/data-syncsin describir
SuperadminGuard
DataSync
GET/api/admin/data-sync/statussin describir
SuperadminGuard
DataSync
GET/api/admin/data-sync/tenantssin describir
SuperadminGuard
DataSync
GET/api/admin/platform-settingssin describir
SuperadminGuard
PlatformSettings
PUT/api/admin/platform-settings/:keysin describir
SuperadminGuard
PlatformSettings
GET/api/admin/sandbox-channelssin describir
SandboxModeGuard
SuperadminGuard
SandboxChannels
PUT/api/admin/sandbox-channels/:channelCodesin describir
SandboxModeGuard
SuperadminGuard
SandboxChannels
GET/api/admin/sandbox-channels/leasessin describir
SandboxModeGuard
SuperadminGuard
SandboxChannels
DELETE/api/admin/sandbox-channels/leases/:channelCodesin describir
SandboxModeGuard
SuperadminGuard
SandboxChannels
POST/api/admin/sandbox-channels/leases/:channelCodesin describir
SandboxModeGuard
SuperadminGuard
SandboxChannels
GET/api/admin/sandbox-channels/whatsapp/webhookA dónde entrega Meta el número de WhatsApp del sandbox: Test (override) o producción.
SandboxModeGuard
SuperadminGuard
SandboxChannels
PUT/api/admin/sandbox-channels/whatsapp/webhookMueve la entrega del número: `produccion` quita el override para usarlo en producción; `test` lo vuelve a poner. La URL de Test sale del entorno, nunca del cuerpo: el cliente solo elige el destino.
SandboxModeGuard
SuperadminGuard
SandboxChannels
POST/api/billing/rollupDispara el rollup diario de consumo hacia Odoo. Lo llama un ir.cron de Odoo (diario) con el secreto compartido. Idempotente/acumulativo.ningunoBilling
POST/api/billing/syncBackfill completo bajo demanda (uso operativo). Protegido por el mismo secreto del webhook, enviado como `Authorization: Bearer <secret>`.ningunoBilling
POST/api/billing/tenant-subscriptionAlta/cambio de la suscripción de un tenant (lo invoca la server-action del superadmin, que además valida is_superadmin del lado de Supabase). Escribe en Odoo y refresca el espejo. Protegido por el secreto compartido.ningunoBilling
POST/api/billing/webhook/odooRecibe el aviso de Odoo de que un plan/suscripción cambió. El body solo dice qué cambió; el dato real se re-consulta a Odoo (ver BillingSyncService).ningunoBilling
POST/api/bot-safety/:botId/decisionsin describir
PermissionGuard
BotSafety
POST/api/bot-safety/:botId/reviewRevisión a demanda desde el panel del tenant (tras editar el bot).
PermissionGuard
BotSafety
GET/api/bot-safety/queuesin describir
PermissionGuard
BotSafety
POST/api/bot-safety/tenants/:tenantId/verifyQuita los límites de cuenta nueva a un tenant (ver TenantTrustService).
PermissionGuard
BotSafety
GET/api/bots/:botId/flow-versionssin describir
PermissionGuard
FlowVersions
POST/api/bots/:botId/flow-versionssin describir
PermissionGuard
FlowVersions
DELETE/api/bots/:botId/flow-versions/:versionIdsin describir
PermissionGuard
FlowVersions
GET/api/bots/:botId/flow-versions/:versionIdsin describir
PermissionGuard
FlowVersions
POST/api/bots/:botId/flow-versions/:versionId/activatesin describir
PermissionGuard
FlowVersions
GET/api/bots/agent-toolsStatic manifest of all tools the flow editor can offer in the "Herramientas del agente" picker on LLM nodes. Per-bot runtime availability (module enabled, tools_config, indexed records…) is enforced server-side at agent invocation time, so this list is intentionally global. Every service a factory might need must be passed here. A factory whose dependency is missing returns null and its tool silently disappears from the picker — which is how the scheduling and catalog tools were invisible even though they worked at runtime.
PermissionGuard
Bots
POST/api/bots/approvals/:id/continuesin describir
PermissionGuard
Approvals
GET/api/bots/conversations/:conversationId/stateDónde está la conversación y por qué pasos pasó. Solo estructura, sin PHI.
PermissionGuard
ConversationState
GET/api/bots/conversations/:conversationId/state/historyPuntos de guardado de la conversación (uno por mensaje). Solo estructura.
PermissionGuard
ConversationState
POST/api/bots/conversations/:conversationId/state/replayReproduce EN SECO un mensaje desde un punto de guardado: devuelve el recorrido que haría hoy el flujo, sin enviar nada ni tocar la conversación. Es una herramienta de depuración, por eso pide bot.update.
PermissionGuard
ConversationState
POST/api/bots/conversations/:conversationId/state/resetOlvida la memoria del bot en esta conversación (el próximo mensaje empieza de cero).
PermissionGuard
ConversationState
POST/api/bots/dashboards/generatesin describirningunoDashboards
POST/api/bots/dashboards/sessionssin describirningunoDashboards
GET/api/bots/dashboards/sessions/:sessionIdsin describirningunoDashboards
POST/api/bots/dashboards/sessions/:sessionId/filessin describirningunoDashboards
POST/api/bots/dashboards/sessions/:sessionId/messagesin describirningunoDashboards
POST/api/bots/messagesin describir
PermissionGuard
Bots
POST/api/bots/reloadsin describir
PermissionGuard
Bots
GET/api/bots/tenantsQué tenants tiene cargados el registro: dato de operación, solo superadmin.
PermissionGuard
Bots
GET/api/bots/tenants/:tenantIdsin describir
PermissionGuard
Bots
POST/api/channels/email/credentialssin describir
PermissionGuard
EmailCredentials
GET/api/channels/email/credentials/statussin describir
PermissionGuard
EmailCredentials
POST/api/channels/email/test-connectionsin describir
PermissionGuard
EmailCredentials
GET/api/copilot/accesssin describir
CopilotGuard
Copilot
POST/api/copilot/messagesin describir
CopilotGuard
Copilot
GET/api/copilot/pingUtilidad para el guard: tenant_id también puede ir por query en GET.
CopilotGuard
Copilot
GET/api/copilot/threadssin describir
CopilotGuard
Copilot
GET/api/copilot/threads/:idsin describir
CopilotGuard
Copilot
POST/api/crm/products/:id/embedding/enqueueEncola la regeneración del embedding (BullMQ, async, recomendado).ningunoEmbeddings
POST/api/crm/products/:id/embedding/regenerate-nowRegenera el embedding ahora mismo (síncrono). Útil para QA, para fix puntuales, o cuando Redis/BullMQ no está disponible. Bloquea el request unos cientos de ms (call a OpenAI).ningunoEmbeddings
POST/api/crm/products/embeddings/enqueue-pendingEncola en masa los productos pendientes del tenant/workspace.ningunoEmbeddings
POST/api/crm/products/search-semanticBúsqueda semántica multi-industria.ningunoEmbeddings
GET/api/data-sourcessin describirningunoDataSources
DELETE/api/data-sources/:idsin describirningunoDataSources
GET/api/data-sources/:idsin describirningunoDataSources
PATCH/api/data-sources/:idsin describirningunoDataSources
DELETE/api/data-sources/:id/node-attachsin describirningunoDataSources
POST/api/data-sources/:id/node-attachsin describirningunoDataSources
POST/api/data-sources/:id/reindexsin describirningunoDataSources
GET/api/data-sources/:id/signed-urlsin describirningunoDataSources
POST/api/data-sources/apisin describirningunoDataSources
POST/api/data-sources/documentsin describirningunoDataSources
POST/api/data-sources/rowssin describirningunoDataSources
POST/api/errors/reportsin describirningunoErrorReporting
GET/api/flow-assistant/accesssin describir
FlowAssistantGuard
FlowAssistant
POST/api/flow-assistant/messagesin describir
FlowAssistantGuard
FlowAssistant
POST/api/inbox/deliver-mediasin describirningunoInbox
POST/api/instagram/send-textsin describirningunoInstagram
GET/api/invoicing/invoicessin describir
ModuleGuard
PermissionGuard
Invoicing
POST/api/invoicing/invoicessin describir
ModuleGuard
PermissionGuard
Invoicing
GET/api/invoicing/invoices/:engineIdsin describir
ModuleGuard
PermissionGuard
Invoicing
GET/api/invoicing/invoices/:engineId/ridesin describir
ModuleGuard
PermissionGuard
Invoicing
POST/api/invoicing/invoices/syncConsulta al motor las facturas pendientes de este tenant. La pantalla lo pide al abrirse, para no mostrar "Pendiente" lo que el SRI ya autorizó.
ModuleGuard
PermissionGuard
Invoicing
GET/api/invoicing/issuersLectura con el permiso de consulta: quien emite necesita elegir emisor, y el listado no lleva nada secreto —el certificado vive solo en el motor—.
ModuleGuard
PermissionGuard
Invoicing
POST/api/invoicing/issuerssin describir
ModuleGuard
PermissionGuard
Invoicing
DELETE/api/invoicing/issuers/:issuerIdDesactiva el emisor. En el motor no se borra nada: las facturas se conservan.
ModuleGuard
PermissionGuard
Invoicing
PATCH/api/invoicing/issuers/:issuerIdEditar un emisor o cambiarle el certificado. Ver `InvoicingService.updateIssuer`.
ModuleGuard
PermissionGuard
Invoicing
GET/api/invoicing/statusSi el plan incluye la facturación. La pantalla lo pregunta antes de pintar nada.
ModuleGuard
PermissionGuard
Invoicing
POST/api/invoicing/webhook/enginesin describirningunoInvoicingWebhook
GET/api/kiosk/admin/configsin describir
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/configsin describir
ModuleGuard
PermissionGuard
KioskAdmin
GET/api/kiosk/admin/devicessin describir
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/devices/:id/pairVincula ese código a un dispositivo EXISTENTE: se cambió el PC de recepción o se reinstaló Windows. En cuanto la máquina nueva recoge su credencial, la de la vieja deja de valer.
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/devices/:id/revokesin describir
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/devices/claimVincula la pantalla que muestra ese código creando un dispositivo nuevo. El alta y la vinculación van juntas a propósito: un dispositivo que existe en el panel pero no en ninguna máquina es un estado que solo sirve para confundir. Si el código no vale, no se crea nada.
ModuleGuard
PermissionGuard
KioskAdmin
GET/api/kiosk/admin/ticketssin describir
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/tickets/callLlamar al siguiente. Es lo que hace que la pantalla de la sala cambie.
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/tickets/closesin describir
ModuleGuard
PermissionGuard
KioskAdmin
POST/api/kiosk/admin/tickets/startEl paciente entró a consulta. Avanza las DOS cosas: la cita a `in_progress` y el turno a cerrado/atendido. El cambio de estado de la cita va por `SchedulingService.updateStatus` y no por un UPDATE propio — los efectos secundarios de una cita (recordatorios, eventos de dominio, validación de la transición) tienen un solo dueño.
ModuleGuard
PermissionGuard
KioskAdmin
GET/api/kiosk/boardLa pizarra de la sala de espera. Solo para dispositivos de tipo `display`: el token de una TV colgada de una pared no puede poder preguntar por cédulas.
KioskGuard
ModuleGuard
KioskDevice
POST/api/kiosk/checkinRegistra la llegada y emite el turno. El vale viene de un `lookup` previo.
KioskGuard
ModuleGuard
KioskDevice
POST/api/kiosk/lookupBusca por documento. Devuelve lo MISMO para un documento desconocido y para uno conocido sin cita hoy: distinguirlos convertiría el kiosko en un oráculo de padrón. Ver el comentario de `KioskService.lookup`.
KioskGuard
ModuleGuard
KioskDevice
POST/api/kiosk/pair/poll¿Ya me reclamaron? La credencial se entrega UNA vez, en la respuesta que encuentra la vinculación hecha. El vale va en el cuerpo y no en la URL: en la URL acabaría en los logs de acceso de cualquier proxy por el que pase.ningunoKioskDevice
POST/api/kiosk/pair/startUna máquina sin vincular pide un código para mostrarlo. Sin guard: todavía no tiene credencial, y conseguir una es justo lo que viene a hacer. No revela nada ni crea nada que pertenezca a un tenant; lo único que se lleva es un código y un vale que no sirven hasta que alguien con permiso reclama la pantalla desde el panel.ningunoKioskDevice
POST/api/kiosk/printedTelemetría de impresión. Registra el INTENTO, no que saliera papel.
KioskGuard
ModuleGuard
KioskDevice
GET/api/kiosk/sessionCon qué trabajar: quién es esta máquina, qué documentos pide su país y —lo importante— QUÉ HORA ES. El kiosko no usa su propio reloj en ninguna decisión. Un PC de vestíbulo sin NTP se desfasa, y un reloj adelantado dejaría a todo el mundo fuera de la ventana de check-in sin que nadie entendiera por qué.
KioskGuard
ModuleGuard
KioskDevice
POST/api/kiosk/walk-inTurno para quien llega sin cita. NO crea una cita.
KioskGuard
ModuleGuard
KioskDevice
POST/api/messenger/send-textsin describirningunoMessenger
GET/api/modules/:tenantIdCatálogo completo con el estado del tenant y sus dependencias resueltas.
PermissionGuard
Modules
GET/api/modules/:tenantId/enabledSolo los códigos activos. Barato de llamar en cada arranque de sesión.
PermissionGuard
Modules
POST/api/modules/toggleActiva o desactiva un módulo. Desactivar NUNCA borra datos: marca enabled=false y sella disabled_at, de modo que reactivar devuelve todo intacto.
PermissionGuard
Modules
POST/api/onboarding/assistantsin describir
PermissionGuard
Onboarding
POST/api/onboarding/businesssin describir
PermissionGuard
Onboarding
POST/api/onboarding/channelsin describir
PermissionGuard
Onboarding
POST/api/onboarding/completesin describir
PermissionGuard
Onboarding
GET/api/onboarding/packssin describir
PermissionGuard
Onboarding
GET/api/onboarding/packs/publicListado de packs sin exigir membership — para el alta de tenant (superadmin).
PermissionGuard
Onboarding
POST/api/onboarding/preseedPre-siembra desde superadmin al crear el tenant.
PermissionGuard
Onboarding
POST/api/onboarding/preview-chatsin describir
PermissionGuard
Onboarding
POST/api/onboarding/prompt-draftsin describir
PermissionGuard
Onboarding
POST/api/onboarding/skipsin describir
PermissionGuard
Onboarding
GET/api/onboarding/statesin describir
PermissionGuard
Onboarding
GET/api/onboarding/user-statesin describir
PermissionGuard
Onboarding
POST/api/onboarding/user-statesin describir
PermissionGuard
Onboarding
GET/api/payments/historysin describir
PaymentsEnabledGuard
Payments
GET/api/payments/linkssin describir
PaymentsEnabledGuard
Payments
POST/api/payments/linkssin describir
PaymentsEnabledGuard
Payments
POST/api/payments/links/:id/disablesin describir
PaymentsEnabledGuard
Payments
POST/api/payments/sessionsCrea sesión Checkout vía Odoo (create_pay_session). Protegido por el mismo secreto Odoo (Bearer) — lo invocan server actions.
PaymentsEnabledGuard
Payments
GET/api/payments/sessions/:referencesin describir
PaymentsEnabledGuard
Payments
GET/api/sandbox-channelssin describir
SandboxModeGuard
AuthenticatedGuard
SandboxChannelsTenant
DELETE/api/sandbox-channels/leases/:channelCodesin describir
SandboxModeGuard
AuthenticatedGuard
SandboxChannelsTenant
POST/api/sandbox-channels/leases/:channelCodesin describir
SandboxModeGuard
AuthenticatedGuard
SandboxChannelsTenant
GET/api/scheduling/appointmentsCitas de un rango con los nombres resueltos. Alimenta el calendario.
ModuleGuard
Scheduling
POST/api/scheduling/appointmentssin describir
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/cancelsin describir
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/contactAsignar o quitar el paciente de una cita existente.
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/offer-rescheduleCancela cada cita listada y le ofrece al paciente reagendar por WhatsApp. Se llama desde la alerta de conflicto al guardar un bloqueo de agenda. El body solo trae `resource_id` (no un `appointment_id` suelto): con eso `AppointmentWriteGuard` toma la vía "alta" y comprueba que quien llama sea dueño de ESE recurso, que es exactamente lo que hace falta —todas las citas de la lista son, por construcción, de ese mismo recurso—. Las citas se recargan de la base por id: no se confía en los datos que mande el cliente.
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/reschedulesin describir
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/send-reminderEnvía ya el recordatorio de una cita, a mano. Sale por el mismo canal por el que se reservó (la conversación de origen decide la ruta). Lleva `AppointmentWriteGuard`: avisar a un paciente es actuar sobre su cita, y el guard saca el tenant de la fila real y exige `manage` (con alcance propio si no hay `view_all`).
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/statusConfirmar, completar, marcar ausencia o reabrir.
ModuleGuard
AppointmentWriteGuard
Scheduling
POST/api/scheduling/appointments/substatusPoner o quitar el sub-estado de una cita (etiqueta informativa). Mismo guard que el estado: quien no puede tocar esa agenda, tampoco etiqueta.
ModuleGuard
AppointmentWriteGuard
Scheduling
GET/api/scheduling/config/:entityLista entidades de configuración del tenant. Query opcionales: `resource_id`, `location_id` (eq). Para `availabilityExceptions` también `from`/`to` (solape) y `resource_ids` (lista separada por comas) — una sola petición para el calendario.
ModuleGuard
PermissionGuard
SchedulingConfig
POST/api/scheduling/config/:entitysin describir
ModuleGuard
PermissionGuard
SchedulingWriteGuard
SchedulingConfig
DELETE/api/scheduling/config/:entity/:idsin describir
ModuleGuard
PermissionGuard
SchedulingWriteGuard
SchedulingConfig
PATCH/api/scheduling/config/:entity/:idsin describir
ModuleGuard
PermissionGuard
SchedulingWriteGuard
SchedulingConfig
GET/api/scheduling/config/availability-exceptions/conflictsCitas que chocarían con un bloqueo de agenda antes de guardarlo. Ruta de dos segmentos (`availability-exceptions/conflicts`), así que no colisiona con el comodín `:entity` de una sola palabra — pero se declara aquí arriba igualmente, junto al resto de rutas específicas, por consistencia con ellas.
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/block-reschedule-offersin describir
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/block-reschedule-offersin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/calendar-viewsin describir
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/calendar-viewsin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/linkable-usersUsuarios vinculables a un recurso. Va antes de :entity para no colisionar.
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/reminderssin describir
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/remindersCambiar cuándo se avisa a los pacientes es configuración de la sede, no mantenimiento de la ficha de un profesional: exige el permiso completo, no la vía "propio" de SchedulingWriteGuard.
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/reminders/cold-outreachsin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/reminders/outreachsin describir
ModuleGuard
PermissionGuard
SchedulingConfig
POST/api/scheduling/config/reminders/whatsapp-templatesin describir
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/reminders/whatsapp-templatesin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/reminders/whatsapp-template/candidatessin describir
ModuleGuard
PermissionGuard
SchedulingConfig
POST/api/scheduling/config/reminders/whatsapp-template/refreshsin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/resources/:id/servicessin describir
ModuleGuard
PermissionGuard
SchedulingConfig
POST/api/scheduling/config/resources/:id/servicessin describir
ModuleGuard
PermissionGuard
SchedulingWriteGuard
SchedulingConfig
GET/api/scheduling/config/services/:id/locationssin describir
ModuleGuard
PermissionGuard
SchedulingConfig
POST/api/scheduling/config/services/:id/locationssin describir
ModuleGuard
PermissionGuard
SchedulingWriteGuard
SchedulingConfig
GET/api/scheduling/config/status-colorsColor de cada estado de cita. Lo lee cualquiera del tenant: se pinta en todas las vistas.
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/status-colorssin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/substatusesSub-estados de cita (etiquetas con color encima del estado). Los lee cualquiera del tenant: se pintan en calendario, citas y hoy.
ModuleGuard
PermissionGuard
SchedulingConfig
PUT/api/scheduling/config/substatusessin describir
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/config/substatuses/usageUso por sub-estado y estado: solo para quien configura (avisa antes de romper).
ModuleGuard
PermissionGuard
SchedulingConfig
GET/api/scheduling/contacts/:contactId/appointmentssin describir
ModuleGuard
Scheduling
GET/api/scheduling/slotsHuecos disponibles. `location_id` es opcional a propósito: sin él busca en todas las sedes y cada hueco viene etiquetado con la suya.
ModuleGuard
Scheduling
GET/api/subflowssin describir
PermissionGuard
Subflows
POST/api/subflowssin describir
PermissionGuard
Subflows
DELETE/api/subflows/:idsin describir
PermissionGuard
Subflows
GET/api/subflows/:idsin describir
PermissionGuard
Subflows
PATCH/api/subflows/:idsin describir
PermissionGuard
Subflows
GET/api/subflows/:id/usagessin describir
PermissionGuard
Subflows
GET/api/subflows/:id/versionssin describir
PermissionGuard
Subflows
POST/api/subflows/:id/versionssin describir
PermissionGuard
Subflows
GET/api/subflows/:id/versions/:versionIdsin describir
PermissionGuard
Subflows
GET/api/webhook/whatsappsin describirningunoWhatsAppWebhook
POST/api/webhook/whatsappsin describirningunoWhatsAppWebhook
POST/api/webhooks/emailsin describirningunoEmail
GET/api/webhooks/metasin describir
PermissionGuard
Meta
POST/api/webhooks/metasin describir
PermissionGuard
Meta
POST/api/webhooks/meta/embedded-signup-tokenExchange Embedded Signup authorization code for access token. Body: { code: string, redirect_uri?: string } (redirect_uri can be "" when using JS SDK).
PermissionGuard
Meta
GET/api/webhooks/meta/fb-pagesFetch Facebook Pages the user manages. Used in Messenger and Instagram wizard Step 2. Query: access_token
PermissionGuard
Meta
GET/api/webhooks/meta/ig-accountFetch the Instagram Business Account linked to a Facebook Page. Used in Instagram wizard Step 2. Query: page_id, access_token
PermissionGuard
Meta
POST/api/webhooks/meta/phone-numbersFetch phone numbers for a WABA after Embedded Signup. Body: { access_token: string (required), waba_id?: string (optional — if omitted, resolves first assigned WABA) } Token is sent in the request body to avoid exposure in server logs / browser history.
PermissionGuard
Meta
POST/api/webhooks/telegram/:channelAccountIdTelegram sends POST updates to this URLningunoTelegram
POST/api/webhooks/telegram/set-webhookRegister webhook for a bot tokenningunoTelegram
GET/api/webhooks/telegram/validate-tokenValidate bot token and return bot infoningunoTelegram
POST/api/webhooks/webchatsin describirningunoWebchat
GET/api/webhooks/webchat/config/:channelAccountIdPublic bootstrap config for the embeddable widget — called from any website.ningunoWebchat
POST/api/webhooks/xsin describirningunoX
POST/api/whatsapp/onboarding/completesin describir
PermissionGuard
WhatsAppOnboarding
POST/api/whatsapp/onboarding/select-numberCuando la WABA tenía varios números y el usuario eligió uno.
PermissionGuard
WhatsAppOnboarding
POST/api/whatsapp/onboarding/syncReintenta la sincronización de contactos/historial (solo dentro de 24 h).
PermissionGuard
WhatsAppOnboarding
POST/api/whatsapp/send-textsin describir
PermissionGuard
WhatsApp
GET/api/whatsapp/templatesApproved message templates (including FLOW) from the WABA linked to this tenant/bot.
PermissionGuard
WhatsApp
GET/api/whatsapp/xenpia-numbersReturns the phone numbers registered in a Xenpia-owned WABA. Uses WHATSAPP_ACCESS_TOKEN. Optional `waba_id` selects which owned WABA to list; defaults to WHATSAPP_WABA_ID.
PermissionGuard
WhatsApp
POST/api/whatsapp/xenpia-numbersAdd a phone number to a specific WABA (client's own WABA under Xenpia's BM). Body: { waba_id, phone_number, country_code, verified_name } Next step: call /xenpia-numbers/request-otp to send verification code.
PermissionGuard
WhatsApp
POST/api/whatsapp/xenpia-numbers/registerRegister a Xenpia-owned number on the Cloud API so it can send/receive. This is the activation step that follows OTP verification: verifying the OTP only proves ownership, while `/register` enables the number on the Cloud API and sets its two-step-verification PIN. Body: { phone_number_id, pin } — pin is a 6-digit code chosen for the number. An "already registered" response is treated as success so retries are safe.
PermissionGuard
WhatsApp
POST/api/whatsapp/xenpia-numbers/request-otpSend OTP (SMS or voice) to a phone number registered in Xenpia's WABA. Body: { phone_number_id, method: 'SMS' | 'VOICE', language? }
PermissionGuard
WhatsApp
GET/api/whatsapp/xenpia-numbers/statusInspect a Xenpia-owned number and report the single next step needed before it can send/receive on the Cloud API: 'verify' (OTP), 'register', or 'done'. Used by the "número existente" flow for numbers created in the Meta panel. Query: ?phone_number_id=...
PermissionGuard
WhatsApp
POST/api/whatsapp/xenpia-numbers/verify-otpVerify OTP for a phone number in Xenpia's WABA. Body: { phone_number_id, code } On success the number is active and ready to use.
PermissionGuard
WhatsApp
POST/api/whatsapp/xenpia-wabaCreate a new WABA under Xenpia's Business Manager for a specific client/tenant. Then subscribes Xenpia's app to the new WABA. Body: { waba_name, currency?, timezone_id? } Returns: { ok, waba_id }
PermissionGuard
WhatsApp
GET/api/whatsapp/xenpia-waba/:tenantIdCheck if a tenant already has a WABA under Xenpia's BM. Returns { ok, waba_id, waba_name } — waba_id is null if none found.
PermissionGuard
WhatsApp
GET/api/whatsapp/xenpia-wabasLists WhatsApp Business Accounts owned by Xenpia's Business Manager. Used in the "Xenpia-owned number" wizard: pick a WABA, then list its phones.
PermissionGuard
WhatsApp

200 endpoints.