API v1

Base URL: https://zend24.com/api/v1 · Auth: Authorization: Bearer sk_live_...

POST /emails

Sends an email. Fields: from, to (string or array, max 50), subject, and html, text or template + variables. Optional: cc, bcc, reply_to.

{
  "from": "App <noreply@tudominio.com>",
  "to": ["uno@ejemplo.com"],
  "subject": "Bienvenido, {{nombre}}",
  "template": "bienvenida",
  "variables": { "nombre": "Ana" }
}
→ 200 { "id": "01J2ZK7QW9..." }

POST /emails/batch

Up to 100 sends in one call: { "emails": [ {...}, {...} ] }. Returns a result per index.

GET /emails/{id} · GET /emails

Individual status (status, opens, clicks) or paginated list with ?limit=&before= (cursor).

GET /domains · GET /suppressions · DELETE /suppressions/{email}

Domain status and suppression list management (DELETE requires a key with full scope).

Webhooks

Events: email.sent, email.delivered, email.bounced, email.complained, email.opened, email.clicked. Every POST includes X-Zend24-Timestamp and X-Zend24-Signature: v1=HMAC_SHA256(ts.body, secret). Verify the signature and reject timestamps older than 5 minutes.

Errors and limits

Errors: { "error": { "type", "message" } } with standard HTTP codes (401 auth, 403 domain, 422 validation, 429 rate limit/quota). The per-minute rate limit depends on your plan.