Email API Documentation

Version: 1.0.0  |  Last updated: September 10, 2025

Brazeno’s Email API enables seamless, secure, and scalable messaging for your business. This documentation covers authentication, endpoints, request/response formats, error handling, and best practices.

Authorization

All requests require an API key for authorization. The API key must be included in the x-api-key header for each request.

API Key: The x-api-key header must be included with every request to authenticate the client. Requests without this header will return a 401 Unauthorized error.

Example:

x-api-key: YOUR_API_KEY

1. Send Email

POST /email

Sends an Email message. The message can be directly specified or templated.

Headers
  • x-api-key (required): API key for authorization.
Request Body
Field Type Required Description Default
tostringYesDestination email. Valid email address. Example: example@example.com.-
fromstringYesOriginating email. Must be a verified sender in your account.-
bodystringConditionally requiredEmail text body. Required if templateId is not provided.-
subjectstringConditionally requiredEmail subject. Required if templateId is not provided.
templateIdstringConditionally requiredTemplate ID. Required if body & subject is not provided.-
dataobjectNoTemplate data as key-value pairs.-
clientIdentifierstringNoSource system identifier for tracking.""
notBeforestring (ISO 8601)NoDo not send before this UTC time.-
notAfterstring (ISO 8601)NoExpire after this UTC time.-
Sample Request (Non Templated)
curl --location 'https://api.brazeno.com/api/v1/email' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "to": "someone@example.com",
  "from": "alerts@example.com",
  "body": "This is a sample Email message for testing purposes.",
  "subject": "Test Email",
  "clientIdentifier": "client-001"
}'
Sample Request (Templated)
curl --location 'https://api.brazeno.com/api/v1/email' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "templateId": "tmpl_1234567890abcdef",
  "to": "someone@example.com",
  "from": "alerts@example.com",
  "data": {
    "name": "Alex Example",
    "address": "123 Example Street",
    "etor": "8pm"
  },
  "clientIdentifier": "client-001",
  "notBefore": "2025-01-01T12:00:00Z",
  "notAfter": "2025-01-01T14:00:00Z"
}'
Sample Response

200 OK

{
    "status": "queued",
    "messageId": "1234567890abcdef"
}
Response Fields
Field Type Description
message string A confirmation message indicating the Email has been successfully received by the API.
messageId string A unique identifier for tracking the Email. This ID can be used in subsequent API calls to retrieve the Email status and any associated events.
Rate Limiting

To ensure fair usage of resources, the Send Email API endpoint is rate-limited based on each client’s API key. If the rate limit is exceeded, subsequent requests will be temporarily blocked until the rate limit resets.

Current Rate Limit

The current rate limit may vary based on your subscription plan and usage agreement. Please refer to the API’s response headers to monitor your rate limit status, or contact us for your specific rate limit settings.

Rate Limit Headers

On each response, the following headers provide rate limit details:

Header Description
X-RateLimit-Limit The maximum number of requests allowed per minute for the API key.
X-RateLimit-Remaining The number of requests remaining in the current time window.
X-RateLimit-Reset The time (in seconds) until the rate limit resets and the full quota is available again.
Exceeded Rate Limit Response

If the rate limit is exceeded, the following response will be returned:

{
    "error": "Rate limit exceeded"
}
Increasing Rate Limit

If your application requires a higher rate limit, please reach out to the Brazeno support team to discuss rate limit adjustments that suit your requirements. We are happy to accommodate higher traffic where possible. Contact us via email at contact@emsgnow.net or through your Brazeno representative.


2. Get Email Status

Retrieve message status events using either a POST (for multiple message IDs) or a GET (for a single message ID).

Headers
  • x-api-key (required): API key for authorization.
  • Content-Type: application/json
Endpoint

https://api.brazeno.com/api/v1/message/status

Sample Request (POST - multiple messageIds)
curl --location 'https://api.brazeno.com/api/v1/message/status' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
  "messageIds": [
    "1eff6f78-0701-453e-8c6c-8cb969d2e5cd",
    "7d4b3db1-e4fa-44ff-8ac6-94b29b40885e"
  ]
}'
Sample Request (GET - single messageId)
curl --location --request GET 'https://api.brazeno.com/api/v1/message/status?messageId=390b6f28-20bd-4cc5-8cae-6e598f9abf8b' \
--header 'x-api-key: YOUR_API_KEY'
Sample Response (both verbs)
[
  {
    "messageId": "390b6f28-20bd-4cc5-8cae-6e598f9abf8b",
    "clientIdentifier": "approval-886f97ec-ecfe-4285-b2e7-f4fdff4c9000-1757449306535",
    "to": "someone@example.com",
    "from": "alerts@example.com",
    "channel": "email",
    "statuses": [
      {
        "status": "queued",
        "statusAt": "2025-09-09T20:21:46.646Z",
      },
      {
        "status": "sent to provider",
        "statusAt": "2025-09-09T20:21:47.162Z"
      },
      {
        "status": "delivered",
        "statusAt": "2025-09-09T20:21:47.162Z"
      },
      {
        "status": "open",
        "statusAt": "2025-09-09T20:21:47.162Z"
      },
      {
        "status": "click",
        "statusAt": "2025-09-09T20:21:47.162Z",
        "url": "https://example.com",
      }      
    ]
  }
]
Response Fields
Field Type Description
messageIdstringUnique identifier of the message.
clientIdentifierstringClient-supplied identifier for correlation.
tostringDestination number (E.164).
fromstringOriginating number (short/long code).
channelstringChannel of message, e.g., email.
statusesarrayTimeline of status records.
statuses Array
Field Type Description
statusstringStatus value, e.g., queued, sent to provider, delivered.
statusAtstring (ISO 8601)Timestamp when the status was recorded.
urlstring|nullOptional related URL.

Error Responses

401 Unauthorized
{
    "error": "API key is required"
}
403 Forbidden
{
    "error": "Invalid API key"
}
500 Internal Server Error
{
    "error": "Failed to retrieve Email status"
}
429 Too Many Requests
{
    "error": "Rate limit exceeded"
}