Download OpenAPI specification:
Pasarela multi-tenant para WhatsApp Business (Meta Cloud API).
API única que usan todas las aplicaciones para enviar y recibir mensajes de WhatsApp, gestionar plantillas, atender conversaciones y consultar costes, sin hablar nunca con Meta.
| Esquema | Quién lo usa | Cómo se obtiene |
|---|---|---|
ApiKey |
El backend de una app, de servidor a servidor | Clave wak_live_<prefijo>_<secreto> creada con la API de administración o en /v1/api-keys |
EmbedSession |
La UI embebida en el navegador | POST /v1/embed/tokens (backend) y después POST /v1/embed/session (iframe) |
AdminToken |
Vuestro equipo, API /admin/v1 |
SSO corporativo; en desarrollo, un token estático |
Con una clave de API fijada a un tenant, el tenant se deduce de la clave. Con una clave multi-tenant hay
que enviar X-Tenant-Id o X-Tenant-Ref. Un recurso de otro tenant responde siempre 404.
En cada llamada el gateway comprueba, por este orden: clave válida y no revocada, tenant activo,
app habilitada para el tenant, licencia vigente, función incluida en la licencia y alcance de la clave
(x-required-scope de cada operación). El primer fallo corta la petición.
ten_, msg_, cnv_...) seguido de 32 caracteres hexadecimales.+; se normalizan a dígitos con prefijo de país.?limit=50&cursor=... y respuesta { "data": [...], "next_cursor": "..." | null }.Idempotency-Key en cualquier POST; se conserva 24 horas.X-RateLimit-*; al superarlo, 429 y Retry-After.X-Request-Id./v1 solo hay cambios compatibles; las retiradas se anuncian con
Deprecation y Sunset al menos 6 meses antes.POST /v1/messages responde 202 con el mensaje en estado queued. El estado final llega por los
eventos whatsapp.message.status (ver la sección webhooks) o consultando GET /v1/messages/{id}.
Valida, encola y responde 202. Validaciones, en orden: formato del número, licencia y límite mensual,
número de origen conectado y WABA sin bloqueo de pago, plantilla aprobada y variables correctas,
ventana de 24 h abierta para tipos que no son plantilla, y consentimiento del contacto.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| to required | string (PhoneInput) ^\+?[0-9 ()-]{7,20}$ Teléfono con o sin |
| phone_number_id | string (NumberId) ^num_[0-9a-f]{32}$ |
object Crea o actualiza el contacto en la misma llamada. | |
| external_ref | string <= 200 characters Referencia de negocio de vuestra app (nº de factura, cita...). |
| priority | string (MessagePriority) Enum: "normal" "bulk"
|
| type required | string Value: "text" |
required | object (TextContent) |
{- "to": "+34 600 111 222",
- "type": "template",
- "template": {
- "name": "recordatorio_cita",
- "language": "es",
- "variables": [
- "Ana",
- "15 de octubre a las 10:30"
]
}, - "contact": {
- "external_ref": "cli-9917",
- "display_name": "Ana Pérez"
}, - "external_ref": "cita-48213"
}{- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| external_ref | string <= 200 characters |
| status | string (MessageStatus) Enum: "queued" "sending" "sent" "delivered" "read" "failed" "received" |
| direction | string (MessageDirection) Enum: "inbound" "outbound" |
| conversation_id | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| from | string <date-time> |
| to | string <date-time> |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Estado, error y precio (billable, pricing_category) de un mensaje.
| message_id required | string (MessageId) ^msg_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}Borra el contenido de un mensaje recibido (texto, respuesta de botón o de formulario) para que un dato sensible, como un DNI,
no se quede guardado. Sustituye el cuerpo por [dato redactado], vacía el payload y borra también las copias guardadas
del evento y del aviso original de Meta. No recupera lo que ya se entregó a un receptor de eventos, ni lo que Meta o el móvil
del cliente conserven. Repetirlo no cambia nada.
| message_id required | string (MessageId) ^msg_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}Marca como leído un mensaje recibido y muestra al cliente el indicador de escritura, que dura hasta 25 segundos o hasta que se envía la respuesta. Úsalo cuando la respuesta vaya a tardar más de un segundo. Repetirlo lo renueva.
| message_id required | string (MessageId) ^msg_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}Solo si el mensaje está en failed y el error es recuperable (error.retryable = true) o es
outcome_unknown. Un reintento de outcome_unknown puede duplicar el mensaje en el móvil.
| message_id required | string (MessageId) ^msg_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
{- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| status | string (ConversationStatus) Enum: "open" "pending" "closed" |
| assigned_agent_id | string Use |
| unread | boolean |
| q | string <= 100 characters Busca por nombre o teléfono. |
| external_ref | string |
| updated_since | string <date-time> |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}Asignar es atómico: si la conversación ya está asignada a otro agente responde 409 already_assigned.
Un supervisor o admin puede reasignar.
| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| status | string (ConversationStatus) Enum: "open" "pending" "closed" |
AgentId (string) or null | |
| tags | Array of strings <= 20 items [ items <= 50 characters ] |
{- "assigned_agent_id": "agt_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "status": "open"
}{- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Mismo cuerpo que POST /v1/messages, sin to ni phone_number_id (salen de la conversación).
| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| external_ref | string <= 200 characters |
| priority | string (MessagePriority) Enum: "normal" "bulk"
|
| type required | string Value: "text" |
required | object (TextContent) |
{- "external_ref": "string",
- "priority": "normal",
- "type": "text",
- "text": {
- "body": "string",
- "preview_url": false
}
}{- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}Pone unread_count a 0 y marca como leído en Meta el último mensaje entrante.
| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "conversation_id": "string",
- "agent_id": "string",
- "body": "string",
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}| conversation_id required | string (ConversationId) ^cnv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| body required | string [ 1 .. 4000 ] characters |
{- "body": "string"
}{- "id": "string",
- "conversation_id": "string",
- "agent_id": "string",
- "body": "string",
- "created_at": "2026-10-12T09:41:07Z"
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| external_ref | string |
| q | string <= 100 characters Busca por nombre o teléfono. |
| opt_in_status | string (OptInStatus) Enum: "unknown" "opted_in" "opted_out" |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Si ya existe un contacto con ese wa_id, lo devuelve con 200 en lugar de crearlo.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| phone required | string (PhoneInput) ^\+?[0-9 ()-]{7,20}$ Teléfono con o sin |
| display_name | string <= 200 characters |
| external_ref | string <= 200 characters |
| locale | string <= 10 characters |
object |
{- "phone": "+34 600 111 222",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "attributes": { }
}{- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}| contact_id required | string (ContactId) ^ctc_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}| contact_id required | string (ContactId) ^ctc_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| display_name | string <= 200 characters |
| external_ref | string <= 200 characters |
| locale | string <= 10 characters |
object | |
| blocked | boolean |
{- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "attributes": { },
- "blocked": true
}{- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Elimina el contacto, sus conversaciones, mensajes y medios, y anonimiza su rastro en audit_log. No se puede deshacer.
| contact_id required | string (ContactId) ^ctc_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| contact_id required | string (ContactId) ^ctc_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| source required | string <= 100 characters Origen del consentimiento ( |
| at | string <date-time> (Timestamp) |
{- "source": "formulario_web",
- "at": "2026-10-12T09:30:00Z"
}{- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}| contact_id required | string (ContactId) ^ctc_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| reason | string <= 200 characters |
{- "reason": "string"
}{- "id": "string",
- "wa_id": "string",
- "phone_e164": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "locale": "string",
- "opt_in_status": "unknown",
- "opt_in_source": "string",
- "opt_in_at": "2026-10-12T09:41:07Z",
- "opt_out_at": "2026-10-12T09:41:07Z",
- "attributes": { },
- "blocked": true,
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| status | string (TemplateStatus) Enum: "draft" "pending" "approved" "rejected" "paused" "disabled" "in_appeal" "deleted" |
| category | string (TemplateCategory) Enum: "marketing" "utility" "authentication" |
| language | string |
| name | string |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Se guarda como draft. Con submit: true se envía a revisión de Meta y queda en pending. El gateway
convierte este formato al de componentes de Meta. Comprueba license.limits.max_templates y los topes de Meta
(250 plantillas por WABA sin negocio verificado, 6.000 con él, 100 creaciones por hora).
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| number_id | string (NumberId) ^num_[0-9a-f]{32}$ |
| name required | string^[a-z0-9_]{1,512}$ |
| language required | string |
| category required | string (TemplateCategory) Enum: "marketing" "utility" "authentication" |
| parameter_format | string Default: "positional" Enum: "positional" "named" |
object (TemplateHeader) | |
required | object (TemplateBodyInput) |
| footer | string <= 60 characters |
Array of objects (TemplateButton) <= 10 items | |
| submit | boolean Default: false Enviar a revisión de Meta nada más crearla. |
{- "name": "recordatorio_cita",
- "language": "es",
- "category": "utility",
- "header": {
- "type": "text",
- "text": "Recordatorio de cita"
}, - "body": {
- "text": "Hola {{1}}, te esperamos el {{2}}.",
- "examples": [
- "Ana",
- "15 de octubre a las 10:30"
]
}, - "footer": "Responde a este mensaje si necesitas cambiarla",
- "buttons": [
- {
- "type": "quick_reply",
- "text": "Confirmar"
}, - {
- "type": "quick_reply",
- "text": "Cambiar"
}
], - "submit": true
}{- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Importa las creadas en WhatsApp Manager, corrige estados y marca como borradas las que ya no existen.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "job_id": "string",
- "status": "queued"
}| template_id required | string (TemplateId) ^tpl_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Crea una revisión nueva (revision + 1) y, si estaba enviada, la devuelve a pending. Meta limita las ediciones por periodo.
| template_id required | string (TemplateId) ^tpl_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| category | string (TemplateCategory) Enum: "marketing" "utility" "authentication" |
object (TemplateHeader) | |
object (TemplateBodyInput) | |
| footer | string <= 60 characters |
Array of objects (TemplateButton) <= 10 items | |
| submit | boolean Default: false |
{- "category": "marketing",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "submit": false
}{- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Borra en Meta solo la plantilla de ese idioma (se envía hsm_id) y la marca deleted.
| template_id required | string (TemplateId) ^tpl_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| template_id required | string (TemplateId) ^tpl_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Devuelve el texto ya renderizado sin enviar nada.
| template_id required | string (TemplateId) ^tpl_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
required | Array of strings or object (TemplateVariables) |
{- "variables": [
- "string"
]
}{- "header": "string",
- "body": "string",
- "footer": "string",
- "buttons": [
]
}Biblioteca global mantenida por vosotros. No depende del tenant.
| language | string |
| category | string (TemplateCategory) Enum: "marketing" "utility" "authentication" |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "code": "string",
- "name": "string",
- "description": "string",
- "category": "marketing",
- "language": "string",
- "body": {
- "text": "string",
- "examples": [
- "string"
]
}
}
]
}Crea la plantilla en la WABA del tenant con el contenido de la biblioteca y la envía a revisión.
| code required | string^[a-z0-9_]{1,100}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
{- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}WABA, verificación del negocio, modo de facturación y estado de pago.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}
]
}| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| is_default required | boolean Value: true |
{- "is_default": true
}{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Deja de enviar y recibir por ese número. No lo elimina de la cuenta de Meta del cliente.
| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Devuelve state, config_id y app_id para abrir el Embedded Signup en una ventana propia del gateway.
state es de un solo uso y caduca a los 30 minutos.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| billing_mode | string (BillingMode) Enum: "meta_direct" "platform_credit_line" |
| onboarding_type | string Default: "dedicated" Enum: "dedicated" "business_app"
|
| return_url | string <uri> |
{- "billing_mode": "meta_direct",
- "onboarding_type": "dedicated",
}{- "session_id": "string",
- "state": "string",
- "config_id": "string",
- "app_id": "string",
- "graph_version": "v25.0",
- "onboarding_type": "dedicated",
- "extras": { },
- "expires_at": "2026-10-12T09:41:07Z"
}| session_id required | string (SignupSessionId) ^sus_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "session_id": "string",
- "step": "created",
- "billing_mode": "meta_direct",
- "onboarding_type": "dedicated",
- "number_id": "string",
- "payment_status": "awaiting_payment",
- "error": { },
- "expires_at": "2026-10-12T09:41:07Z",
- "completed_at": "2026-10-12T09:41:07Z"
}Idempotente por state: repetirla devuelve la sesión existente. El code vale 30 segundos; el gateway lo
canjea, suscribe webhooks, registra el número y lee su estado en un worker.
| session_id required | string (SignupSessionId) ^sus_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| state required | string |
| code required | string Código canjeable de Meta; vale 30 segundos. |
| waba_id required | string |
| phone_number_id | string Obligatorio en un alta |
| business_id | string |
{- "state": "string",
- "code": "string",
- "waba_id": "string",
- "phone_number_id": "string",
- "business_id": "string"
}{- "session_id": "string",
- "step": "created",
- "billing_mode": "meta_direct",
- "onboarding_type": "dedicated",
- "number_id": "string",
- "payment_status": "awaiting_payment",
- "error": { },
- "expires_at": "2026-10-12T09:41:07Z",
- "completed_at": "2026-10-12T09:41:07Z"
}Multipart. Valida tamaño y tipo, analiza el archivo y devuelve un med_... para usarlo en un mensaje.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| file required | string <binary> |
| file_name | string <= 255 characters |
{- "id": "string",
- "mime_type": "string",
- "size_bytes": 0,
- "file_name": "string",
- "sha256": "string",
- "created_at": "2026-10-12T09:41:07Z"
}Redirige a una URL firmada de 5 minutos. Los tipos que no son imagen, audio o vídeo se sirven como adjunto.
| media_id required | string (MediaId) ^med_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "external_user_id": "string",
- "display_name": "string",
- "email": "user@example.com",
- "role": "agent",
- "active": true,
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Comprueba license.limits.max_agents. Los agentes también se crean solos la primera vez que entran por la UI embebida.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| external_user_id required | string <= 200 characters |
| display_name required | string <= 200 characters |
string <email> | |
| role | string (AgentRole) Enum: "agent" "supervisor" "admin" |
{- "external_user_id": "string",
- "display_name": "string",
- "email": "user@example.com",
- "role": "agent"
}{- "id": "string",
- "external_user_id": "string",
- "display_name": "string",
- "email": "user@example.com",
- "role": "agent",
- "active": true,
- "created_at": "2026-10-12T09:41:07Z"
}| agent_id required | string (AgentId) ^agt_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| display_name | string <= 200 characters |
string <email> | |
| role | string (AgentRole) Enum: "agent" "supervisor" "admin" |
| active | boolean |
{- "display_name": "string",
- "email": "user@example.com",
- "role": "agent",
- "active": true
}{- "id": "string",
- "external_user_id": "string",
- "display_name": "string",
- "email": "user@example.com",
- "role": "agent",
- "active": true,
- "created_at": "2026-10-12T09:41:07Z"
}Nunca devuelve el valor completo, solo el prefijo.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "name": "string",
- "prefix": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 1,
- "last_used_at": "2026-10-12T09:41:07Z",
- "expires_at": "2026-10-12T09:41:07Z",
- "revoked_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
]
}El valor completo se devuelve una sola vez. Los alcances no pueden superar los de la clave que la crea.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| name | string <= 100 characters |
| scopes required | Array of strings (Scope) non-empty Items Enum: "messages:send" "messages:read" "conversations:read" "conversations:write" "contacts:write" "templates:read" "templates:write" "numbers:read" "numbers:write" "agents:write" "keys:write" "usage:read" "settings:write" "webhooks:write" "embed:create" |
| rate_limit_per_min | integer [ 1 .. 100000 ] Default: 600 |
| expires_at | string <date-time> (Timestamp) |
{- "name": "string",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 600,
- "expires_at": "2026-10-12T09:41:07Z"
}{- "id": "string",
- "name": "string",
- "prefix": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 1,
- "last_used_at": "2026-10-12T09:41:07Z",
- "expires_at": "2026-10-12T09:41:07Z",
- "revoked_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "key": "wak_live_7Hq2xK9d_9f3a0c1e5b7d4a2f8c6e0b1d3a5f7c9e2b4d6f8a"
}| key_id required | string (ApiKeyId) ^key_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}Datos de pricing_analytics de Meta guardados en usage_cost_daily. Con facturación meta_direct es
informativo: la factura la emite Meta al cliente. Con línea de crédito de un Solution Partner Meta no devuelve coste.
| from required | string <date> |
| to required | string <date> |
| group_by | Array of strings Items Enum: "day" "category" "pricing_type" "country" "number" Dimensiones separadas por comas. |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "currency": "string",
- "synced_at": "2026-10-12T09:41:07Z",
- "from": "2019-08-24",
- "to": "2019-08-24",
- "totals": {
- "volume": 0,
- "cost": 0
}, - "data": [
- {
- "day": "2019-08-24",
- "category": "string",
- "pricing_type": "string",
- "country": "string",
- "number_id": "string",
- "volume": 0,
- "cost": 0
}
]
}Datos del propio gateway, sin retraso respecto de Meta.
| from required | string <date> |
| to required | string <date> |
| group_by | Array of strings Items Enum: "day" "status" "direction" "type" |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "from": "2019-08-24",
- "to": "2019-08-24",
- "data": [
- {
- "day": "2019-08-24",
- "status": "queued",
- "direction": "inbound",
- "type": "text",
- "count": 0
}
]
}Permite a la app anfitriona ocultar entradas de menú antes de cargar una pantalla no contratada.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "module": "whatsapp",
- "status": "trial",
- "valid_from": "2026-10-12T09:41:07Z",
- "valid_until": "2026-10-12T09:41:07Z",
- "limits": {
- "max_numbers": 0,
- "max_agents": 0,
- "max_templates": 0,
- "max_outbound_per_month": 0,
- "max_ai_conversations_per_month": 0,
- "features": [
- "chat"
]
}, - "usage": {
- "period": "2019-08-24",
- "outbound_messages": 0,
- "inbound_messages": 0,
- "numbers": 0,
- "agents": 0,
- "templates": 0
}
}| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "auto_assign_mode": "manual",
- "reopen_on_inbound": "unassigned",
- "optout_keywords": [
- "BAJA",
- "STOP"
], - "enforce_opt_in": false,
- "cost_alert_monthly": 0,
- "notify_email": "user@example.com"
}| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| auto_assign_mode | string Enum: "manual" "round_robin" "least_busy" |
| reopen_on_inbound | string Enum: "unassigned" "previous_agent" |
| optout_keywords | Array of strings <= 20 items [ items <= 50 characters ] |
| enforce_opt_in | boolean |
| cost_alert_monthly | number or null >= 0 |
| notify_email | string or null <email> |
{- "auto_assign_mode": "manual",
- "reopen_on_inbound": "unassigned",
- "optout_keywords": [
- "string"
], - "enforce_opt_in": true,
- "cost_alert_monthly": 0,
- "notify_email": "user@example.com"
}{- "auto_assign_mode": "manual",
- "reopen_on_inbound": "unassigned",
- "optout_keywords": [
- "BAJA",
- "STOP"
], - "enforce_opt_in": false,
- "cost_alert_monthly": 0,
- "notify_email": "user@example.com"
}| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "events": [
- "string"
], - "active": true,
- "consecutive_failures": 0,
- "created_at": "2026-10-12T09:41:07Z"
}
]
}Solo https, sin redirecciones y sin direcciones privadas. La respuesta incluye secret una sola vez.
La suscripción es siempre del tenant de la llamada. Para recibir los eventos de todos los tenants de una
app se usa POST /admin/v1/apps/{app_id}/webhook-subscriptions.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| url required | string <uri> ^https:// Solo |
| events required | Array of strings (EventPattern) non-empty [ items^(\*|[a-z_]+(\.[a-z_]+)*(\.\*)?)$ ] |
{- "events": [
- "whatsapp.message.*",
- "whatsapp.template.status_changed"
]
}{- "id": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "events": [
- "string"
], - "active": true,
- "consecutive_failures": 0,
- "created_at": "2026-10-12T09:41:07Z",
- "secret": "string"
}| subscription_id required | string (SubscriptionId) ^whs_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| url | string <uri> ^https:// |
| events | Array of strings (EventPattern) non-empty [ items^(\*|[a-z_]+(\.[a-z_]+)*(\.\*)?)$ ] |
| active | boolean |
{- "events": [
- "string"
], - "active": true
}{- "id": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "events": [
- "string"
], - "active": true,
- "consecutive_failures": 0,
- "created_at": "2026-10-12T09:41:07Z"
}| subscription_id required | string (SubscriptionId) ^whs_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| subscription_id required | string (SubscriptionId) ^whs_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "subscription_id": "string",
- "event_id": "string",
- "event_type": "whatsapp.message.received",
- "status": "pending",
- "attempts": 0,
- "next_attempt_at": "2026-10-12T09:41:07Z",
- "last_status_code": 0,
- "last_error": "string",
- "delivered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| status | string (DeliveryStatus) Enum: "pending" "delivered" "failed" "dead" |
| subscription_id | string (SubscriptionId) ^whs_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "data": [
- {
- "id": "string",
- "subscription_id": "string",
- "event_id": "string",
- "event_type": "whatsapp.message.received",
- "status": "pending",
- "attempts": 0,
- "next_attempt_at": "2026-10-12T09:41:07Z",
- "last_status_code": 0,
- "last_error": "string",
- "delivered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}| delivery_id required | string (DeliveryId) ^dlv_[0-9a-f]{32}$ |
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
{- "id": "string",
- "subscription_id": "string",
- "event_id": "string",
- "event_type": "whatsapp.message.received",
- "status": "pending",
- "attempts": 0,
- "next_attempt_at": "2026-10-12T09:41:07Z",
- "last_status_code": 0,
- "last_error": "string",
- "delivered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}Lo pide el backend de la app anfitriona; nunca el navegador. El role que envía la app es el que manda.
El token dura como máximo 5 minutos, es de un solo uso y va en el fragmento de la URL.
| X-Tenant-Id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b Obligatoria con claves multi-tenant (o |
| X-Tenant-Ref | string <= 200 characters
|
| screen required | string (EmbedScreen) Enum: "chat" "templates" "settings" "costs" "signup" |
required | object (EmbedUser) |
object Parámetros de la pantalla ( | |
| locale | string Default: "es" Enum: "es" "en" |
| ttl_seconds | integer [ 30 .. 300 ] Default: 300 |
{- "screen": "chat",
- "user": {
- "external_user_id": "u-318",
- "name": "Marta López",
- "email": "marta@cliente.com",
- "role": "agent"
}, - "params": {
- "contact_ref": "cli-9917"
}, - "locale": "es",
- "ttl_seconds": 300
}{- "token": "string",
- "expires_at": "2026-10-12T09:41:07Z"
}El iframe lo llama al cargar. Gasta el token de embebido y devuelve un access_token de 15 minutos que vive solo en memoria.
| token required | string |
{- "token": "string"
}{- "access_token": "string",
- "expires_at": "2026-10-12T09:41:07Z",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "agent_id": "string",
- "role": "agent",
- "screen": "chat",
- "params": {
- "property1": "string",
- "property2": "string"
}, - "features": [
- "chat"
], - "allowed_origins": [
- "string"
]
}| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string <= 500 characters Valor |
| status | string (TenantStatus) Enum: "active" "suspended" "closed" |
| q | string Busca por nombre o |
{- "data": [
- {
- "id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "external_ref": "string",
- "name": "string",
- "status": "active",
- "default_locale": "string",
- "timezone": "string",
- "data_retention_days": 1,
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Se crea sin licencia. Hasta fijarla con PUT .../license, todas las llamadas del tenant devuelven 403 license_inactive.
| Idempotency-Key | string [ 8 .. 200 ] characters Misma clave y mismo cuerpo devuelve la respuesta original durante 24 h; mismo cuerpo distinto devuelve |
| external_ref required | string [ 1 .. 200 ] characters |
| name required | string [ 1 .. 200 ] characters |
| default_locale | string Default: "es" |
| timezone | string Default: "Europe/Madrid" |
| data_retention_days | integer >= 1 Default: 365 |
{- "external_ref": "CLI-0042",
- "name": "Clínica Dental Sol",
- "default_locale": "es",
- "timezone": "Europe/Madrid"
}{- "id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "external_ref": "string",
- "name": "string",
- "status": "active",
- "default_locale": "string",
- "timezone": "string",
- "data_retention_days": 1,
- "created_at": "2026-10-12T09:41:07Z"
}| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
{- "id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "external_ref": "string",
- "name": "string",
- "status": "active",
- "default_locale": "string",
- "timezone": "string",
- "data_retention_days": 1,
- "created_at": "2026-10-12T09:41:07Z",
- "license": {
- "module": "whatsapp",
- "status": "trial",
- "valid_from": "2026-10-12T09:41:07Z",
- "valid_until": "2026-10-12T09:41:07Z",
- "limits": {
- "max_numbers": 0,
- "max_agents": 0,
- "max_templates": 0,
- "max_outbound_per_month": 0,
- "max_ai_conversations_per_month": 0,
- "features": [
- "chat"
]
}, - "usage": {
- "period": "2019-08-24",
- "outbound_messages": 0,
- "inbound_messages": 0,
- "numbers": 0,
- "agents": 0,
- "templates": 0
}
}, - "apps": [
- {
- "app_id": "string",
- "code": "string",
- "enabled": true
}
], - "account": {
- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}
}| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| name | string [ 1 .. 200 ] characters |
| status | string (TenantStatus) Enum: "active" "suspended" "closed" |
| default_locale | string |
| timezone | string |
| data_retention_days | integer >= 1 |
{- "name": "string",
- "status": "active",
- "default_locale": "string",
- "timezone": "string",
- "data_retention_days": 1
}{- "id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "external_ref": "string",
- "name": "string",
- "status": "active",
- "default_locale": "string",
- "timezone": "string",
- "data_retention_days": 1,
- "created_at": "2026-10-12T09:41:07Z"
}Reemplaza la licencia. Invalida la caché al instante y emite license.updated. Se registra en
audit_log con el usuario de vuestro equipo.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| status required | string (LicenseStatus) Enum: "trial" "active" "suspended" "expired" |
| valid_from | string <date-time> (Timestamp) |
Timestamp (string) or null | |
object (LicenseLimits) | |
| notes | string <= 1000 characters |
{- "status": "active",
- "valid_until": "2027-10-12T00:00:00Z",
- "limits": {
- "max_numbers": 1,
- "max_agents": 5,
- "max_templates": 50,
- "max_outbound_per_month": 20000,
- "features": [
- "chat",
- "templates",
- "api",
- "embed",
- "costs"
]
}
}{- "module": "whatsapp",
- "status": "trial",
- "valid_from": "2026-10-12T09:41:07Z",
- "valid_until": "2026-10-12T09:41:07Z",
- "limits": {
- "max_numbers": 0,
- "max_agents": 0,
- "max_templates": 0,
- "max_outbound_per_month": 0,
- "max_ai_conversations_per_month": 0,
- "features": [
- "chat"
]
}, - "usage": {
- "period": "2019-08-24",
- "outbound_messages": 0,
- "inbound_messages": 0,
- "numbers": 0,
- "agents": 0,
- "templates": 0
}
}Pone la licencia en suspended. Los envíos en cola pasan a failed con license_inactive.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| reason | string <= 500 characters |
{- "reason": "string"
}{- "module": "whatsapp",
- "status": "trial",
- "valid_from": "2026-10-12T09:41:07Z",
- "valid_until": "2026-10-12T09:41:07Z",
- "limits": {
- "max_numbers": 0,
- "max_agents": 0,
- "max_templates": 0,
- "max_outbound_per_month": 0,
- "max_ai_conversations_per_month": 0,
- "features": [
- "chat"
]
}, - "usage": {
- "period": "2019-08-24",
- "outbound_messages": 0,
- "inbound_messages": 0,
- "numbers": 0,
- "agents": 0,
- "templates": 0
}
}| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
| enabled required | boolean |
{- "enabled": true
}{- "app_id": "string",
- "code": "string",
- "enabled": true
}Para desarrollo y soporte: asocia una WABA y un número ya existentes usando un token de acceso que
se guarda cifrado. No sustituye al Embedded Signup. Comprueba el token con debug_token y lee el número
y la WABA. Se desactiva con ALLOW_MANUAL_CONNECT=false.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| waba_id required | string |
| phone_number_id required | string |
| access_token required | string Token con |
| billing_mode | string (BillingMode) Enum: "meta_direct" "platform_credit_line" |
| onboarding_type | string Default: "dedicated" Enum: "dedicated" "business_app"
|
| two_step_pin | string^[0-9]{6}$ PIN de 6 dígitos si el número ya estaba registrado. |
| is_default | boolean Default: true |
{- "waba_id": "string",
- "phone_number_id": "string",
- "access_token": "string",
- "billing_mode": "meta_direct",
- "onboarding_type": "dedicated",
- "two_step_pin": "string",
- "is_default": true
}{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Genera un fichero con todos sus datos para la baja. Responde 202 con el identificador del trabajo.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
{- "job_id": "string",
- "status": "queued"
}{- "data": [
- {
- "id": "string",
- "code": "string",
- "name": "string",
- "status": "active",
- "created_at": "2026-10-12T09:41:07Z"
}
]
}| code required | string^[a-z0-9_-]{2,40}$ |
| name required | string [ 1 .. 200 ] characters |
| allowed_origins | Array of strings <uri> [ items <uri > ] |
{- "code": "erp",
- "name": "ERP de gestión",
}{- "id": "string",
- "code": "string",
- "name": "string",
- "status": "active",
- "created_at": "2026-10-12T09:41:07Z"
}Cambiar allowed_origins actualiza las cabeceras frame-ancestors de la UI embebible.
| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
| name | string [ 1 .. 200 ] characters |
| allowed_origins | Array of strings <uri> [ items <uri > ] |
| status | string Enum: "active" "disabled" |
{- "name": "string",
- "status": "active"
}{- "id": "string",
- "code": "string",
- "name": "string",
- "status": "active",
- "created_at": "2026-10-12T09:41:07Z"
}Nunca devuelve el valor completo, solo el prefijo. Incluye las revocadas.
| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
{- "data": [
- {
- "id": "string",
- "name": "string",
- "prefix": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 1,
- "last_used_at": "2026-10-12T09:41:07Z",
- "expires_at": "2026-10-12T09:41:07Z",
- "revoked_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
]
}Sin tenant_id la clave es multi-tenant y exige X-Tenant-Id o X-Tenant-Ref en cada llamada.
El valor completo se devuelve una sola vez.
| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
| name | string <= 100 characters |
| tenant_id | string (TenantId) ^ten_[0-9a-f]{32}$ |
| scopes required | Array of strings (Scope) non-empty Items Enum: "messages:send" "messages:read" "conversations:read" "conversations:write" "contacts:write" "templates:read" "templates:write" "numbers:read" "numbers:write" "agents:write" "keys:write" "usage:read" "settings:write" "webhooks:write" "embed:create" |
| rate_limit_per_min | integer [ 1 .. 100000 ] Default: 600 |
| expires_at | string <date-time> (Timestamp) |
{- "name": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 600,
- "expires_at": "2026-10-12T09:41:07Z"
}{- "id": "string",
- "name": "string",
- "prefix": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "scopes": [
- "messages:send"
], - "rate_limit_per_min": 1,
- "last_used_at": "2026-10-12T09:41:07Z",
- "expires_at": "2026-10-12T09:41:07Z",
- "revoked_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "key": "wak_live_7Hq2xK9d_9f3a0c1e5b7d4a2f8c6e0b1d3a5f7c9e2b4d6f8a"
}| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
{- "data": [
- {
- "id": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "events": [
- "string"
], - "active": true,
- "consecutive_failures": 0,
- "created_at": "2026-10-12T09:41:07Z"
}
]
}Recibe los eventos de todos los tenants para los que la app está habilitada. El secreto se devuelve una sola vez.
| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
| url required | string <uri> ^https:// Solo |
| events required | Array of strings (EventPattern) non-empty [ items^(\*|[a-z_]+(\.[a-z_]+)*(\.\*)?)$ ] |
{- "events": [
- "string"
]
}{- "id": "string",
- "app_id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "events": [
- "string"
], - "active": true,
- "consecutive_failures": 0,
- "created_at": "2026-10-12T09:41:07Z",
- "secret": "string"
}Qué parámetros de Meta y de la plataforma están configurados. Nunca devuelve secretos, solo si existen.
{- "environment": "string",
- "public_base_url": "string",
- "graph_version": "string",
- "manual_connect_enabled": true,
- "allow_private_webhook_urls": true,
- "meta": {
- "app_id_configured": true,
- "app_secret_configured": true,
- "config_id_configured": true,
- "verify_token_configured": true
}
}Parámetros del WABA, estado del token y números conectados. El token nunca se devuelve.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
{- "account": {
- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}, - "credential": {
- "status": "valid",
- "last_verified_at": "2026-10-12T09:41:07Z",
- "expires_at": "2026-10-12T09:41:07Z"
}, - "numbers": [
- {
- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}
]
}| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
| is_default required | boolean Value: true |
{- "is_default": true
}{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Deja de enviar y recibir por ese número en la plataforma. No lo da de baja en Meta.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}Actualiza calidad, límite, nombre y estado con el token del tenant. Si Meta rechaza el token, queda marcado como inválido.
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| number_id required | string (NumberId) ^num_[0-9a-f]{32}$ |
{- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}Sirve también para las claves multi-tenant, que un tenant no puede revocar.
| key_id required | string (ApiKeyId) ^key_[0-9a-f]{32}$ |
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}| app_id required | string (AppId) ^app_[0-9a-f]{32}$ |
| subscription_id required | string (SubscriptionId) ^whs_[0-9a-f]{32}$ |
{- "error": {
- "code": "window_closed",
- "message": "La ventana de 24 horas de este contacto está cerrada; envía una plantilla.",
- "details": {
- "window_expired_at": "2026-10-11T18:22:00Z"
}, - "request_id": "req_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
}
}Cambios hechos por administración, apps y agentes. Del más reciente al más antiguo.
| tenant_id | string (TenantId) ^ten_[0-9a-f]{32}$ Examples: tenant_id=ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b |
| limit | integer [ 1 .. 200 ] Default: 50 |
| cursor | string^[0-9]{1,18}$ |
{- "data": [
- {
- "id": "string",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "actor_type": "app",
- "actor_id": "string",
- "action": "string",
- "entity_type": "string",
- "entity_id": "string",
- "data": { },
- "created_at": "2026-10-12T09:41:07Z"
}
], - "next_cursor": "string"
}Colas, trabajos en dead, números con problemas y pagos bloqueados.
{- "status": "ok",
- "checked_at": "2026-10-12T09:41:07Z",
- "queues": {
- "queued_messages": 0,
- "sending_messages": 0,
- "failed_last_hour": 0,
- "oldest_queued_age_seconds": 0
}, - "webhook_events": {
- "received": 0,
- "failed": 0
}, - "deliveries": {
- "dead": 0
}, - "payment_blocked": [
- "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b"
], - "numbers_with_problems": [
- {
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "number_id": "string",
- "status": "string",
- "quality_rating": "string"
}
]
}Vuelve a poner en cola los eventos de Meta guardados en un rango, normalmente los failed.
| from required | string <date-time> (Timestamp) |
| to required | string <date-time> (Timestamp) |
| status | string Default: "failed" Enum: "failed" "received" "ignored" |
{- "from": "2026-10-12T09:41:07Z",
- "to": "2026-10-12T09:41:07Z",
- "status": "failed"
}{- "requeued": 0
}Valida X-Hub-Signature-256 (HMAC-SHA256 del cuerpo sin parsear con el APP_SECRET), guarda cada elemento
de entry[].changes[] en inbound_webhook_event con deduplicación y responde 200 en menos de un segundo.
Una firma inválida devuelve 401.
| X-Hub-Signature-256 | string sha256= |
| object | string Value: "whatsapp_business_account" |
Array of objects |
{- "object": "whatsapp_business_account",
- "entry": [
- {
- "id": "string",
- "time": 0,
- "changes": [
- {
- "field": "string",
- "value": { }
}
]
}
]
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "whatsapp.message.received" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.message.received",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "conversation_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "message": {
- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "whatsapp.message.sent_from_app" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.message.sent_from_app",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "conversation_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "message": {
- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "whatsapp.message.status" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.message.status",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "message": {
- "id": "string",
- "conversation_id": "string",
- "contact_id": "string",
- "number_id": "string",
- "direction": "inbound",
- "type": "text",
- "status": "queued",
- "to": "string",
- "from": "string",
- "body": "string",
- "template_id": "string",
- "media_id": "string",
- "reply_to_message_id": "string",
- "payload": { },
- "reply": {
- "id": "string",
- "title": "string",
- "description": "string",
- "data": { }
}, - "via": "api",
- "wa_message_id": "string",
- "external_ref": "string",
- "origin_app_id": "string",
- "sent_by_agent_id": "string",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}, - "billable": true,
- "pricing_category": "string",
- "pricing_type": "string",
- "queued_at": "2026-10-12T09:41:07Z",
- "sent_at": "2026-10-12T09:41:07Z",
- "delivered_at": "2026-10-12T09:41:07Z",
- "read_at": "2026-10-12T09:41:07Z",
- "failed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}, - "status": "queued",
- "error": {
- "code": "string",
- "meta_code": 0,
- "title": "string",
- "detail": "string",
- "retryable": true
}
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.conversation.assigned",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "conversation": {
- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}, - "previous_agent_id": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.conversation.assigned",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "conversation": {
- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}, - "previous_agent_id": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.conversation.assigned",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "conversation": {
- "id": "string",
- "number_id": "string",
- "contact": {
- "id": "string",
- "wa_id": "string",
- "profile_name": "string",
- "display_name": "string",
- "external_ref": "string",
- "opt_in_status": "unknown"
}, - "status": "open",
- "assigned_agent_id": "string",
- "last_inbound_at": "2026-10-12T09:41:07Z",
- "window_expires_at": "2026-10-12T09:41:07Z",
- "window_open": true,
- "last_message_at": "2026-10-12T09:41:07Z",
- "last_message_preview": "string",
- "unread_count": 0,
- "external_ref": "string",
- "tags": [
- "string"
], - "closed_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z"
}, - "previous_agent_id": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.template.status_changed",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "template": {
- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "previous": { }
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.template.status_changed",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "template": {
- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "previous": { }
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.template.status_changed",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "template": {
- "id": "string",
- "meta_template_id": "string",
- "name": "string",
- "language": "string",
- "category": "marketing",
- "parameter_format": "positional",
- "status": "draft",
- "quality_rating": "string",
- "rejected_reason": "string",
- "header": {
- "type": "text",
- "text": "string"
}, - "body": {
- "text": "string",
- "examples": [
- "string"
]
}, - "footer": "string",
- "buttons": [
], - "components": [
- { }
], - "variables": [
- "string"
], - "revision": 1,
- "origin": "gateway",
- "library_code": "string",
- "last_synced_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "previous": { }
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.number.connected",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "number": {
- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "reason": "string",
- "initiated_by": "USER"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.number.connected",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "number": {
- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "reason": "string",
- "initiated_by": "USER"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.number.connected",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "number": {
- "id": "string",
- "phone_number_id": "string",
- "display_phone_number": "string",
- "verified_name": "string",
- "name_status": "string",
- "quality_rating": "string",
- "messaging_limit": "string",
- "platform_type": "string",
- "throughput_level": "string",
- "status": "pending",
- "onboarding_type": "dedicated",
- "is_on_biz_app": true,
- "history_sync": {
- "status": "requested",
- "progress": 0
}, - "is_default": true,
- "registered_at": "2026-10-12T09:41:07Z",
- "created_at": "2026-10-12T09:41:07Z",
- "updated_at": "2026-10-12T09:41:07Z"
}, - "reason": "string",
- "initiated_by": "USER"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.account.payment_blocked",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "account": {
- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}, - "reason": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.account.payment_blocked",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "account": {
- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}, - "reason": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.account.payment_blocked",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "account": {
- "waba_id": "string",
- "business_id": "string",
- "name": "string",
- "currency": "string",
- "timezone_id": "string",
- "billing_mode": "meta_direct",
- "payment_status": "awaiting_payment",
- "business_verification_status": "string",
- "account_review_status": "string",
- "status": "active",
- "subscribed_at": "2026-10-12T09:41:07Z"
}, - "reason": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "whatsapp.signup.failed" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.signup.failed",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "session_id": "string",
- "step": "created",
- "error": { }
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "whatsapp.usage.alert" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "whatsapp.usage.alert",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "threshold_pct": 80,
- "spent": 0,
- "limit": 0,
- "currency": "string"
}
}| id required | string (EventId) ^evt_[0-9a-f]{32}$ |
| type required | string Enum: "whatsapp.message.received" "whatsapp.message.sent_from_app" "whatsapp.message.status" "whatsapp.conversation.assigned" "whatsapp.conversation.closed" "whatsapp.conversation.reopened" "whatsapp.template.status_changed" "whatsapp.template.quality_changed" "whatsapp.template.category_changed" "whatsapp.number.connected" "whatsapp.number.updated" "whatsapp.number.disconnected" "whatsapp.account.payment_blocked" "whatsapp.account.payment_active" "whatsapp.account.restricted" "whatsapp.signup.failed" "whatsapp.usage.alert" "whatsapp.test" "license.updated" Value: "license.updated" |
| tenant_id required | string (TenantId) ^ten_[0-9a-f]{32}$ |
| tenant_ref required | string
|
| occurred_at required | string <date-time> (Timestamp) |
required | object |
{- "id": "string",
- "type": "license.updated",
- "tenant_id": "ten_018f3c5a9b2d7e4f8a1b2c3d4e5f6a7b",
- "tenant_ref": "string",
- "occurred_at": "2026-10-12T09:41:07Z",
- "data": {
- "license": {
- "module": "whatsapp",
- "status": "trial",
- "valid_from": "2026-10-12T09:41:07Z",
- "valid_until": "2026-10-12T09:41:07Z",
- "limits": {
- "max_numbers": 0,
- "max_agents": 0,
- "max_templates": 0,
- "max_outbound_per_month": 0,
- "max_ai_conversations_per_month": 0,
- "features": [
- "chat"
]
}, - "usage": {
- "period": "2019-08-24",
- "outbound_messages": 0,
- "inbound_messages": 0,
- "numbers": 0,
- "agents": 0,
- "templates": 0
}
}
}
}