La API está en construcción y abre primero a equipos del programa de acceso anticipado. Esta documentación describe el contrato v1 con el que se está construyendo.

Referencia de la API

Generada desde el contrato OpenAPI v1.0.0, la fuente de verdad de la API.

URL base: https://api.notify.com.mx/v1

Autenticación

Envía tu API key como token Bearer en el header Authorization. Tu cuenta se identifica por la key.

Authorization: Bearer $NOTIFY_API_KEY

Envío y consulta de mensajes

GET/messages

Listar mensajes

Parámetros

NombreEnTipoObligatorioDescripción
statusqueryMessageStatusNo
channelqueryChannelNo
recipientquerystringNoDirección del destinatario
fromquerystring (date-time)No
toquerystring (date-time)No
cursorquerystringNoPaginación por cursor
limitqueryintegerNo

Respuestas

CódigoDescripciónTipo
200Listado paginadoMessageList
401API key ausente, inválida o revocadaError

POST/messages

Enviar un mensaje

Acepta una petición de envío, la valida y la encola.

  • Si idempotency_key ya fue usada, devuelve el mensaje original sin generar un envío nuevo.
  • Si el destinatario tiene opt-out para ese canal, el mensaje queda en estado blocked.

Parámetros

NombreEnTipoObligatorioDescripción
Idempotency-KeyheaderstringNoEvita envíos duplicados ante reintentos del cliente.

Cuerpo de la petición

SubmitMessageRequest

Respuestas

CódigoDescripciónTipo
202Petición aceptada y encoladaMessage
400Petición malformadaError
401API key ausente, inválida o revocadaError
403Tenant suspendidoError
422Validación fallida (plantilla inexistente, variable obligatoria ausente)Error
429Límite de peticiones del tenant superadoError

GET/messages/{id}

Consultar el estado de un mensaje

Devuelve el estado del mensaje y su historial completo de intentos de entrega.

Un mensaje perteneciente a otro tenant devuelve 404, nunca 403: un 403 confirmaría que ese identificador existe.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)Sí

Respuestas

CódigoDescripciónTipo
200Mensaje encontradoMessageDetail
401API key ausente, inválida o revocadaError
404Recurso inexistente o perteneciente a otro tenantError

GET/health

Health checkSin autenticación

Respuestas

CódigoDescripciónTipo
200Servicio operativo—

Plantillas multiidioma

GET/templates

Listar plantillas

Parámetros

NombreEnTipoObligatorioDescripción
channelqueryChannelNo

Respuestas

CódigoDescripciónTipo
200Listado de plantillasTemplate[]

POST/templates

Crear una plantilla

Cuerpo de la petición

CreateTemplateRequest

Respuestas

CódigoDescripciónTipo
201Plantilla creadaTemplate
409Ya existe una plantilla con esa key en el tenant—
422Validación fallida (plantilla inexistente, variable obligatoria ausente)Error

POST/templates/{key}/versions

Añadir una versión por idioma

Añade la variante de la plantilla para un locale.

Editar una versión activa genera una versión nueva; la anterior no se modifica, para que la auditoría pueda recuperar el texto exacto que se envió en el pasado.

Parámetros

NombreEnTipoObligatorioDescripción
keypathstringSí

Cuerpo de la petición

CreateTemplateVersionRequest

Respuestas

CódigoDescripciónTipo
201Versión creadaTemplateVersion
404Recurso inexistente o perteneciente a otro tenantError
422Validación fallida (plantilla inexistente, variable obligatoria ausente)Error

Esquemas

Channel

Canal de entrega. push se añadirá en v2.

Valores: email, sms, whatsapp

MessageStatus

  • accepted: aceptado y encolado
  • processing: un worker lo está procesando
  • sent: el proveedor lo aceptó
  • delivered: confirmada la entrega al destinatario
  • failed: agotó los reintentos
  • blocked: no se envió por opt-out registrado

sent y delivered son distintos a propósito: que un proveedor acepte un mensaje no prueba que haya llegado.

Valores: accepted, processing, sent, delivered, failed, blocked

ErrorCategory

Taxonomía normalizada. Nunca se expone el código crudo del proveedor.

Valores: transient_provider_error, rate_limited, invalid_recipient, blocked_by_provider, template_not_approved, authentication_error

Recipient

NombreTipoObligatorioDescripción
addressstringSíCorreo electrónico, o teléfono que será normalizado a E.164.
localestringNoIdioma del destinatario. Si se omite o no existe versión para él, se aplica la cascada: locale → default_locale del tenant → es.
external_idstringNoIdentificador del destinatario en el sistema del cliente.

SubmitMessageRequest

NombreTipoObligatorioDescripción
channelChannelSí
recipientRecipientSí
template_keystringSíClave estable de la plantilla.
variablesobjectNoVariables del render. Se validan contra el variables_schema de la plantilla.
idempotency_keystringNoAlternativa al header Idempotency-Key.

Message

NombreTipoObligatorioDescripción
idstring (uuid)No
statusMessageStatusNo
channelChannelNo
recipientRecipientNo
template_keystringNo
resolved_localestringNoIdioma finalmente usado tras aplicar la cascada.
created_atstring (date-time)No

DeliveryAttempt

NombreTipoObligatorioDescripción
attempt_numberintegerNo
providerstringNo
statussent | failedNo
error_categoryErrorCategoryNo
error_detailstringNoExplicación legible. No es el mensaje crudo del proveedor.
attempted_atstring (date-time)No

MessageDetail

NombreTipoObligatorioDescripción
idstring (uuid)No
statusMessageStatusNo
channelChannelNo
recipientRecipientNo
template_keystringNo
resolved_localestringNoIdioma finalmente usado tras aplicar la cascada.
created_atstring (date-time)No
attemptsDeliveryAttempt[]No
delivered_atstring (date-time) | nullNo

MessageList

NombreTipoObligatorioDescripción
dataMessage[]No
next_cursorstring | nullNo

CreateTemplateRequest

NombreTipoObligatorioDescripción
keystringSíÚnica por tenant. Es lo que el cliente referencia al enviar.
channelChannelSí
namestringSí
variables_schemaobjectNoJSON Schema de las variables que espera la plantilla.

Template

NombreTipoObligatorioDescripción
idstring (uuid)No
keystringNo
channelChannelNo
namestringNo
variables_schemaobjectNo
versionsTemplateVersion[]No

CreateTemplateVersionRequest

NombreTipoObligatorioDescripción
localestringSí
subjectstringNoSolo para el canal email.
bodystringSíContenido con marcadores de variables.
provider_template_idstringNoObligatorio en WhatsApp: identificador de la plantilla aprobada por Meta. WhatsApp no admite texto libre fuera de la ventana de sesión.

TemplateVersion

NombreTipoObligatorioDescripción
idstring (uuid)No
localestringNo
subjectstring | nullNo
bodystringNo
statusdraft | active | archivedNo
versionintegerNo

Error

NombreTipoObligatorioDescripción
codestringSíCódigo estable y accionable.
messagestringSíExplicación legible de qué hacer.
detailsobjectNo