Skip to content

API Overview

Base URL

All API send requests are made to:

https://api.emitlo.com/api/v1

Dashboard management endpoints (domains, credentials, webhooks, stats) are available at:

https://app.emitlo.com/api/v1

Authentication

Emitlo uses Bearer token authentication. Include your credential secret key in every request:

Authorization: Bearer YOUR_API_KEY

Permissions

Each credential has a set of permissions that control what it can do:

PermissionDescription
sendSend emails via the API
statsRead message status and statistics
adminManage domains, credentials, suppressions, and webhooks

A credential can have multiple permissions. For example, a backend service typically needs send + stats.


Response format

All responses use JSON with a consistent envelope:

{
"status": "success",
"data": { ... }
}

On error:

{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "The from_email field is required.",
"details": {
"from_email": ["The from_email field is required."]
}
}
}

HTTP status codes

StatusMeaning
200 OKRequest succeeded
201 CreatedResource created
202 AcceptedMessage queued for delivery
401 UnauthorizedInvalid or missing API key
403 ForbiddenInsufficient permissions
404 Not FoundResource not found
409 ConflictResource already exists
422 Unprocessable EntityValidation error
429 Too Many RequestsRate limit exceeded
500 Internal Server ErrorServer error

Error codes

CodeHTTPDescription
UNAUTHENTICATED401Invalid or missing credential
FORBIDDEN403Insufficient permissions for this action
NOT_FOUND404Resource not found
CONFLICT409Resource already exists (e.g. duplicate domain)
VALIDATION_ERROR422Request body failed validation
RATE_LIMITED429Send rate limit exceeded
ATTACHMENT_TOO_LARGE422Attachment exceeds plan size limit
MESSAGE_TOO_LARGE422Total message size exceeds platform limit
INTERNAL_ERROR500Unexpected server error

See Error Codes Reference for full details and handling examples.


Rate limiting

Requests are rate-limited per organization. When exceeded, the API returns 429 with a Retry-After header indicating when you can retry.

See Rate Limits for details.