Authentication
Create an Emelia API key in Settings, API & Webhooks, and send it in the Authorization header of every request.
Every request to the Emelia API carries your API key in the Authorization header. There is no OAuth flow and no token to refresh.
Create a key
- Open the Emelia app and go to Settings, API & Webhooks (v3.emelia.io/settings/api).
- Click Create new key.
- Copy the key and store it as a secret, for example in an
EMELIA_API_KEYenvironment variable.
A key is exactly 48 letters and digits. You can create several keys, and disable or delete one at any time from the same page.
A key opens the whole account
There are no scopes: a key can read and change your campaigns, lists and contacts, spend your credits and act on every part of your account. Protect it like a password, and give one key to each integration.
Send the key
Put the key, as is, in the Authorization header:
/advanced/campaigns
curl https://api.emelia.io/advanced/campaigns \
-H "Authorization: $EMELIA_API_KEY"A Bearer prefix is accepted too (Authorization: Bearer <key>), which helps with HTTP clients that add it on their own.
The same key works for the whole host, including the lists and contacts routes under https://api.emelia.io/lists, and for the MCP server.
When the key is refused
The API answers 401:
{ "error": "Authentication required" }The lists and contacts routes (/lists/...) add a code: { "error": "Authentication required", "code": "AUTH_REQUIRED" }.
Check, in this order:
- The variable is empty in the process that sends the request.
echo ${#EMELIA_API_KEY}prints its length (48), without showing the key. - The key has extra characters: a space, a line break, quotes. A value that is not exactly 48 characters long is never read as an API key.
- The key was disabled or deleted in Settings, API & Webhooks. A disabled key gets the same
401as an unknown one. - It is another product's key, or an Emelia Inbox API key (
mk_...): it gets a plain401here.
Keep it safe
- Always send the key in the
Authorizationheader. Never put it in a URL, a query string or front end code. - Call Emelia from your server, never from a browser or a mobile app.
- One key per integration (Make, n8n, your back end, an AI agent): if one leaks, you disable it without breaking the others.
- If a key leaked, delete it in Settings, API & Webhooks, then create a new one and update your integrations.