Email API reference
Send email with a JSON request and check its delivery status. Endpoints, fields, responses and errors.
The Email API sends messages through the same pipeline, limits and credits as the SMTP relay. Your account needs SMTP relay access (see Send email with the SMTP relay) and a verified sending domain.
Authentication
Create an API key in Settings → API keys and send it as a bearer token. Always include Accept: application/json.
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
Send a message
POST /api/v1/send
{
"from": "Your Store <orders@yourdomain.com>",
"to": ["Jane Doe <jane@example.com>"],
"cc": ["accounts@example.com"],
"bcc": ["archive@yourdomain.com"],
"reply_to": "support@yourdomain.com",
"subject": "Your order #1024",
"html": "<p>Thanks for your order, Jane!</p>",
"text": "Thanks for your order, Jane!",
"tags": ["order-confirmation"],
"headers": { "X-Order-Id": "1024" },
"attachments": [
{ "filename": "invoice-1024.pdf", "content": "JVBERi0xLjQK...", "content_type": "application/pdf" }
]
}
| Field | Required | Notes |
|---|---|---|
from |
yes | "Name <email>", "email" or {"email": "...", "name": "..."}. The domain must be verified in your account |
to |
yes | Array (or comma-separated string) of addresses |
cc, bcc |
no | Arrays of addresses. Bcc recipients never appear in the headers |
subject |
yes | Up to 998 characters |
html / text |
one of them | Send both for the best deliverability |
reply_to |
no | Single address |
tags |
no | Up to 10 short labels, returned in webhooks and the message log |
headers |
no | Custom X-… headers, List-Unsubscribe, In-Reply-To, References |
attachments |
no | Up to 10 files: filename, content (base64), optional content_type, optional content_id for inline images referenced as cid: in the HTML |
Each unique recipient (to, cc and bcc) costs 1 credit.
Response 202 Accepted
{
"id": "01JABCDEF0123456789XYZ0000",
"status": "queued",
"message_id": "01JABCDEF0123456789XYZ0000@smtp.inboxroads.com",
"credits_charged": 3,
"recipients": [
{ "email": "jane@example.com", "type": "to", "status": "queued", "error": null }
]
}
Check status
GET /api/v1/messages/{id}returns the message and each recipient's status:queued,sent,delivered,bounced,complained,failedorsuppressed.GET /api/v1/messages?status=failed&per_page=50lists recent messages.
For real-time updates, use webhooks instead of polling.
Errors
| HTTP | Meaning |
|---|---|
401 |
Missing or invalid API key |
402 |
Insufficient credits |
403 |
SMTP relay access is not active, or the account is suspended |
413 |
Message too large |
422 |
Validation error, or the From domain is not verified (see message) |
429 |
Daily sending limit or API rate limit (120 requests per minute) reached |
Still stuck? Our team answers every message.
Contact supportLast updated September 30, 2026