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.

UseBase URLExample
Emelia API: campaigns, enrichment, replies, blacklist, webhooks, email providers, LinkedIn scraperhttps://api.emelia.ioGET https://api.emelia.io/advanced/campaigns
Lists and contactshttps://api.emelia.io/listsPOST https://api.emelia.io/lists/list
MCP server, for AI assistantshttps://mcp.emelia.io/mcpSee 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 APILists and contacts (/lists/...)
Error body{ "error", "code"?, "params"? }{ "message", "code"? }
"Not found"HTTP 400HTTP 404
Body size limit30 MB5 MB, then 413
Per minute quotaYes, see Rate limitsNot 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 use multipart/form-data and 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: their jobId is 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.

On this page