API Reference
The complete Sendbound REST API reference.
The Sendbound REST API lets you send transactional email, manage contacts and lists, run campaigns, and configure everything programmatically.
Base URL: https://api.sendbound.com
Authentication
All requests must include your secret API key as a Bearer token:
Authorization: Bearer sk_live_...Use sk_live_ keys for production. You can create and revoke keys from Settings → API Keys.
What's available
| Resource | Description |
|---|---|
| Send Email | Send a transactional email to one or more recipients |
| Batch Send | Send up to 100 different emails in one API call |
| Emails | Retrieve sent emails and check delivery status |
| Contacts | Full CRUD, tags, suppression, CSV import/export |
| Segments | Dynamic and static contact segments |
| Campaigns | Bulk sends to segments with scheduling and A/B testing |
| Templates | Reusable email templates with {{variables}} |
| Domains | Add and verify sending domains |
| API Keys | Create and revoke API keys |
| Webhooks | Receive delivery events in real time |
| MCP Server | Build AI agents that use email |
Response format
Successful responses return HTTP 2xx with a JSON body. Error responses follow this shape:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Human-readable description",
"statusCode": 400
}
}Error codes
| HTTP | Code | Description |
|---|---|---|
| 400 | VALIDATION_ERROR | Missing or invalid request field |
| 401 | MISSING_AUTH | No Authorization header |
| 401 | INVALID_API_KEY | Key not found or revoked |
| 402 | PAYMENT_REQUIRED | Plan limit reached |
| 403 | NOT_ALLOWED | Operation not permitted |
| 404 | NOT_FOUND | Resource does not exist |
| 409 | CONFLICT | Resource already exists |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — back off and retry |
| 5xx | INTERNAL_ERROR | Server error |
Rate limits
The default rate limit is 100 requests / 10 seconds per API key. Bursts above this return 429. Contact support to increase your limit.
Pagination
List endpoints return a nextCursor field. Pass it as cursor in your next request to fetch the next page:
GET /contacts?limit=50&cursor=eyJpZCI6ImNvbl8w...When nextCursor is absent, you have reached the last page.

