API Reference
Base URL
https://api.mailtactic.com/v1
All requests must be made over HTTPS. HTTP requests are rejected.
Authentication
Pass your API key as a Bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
API keys are created in your dashboard under Settings → API Keys. Keys can be scoped to specific permissions (send, read logs, manage domains).
Endpoints overview
Messages
| Method | Endpoint | Description |
|---|---|---|
POST | /v1/messages | Send a message |
GET | /v1/messages/{id} | Get message status |
GET | /v1/messages | List messages (paginated) |
Templates
| Method | Endpoint | Description |
|---|---|---|
POST | /v1/templates | Create a template |
GET | /v1/templates/{id} | Get a template |
PUT | /v1/templates/{id} | Update a template |
DELETE | /v1/templates/{id} | Delete a template |
Domains
| Method | Endpoint | Description |
|---|---|---|
POST | /v1/domains | Add a sending domain |
GET | /v1/domains/{id}/verify | Check DNS verification status |
DELETE | /v1/domains/{id} | Remove a domain |
Suppressions
| Method | Endpoint | Description |
|---|---|---|
POST | /v1/suppressions | Add a suppressed address |
DELETE | /v1/suppressions/{email} | Remove a suppression |
Request format
All request bodies are JSON. Set Content-Type: application/json.
Response format
All responses are JSON. Successful responses include the resource object. Error responses follow this shape:
{
"error": {
"code": "invalid_recipient",
"message": "The 'to' address is not a valid email address.",
"request_id": "req_01abc..."
}
}
HTTP status codes
| Code | Meaning |
|---|---|
200 | Success |
201 | Created |
400 | Bad request — check your payload |
401 | Unauthorized — invalid or missing API key |
403 | Forbidden — key lacks required permission |
404 | Not found |
422 | Unprocessable — domain not verified, suppressed recipient, etc. |
429 | Rate limit exceeded — retry after the time in Retry-After header |
500 | Internal server error |
Rate limits
Rate limit headers are returned on every response:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1713960000
When you exceed the limit, a 429 response is returned with a Retry-After header indicating when you can retry.
What’s next
- SDKs — use a typed wrapper instead of raw HTTP
- Getting started — your first email in 5 minutes