Send an email
POST /v1/emailsRequest body
| Field | Type | Required | Notes |
|---|---|---|---|
from | string | Yes | "a@b.ng" or "Name <a@b.ng>"; domain must be verified for live keys |
to | string or string[] | Yes | Up to 50 recipients |
subject | string | Yes | Max 998 characters |
html | string | One of these three | HTML body |
text | string | One of these three | Plain-text body (recommended alongside html) |
template_id | string | One of these three | Server-side template (with variables) |
cc, bcc, reply_to | string or string[] | No | |
attachments | object[] | No | {filename, content (base64), content_type}, max 10 |
tags | string[] | No | Up to 10, for filtering |
headers | object | No | Custom email headers |
scheduled_at | string | No | ISO 8601 timestamp for future sends |
idempotency_key | string | No | Safe retries |
Response 201
{ "id": "bb82eb79-b220-4801-85ef-cb3203ae2024", "from": "PayLink <receipts@paylink.ng>", "to": ["amaka@halo.ng"], "subject": "Receipt for ₦45,000", "status": "queued", "sandbox": false, "tags": [], "scheduled_at": null, "created_at": "2026-06-13T09:14:07.614Z"}An idempotent replay of a previous send returns 200 with the original email.
Errors
422 validation_error · 403 domain_not_verified (live keys, unverified from-domain) · 422 suppressed_recipient · 429 rate_limit_exceeded