Base URLs
Where to send each request, the request format, the body size limits and the identifiers used by the Emelia API.
All requests go over HTTPS, with JSON bodies.
| Use | Base URL | Example |
|---|---|---|
| Emelia API: campaigns, enrichment, replies, blacklist, webhooks, email providers, LinkedIn scraper | https://api.emelia.io | GET https://api.emelia.io/advanced/campaigns |
| Lists and contacts | https://api.emelia.io/lists | POST https://api.emelia.io/lists/list |
| MCP server, for AI assistants | https://mcp.emelia.io/mcp | See MCP server |
The paths in this documentation are complete: /lists/list means https://api.emelia.io/lists/list. There is no version prefix in the paths.
One host, two services
The lists and contacts routes (/lists/...) are served by a separate service behind the same host. You use the same key, but a few rules differ, and each page says so:
| Main API | Lists and contacts (/lists/...) | |
|---|---|---|
| Error body | { "error", "code"?, "params"? } | { "message", "code"? } |
| "Not found" | HTTP 400 | HTTP 404 |
| Body size limit | 30 MB | 5 MB, then 413 |
| Per minute quota | Yes, see Rate limits | Not counted |
Current and legacy campaign routes
Campaigns are served under /advanced/.... This is the current campaign system, the one of the Emelia app: every campaign is multichannel. Use it for all new work, whatever the channels.
The /emails/... and /linkedin/... campaign routes belong to the previous system, where a campaign was either email only or LinkedIn only. They keep working for existing integrations and are documented under Campaigns, Legacy. The blacklist routes also start with /emails/ for historical reasons: they are current and apply to every campaign.
Request format
- Bodies are JSON: send
Content-Type: application/json. File uploads usemultipart/form-dataand say so on their page. - Responses are JSON, except file downloads (CSV).
- Dates are ISO 8601 strings in UTC, for example
2026-10-15T08:00:00.000Z. - Emelia ids (campaigns, lists, contacts, steps, jobs) are MongoDB ObjectIds: 24 lowercase hexadecimal characters, for example
6650f1a2b839d80011c5a0f1. The export jobs of lists are the exception: theirjobIdis a UUID. - A request that runs longer than 120 seconds is cut by the load balancer. Long work (enrichment, exports, extractions) runs as background jobs instead.
- An unknown path answers an HTML 404 page, not JSON. If you get HTML back, check the path and the method.
Test environment
There is no separate test environment: every request acts on your real account. To experiment, create a list and a draft campaign named "Test", and delete them afterwards. A draft campaign never sends anything until you start it.