Authentication

All requests to the RelayPulse API require an active API key with proper scope permissions. Provide your key in the Authorization header using the Bearer scheme, or via the X-API-Key header.

Authorization: Bearer rp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
POST

/api/v1/emails

Dispatches a single transactional email into the background queue.

Request Body (JSON)

{
  "from": {
    "email": "noreply@yourdomain.com",
    "name": "Acme Auth"
  },
  "to": [
    { "email": "user@example.com", "name": "John Doe" }
  ],
  "subject": "Your Authentication Code",
  "html": "<h1>Code: 123456</h1>",
  "text": "Code: 123456",
  "open_tracking": true,
  "click_tracking": true,
  "tags": ["auth", "otp"]
}

Response (202 Accepted)

{
  "success": true,
  "data": {
    "message_id": "msg_8b2a19f40e1c2d3e4f5a6b7c",
    "status": "queued",
    "from": "noreply@yourdomain.com",
    "to": ["user@example.com"],
    "created_at": "2026-08-22T22:30:00+00:00"
  }
}
POST

/api/v1/emails/batch

Accepts an array of up to 100 email payloads to dispatch concurrently.

{
  "messages": [
    {
      "from": { "email": "alerts@domain.com" },
      "to": [{ "email": "user1@example.com" }],
      "subject": "System Notice 1",
      "html": "<p>Notice 1</p>"
    },
    {
      "from": { "email": "alerts@domain.com" },
      "to": [{ "email": "user2@example.com" }],
      "subject": "System Notice 2",
      "html": "<p>Notice 2</p>"
    }
  ]
}

Webhooks Verification

Every webhook payload dispatched from RelayPulse contains an X-RelayPulse-Signature header containing a Unix timestamp and HMAC-SHA256 signature calculated against your endpoint secret.

X-RelayPulse-Signature: t=1755901200,v1=5d41402abc4b2a76b9719d911017c592...

Error Handling

The RelayPulse API uses standard HTTP response codes accompanied by structured JSON error payloads.

{
  "success": false,
  "error": {
    "code": "SEND_FAILED",
    "message": "Daily sending limit of 500 emails exceeded. Used: 500."
  }
}