The API is under construction and opens first to teams in the early access program. These docs describe the v1 contract it is being built against.

API reference

Generated from the OpenAPI v1.0.0 contract, the API's source of truth.

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

Authentication

Send your API key as a Bearer token in the Authorization header. Your account is identified by the key.

Authorization: Bearer $NOTIFY_API_KEY

Send and query messages

GET/messages

List messages

Parameters

NameInTypeRequiredDescription
statusqueryMessageStatusNo
channelqueryChannelNo
recipientquerystringNoRecipient address
fromquerystring (date-time)No
toquerystring (date-time)No
cursorquerystringNoCursor-based pagination
limitqueryintegerNo

Responses

CodeDescriptionType
200Paginated listMessageList
401API key missing, invalid or revokedError

POST/messages

Send a message

Accepts a send request, validates it and queues it.

  • If the idempotency_key was already used, the original message is returned and no new send is created.
  • If the recipient has opted out of that channel, the message ends up in the blocked status.

Parameters

NameInTypeRequiredDescription
Idempotency-KeyheaderstringNoPrevents duplicate sends when the client retries.

Request body

SubmitMessageRequest

Responses

CodeDescriptionType
202Request accepted and queuedMessage
400Malformed requestError
401API key missing, invalid or revokedError
403Tenant suspendedError
422Validation failed (template not found, required variable missing)Error
429Tenant rate limit exceededError

GET/messages/{id}

Get a message's status

Returns the message status and its full history of delivery attempts.

A message that belongs to another tenant returns 404, never 403: a 403 would confirm that the identifier exists.

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)Yes

Responses

CodeDescriptionType
200Message foundMessageDetail
401API key missing, invalid or revokedError
404Resource not found or owned by another tenantError

GET/health

Health checkNo authentication

Responses

CodeDescriptionType
200Service is up—

Multilingual templates

GET/templates

List templates

Parameters

NameInTypeRequiredDescription
channelqueryChannelNo

Responses

CodeDescriptionType
200Template listTemplate[]

POST/templates

Create a template

Request body

CreateTemplateRequest

Responses

CodeDescriptionType
201Template createdTemplate
409A template with that key already exists in the tenant—
422Validation failed (template not found, required variable missing)Error

POST/templates/{key}/versions

Add a language version

Adds the template variant for a locale.

Editing an active version creates a new version; the previous one is never modified, so the audit trail can always recover the exact text that was sent in the past.

Parameters

NameInTypeRequiredDescription
keypathstringYes

Request body

CreateTemplateVersionRequest

Responses

CodeDescriptionType
201Version createdTemplateVersion
404Resource not found or owned by another tenantError
422Validation failed (template not found, required variable missing)Error

Schemas

Channel

Delivery channel. push will be added in v2.

Values: email, sms, whatsapp

MessageStatus

  • accepted: accepted and queued
  • processing: a worker is processing it
  • sent: the provider accepted it
  • delivered: delivery to the recipient was confirmed
  • failed: retries were exhausted
  • blocked: not sent because of a registered opt-out

sent and delivered are deliberately different: a provider accepting a message does not prove it arrived.

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

ErrorCategory

Normalized taxonomy. The provider's raw error code is never exposed.

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

Recipient

NameTypeRequiredDescription
addressstringYesEmail address, or phone number that will be normalized to E.164.
localestringNoRecipient language. If omitted, or if no version exists for it, the cascade applies: locale → tenant default_locale → es.
external_idstringNoRecipient identifier in the customer's system.

SubmitMessageRequest

NameTypeRequiredDescription
channelChannelYes
recipientRecipientYes
template_keystringYesStable template key.
variablesobjectNoRender variables. Validated against the template's variables_schema.
idempotency_keystringNoAlternative to the Idempotency-Key header.

Message

NameTypeRequiredDescription
idstring (uuid)No
statusMessageStatusNo
channelChannelNo
recipientRecipientNo
template_keystringNo
resolved_localestringNoLanguage actually used after applying the cascade.
created_atstring (date-time)No

DeliveryAttempt

NameTypeRequiredDescription
attempt_numberintegerNo
providerstringNo
statussent | failedNo
error_categoryErrorCategoryNo
error_detailstringNoHuman-readable explanation. Never the provider's raw message.
attempted_atstring (date-time)No

MessageDetail

NameTypeRequiredDescription
idstring (uuid)No
statusMessageStatusNo
channelChannelNo
recipientRecipientNo
template_keystringNo
resolved_localestringNoLanguage actually used after applying the cascade.
created_atstring (date-time)No
attemptsDeliveryAttempt[]No
delivered_atstring (date-time) | nullNo

MessageList

NameTypeRequiredDescription
dataMessage[]No
next_cursorstring | nullNo

CreateTemplateRequest

NameTypeRequiredDescription
keystringYesUnique per tenant. This is what the client references when sending.
channelChannelYes
namestringYes
variables_schemaobjectNoJSON Schema of the variables the template expects.

Template

NameTypeRequiredDescription
idstring (uuid)No
keystringNo
channelChannelNo
namestringNo
variables_schemaobjectNo
versionsTemplateVersion[]No

CreateTemplateVersionRequest

NameTypeRequiredDescription
localestringYes
subjectstringNoEmail channel only.
bodystringYesContent with variable placeholders.
provider_template_idstringNoRequired for WhatsApp: the ID of the Meta-approved template. WhatsApp does not allow free-form text outside the session window.

TemplateVersion

NameTypeRequiredDescription
idstring (uuid)No
localestringNo
subjectstring | nullNo
bodystringNo
statusdraft | active | archivedNo
versionintegerNo

Error

NameTypeRequiredDescription
codestringYesStable, actionable code.
messagestringYesHuman-readable explanation of what to do.
detailsobjectNo