Quickstart
Make your first Emelia API call in two minutes, then create a list and add a contact to it.
By the end of this page you will have an API key, a working request, a list, and a contact in that list.
Get your API key
Open Settings, API & Webhooks in the Emelia app and create a key.
Store it in an environment variable rather than in your code:
export EMELIA_API_KEY="your_48_character_api_key"Check that the key works
List your campaigns. This call changes nothing.
GET/advanced/campaignscurl https://api.emelia.io/advanced/campaigns \
-H "Authorization: $EMELIA_API_KEY"A 200 with a campaigns array means you are in. A 401 means the key is wrong or disabled: see Authentication.
Create a list
Contacts live in lists. Create one:
POST/lists/listcurl -X POST https://api.emelia.io/lists/list \
-H "Authorization: $EMELIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Q4 SaaS founders"}'The response is a 201:
{ "success": true, "listId": "66f1c0ffee5a7d3b2c4e8a10", "name": "Q4 SaaS founders" }Add a contact
Send a flat object: one key per field. Emelia recognises the standard fields (firstName, email, companyName...) and turns any other key into a custom variable you can use in your messages.
/lists/list/{listId}/contactscurl -X POST https://api.emelia.io/lists/list/66f1c0ffee5a7d3b2c4e8a10/contacts \
-H "Authorization: $EMELIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Claire",
"lastName": "Fontaine",
"email": "claire.fontaine@nexora.io",
"companyName": "Nexora",
"icebreaker": "your move to Postgres 16 last month"
}'{
"success": true,
"leadId": "66f2a1b2c3d4e5f6a7b8c9d0",
"companyId": "66f2a1b2c3d4e5f6a7b8c9e0",
"duplicate": false,
"updated": false,
"createdCustomVariables": [{ "technicalName": "icebreaker", "displayName": "icebreaker", "schema": "lead" }]
}Send the same contact again and nothing is created: the response carries the existing leadId with duplicate: true. The match is on the exact email, then on the exact LinkedIn URL. A contact with neither is created again on every call, so give each contact an email or a LinkedIn URL before you retry.
Attach the list to a campaign
In the app, open a campaign and select the list as its recipients, or do it by API:
PATCH/advanced/campaigns/{campaignId}/recipientsFrom then on, every contact you add to the list enters the campaign on its own, even while it runs.
Next steps
Introduction
Automate your prospecting with the Emelia API. Campaigns, contact lists, Email Finder, Phone Finder, Email Verifier, replies and webhooks, from your code or your AI assistant.
Authentication
Create an Emelia API key in Settings, API & Webhooks, and send it in the Authorization header of every request.