API
The Epostix API sends email, manages domains and contacts, runs broadcasts, and reports on what happened to each message. It is JSON over HTTPS with one bearer token.
Base URL
https://api.epostix.com/v1
Every path is served under /v1. A request to a path without that prefix returns
not_found, so if a first call comes back 404 that is the first thing
to check.
A first request
curl https://api.epostix.com/v1/emails \
-H "Authorization: Bearer $EPOSTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@mail.yourdomain.com",
"to": ["you@yourdomain.com"],
"subject": "It works",
"html": "<p>Sent from Epostix.</p>"
}'
The response is the accepted message, including the id you use to look it up later.
Acceptance does not confirm delivery. Use message events
or webhooks to follow the result.
The sender must use a verified domain, including in test mode. Send to a sandbox address to simulate the outcome without delivering mail or consuming send quota. For a library-based integration, start with an official SDK.
Authentication
One header, on every request:
Authorization: Bearer tix_live_...
Keys carry permission scopes, may be restricted to particular domains, and always expire. See Authentication for what each scope grants, and API keys for creating them in the dashboard.
Every response
Success returns the object you asked for. Failure returns the same envelope every time:
{
"status": 422,
"type": "invalid_schedule",
"message": "scheduled_at must be within 72 hours",
"request_id": "req_01J8K2P...",
"doc_url": "https://docs.epostix.com/errors/invalid_schedule"
}
Branch on type, never on message. The full catalogue is at Errors, and
doc_url links straight to the page for whatever you just hit.
Lists
List endpoints are cursor paginated. Pass limit and either starting_after or
ending_before, then read has_more and next_cursor off the response.
{
"data": [],
"has_more": true,
"next_cursor": "b9c3..."
}
Never compute the next cursor yourself. Pass back the one you were given.
Where to go next
| If you want to | Read |
|---|---|
| Send without touching production | Test mode |
| Make retries safe | Idempotency |
| Understand a failure | Errors |
| Know how hard you may push | Rate limits |
| React to deliveries and bounces | Webhooks |
| Send from your own domain | Verify a sending domain |
| Know what we promise not to break | Versioning |