# Emelia > Emelia is a B2B prospecting platform: multichannel campaigns (email, LinkedIn, WhatsApp), contact lists, Email Finder, Phone Finder, Email Verifier, warmup and a unified inbox. This is the developer documentation of its REST API, its MCP server and its AI tooling. Key facts: - REST API base URL: https://api.emelia.io (lists and contacts are served under https://api.emelia.io/lists, same key) - Authentication: send your 48 character API key in the `Authorization` header, as is (a `Bearer ` prefix is accepted). Create the key at https://v3.emelia.io/settings/api. A key gives access to the whole account. - Rate limit per account and per minute: 30 without a plan, 100 Start, 300 Grow, 1,000 Scale. `/tools` and `/lists` routes are not counted. Over the limit the API answers HTTP 500 (not 429): wait for the next minute. - Errors: `{ "error", "code"?, "params"? }`; "not found" is HTTP 400 on the main API. The lists service answers `{ "message", "code"? }` with real 404, 413 and 422. - Credits: Email Finder 1 (refunded when nothing is found), Phone Finder 50 (refunded when nothing is found), Email Verifier 0.25 (never refunded). - OpenAPI specs: https://docs.emelia.io/openapi/emelia.json - MCP server: https://mcp.emelia.io/mcp (Streamable HTTP, same API key in the `Authorization` header, raw or `Bearer`, or in `X-Api-Key`) - Every page is available as Markdown: append `.md` to its URL. All pages in one file: https://docs.emelia.io/llms-full.txt - Step and version `_id` values of a campaign sequence are MongoDB ObjectIds (24 lowercase hex characters), never UUIDs. The simplest is to omit them: the server generates them. ## Get started - [Introduction](https://docs.emelia.io/docs.md): 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. - [Quickstart](https://docs.emelia.io/docs/quickstart.md): Make your first Emelia API call in two minutes, then create a list and add a contact to it. - [Authentication](https://docs.emelia.io/docs/authentication.md): Create an Emelia API key in Settings, API & Webhooks, and send it in the Authorization header of every request. - [Base URLs](https://docs.emelia.io/docs/base-urls.md): Where to send each request, the request format, the body size limits and the identifiers used by the Emelia API. - [Rate limits & quotas](https://docs.emelia.io/docs/rate-limits.md): How many requests you can send per minute on each plan, what happens over the limit, the size limits of each call, and how to pace a large job. - [Pagination](https://docs.emelia.io/docs/pagination.md): Several pagination styles coexist in the Emelia API. Which route uses which, where pages start at 0 or at 1, and a loop for each. - [Errors](https://docs.emelia.io/docs/errors.md): The shape of an Emelia API error, what each HTTP status means today, the stable error codes, and how to retry safely. ### Credits - [Credits](https://docs.emelia.io/docs/credits.md): What costs credits in the Emelia API, how much, when credits are refunded, and how to follow your consumption by API. - [GET /credits/usage: List credit debits](https://docs.emelia.io/docs/credits/list-credit-debits.md) ## API ### Campaigns - [Campaigns](https://docs.emelia.io/docs/campaigns.md): Create, configure and launch multichannel campaigns by API. Cold email sequences, LinkedIn automation, WhatsApp and manual tasks, conditions, senders, schedule and tracking. #### Build and run - [GET /advanced/campaigns: List campaigns](https://docs.emelia.io/docs/campaigns/list-campaigns.md) - [POST /advanced/campaigns: Create a campaign](https://docs.emelia.io/docs/campaigns/create-campaign.md) - [GET /advanced/campaigns/{campaignId}: Get a campaign](https://docs.emelia.io/docs/campaigns/get-campaign.md) - [PATCH /advanced/campaigns/{campaignId}/steps: Replace the sequence](https://docs.emelia.io/docs/campaigns/replace-sequence.md) - [PATCH /advanced/campaigns/{campaignId}/settings: Update campaign settings](https://docs.emelia.io/docs/campaigns/update-campaign-settings.md) - [PATCH /advanced/campaigns/{campaignId}/identities: Set the sender identities](https://docs.emelia.io/docs/campaigns/set-sender-identities.md) - [PATCH /advanced/campaigns/{campaignId}/recipients: Set the contact lists of a campaign](https://docs.emelia.io/docs/campaigns/set-contact-lists.md) - [POST /advanced/campaigns/{campaignId}/test-email: Send a test email](https://docs.emelia.io/docs/campaigns/send-test-email.md) - [POST /advanced/campaigns/{campaignId}/start: Start a campaign](https://docs.emelia.io/docs/campaigns/start-campaign.md) - [PATCH /advanced/campaigns/{campaignId}/planned-start: Schedule or cancel a planned start](https://docs.emelia.io/docs/campaigns/schedule-planned-start.md) - [POST /advanced/campaigns/{campaignId}/pause: Pause a campaign](https://docs.emelia.io/docs/campaigns/pause-campaign.md) - [POST /advanced/campaigns/{campaignId}/finish: Mark a campaign as finished](https://docs.emelia.io/docs/campaigns/mark-campaign-as-finished.md) - [POST /advanced/campaigns/{campaignId}/reactivate: Reactivate a finished campaign](https://docs.emelia.io/docs/campaigns/reactivate-campaign.md) - [PATCH /advanced/campaigns/{campaignId}/name: Rename a campaign](https://docs.emelia.io/docs/campaigns/rename-campaign.md) - [POST /advanced/campaigns/{campaignId}/duplicate: Duplicate a campaign](https://docs.emelia.io/docs/campaigns/duplicate-campaign.md) - [POST /advanced/campaigns/{campaignId}/archive: Archive a campaign](https://docs.emelia.io/docs/campaigns/archive-campaign.md) - [DELETE /advanced/campaigns/{campaignId}: Delete a campaign](https://docs.emelia.io/docs/campaigns/delete-campaign.md) #### Contacts - [GET /advanced/campaign/contacts: List the contacts of a campaign](https://docs.emelia.io/docs/campaigns/list-contacts-of-campaign.md) - [POST /advanced/campaign/contacts: Add a contact to a campaign](https://docs.emelia.io/docs/campaigns/add-contact-to-campaign.md) - [DELETE /advanced/campaign/contacts: Remove a contact from a campaign](https://docs.emelia.io/docs/campaigns/remove-contact-from-campaign.md) - [PATCH /advanced/contacts: Set a field on a campaign contact](https://docs.emelia.io/docs/campaigns/set-contact-field.md) #### Tracking - [GET /advanced/campaigns/{campaignId}/manual-tasks: List pending manual tasks](https://docs.emelia.io/docs/campaigns/list-pending-manual-tasks.md) - [POST /advanced/campaigns/{campaignId}/manual-tasks/status: Complete a manual task](https://docs.emelia.io/docs/campaigns/complete-manual-task.md) - [GET /advanced/campaigns/{campaignId}/progress: Get per step progress](https://docs.emelia.io/docs/campaigns/get-per-step-progress.md) - [GET /advanced/campaigns/{campaignId}/progress/contacts: List the contacts of a step](https://docs.emelia.io/docs/campaigns/list-contacts-of-step.md) - [GET /advanced/campaigns/{campaignId}/export: Export campaign data as CSV](https://docs.emelia.io/docs/campaigns/export-as-csv.md) - [GET /stats/advanced: Get campaign statistics](https://docs.emelia.io/docs/campaigns/get-campaign-statistics.md) #### Uploads - [POST /advanced/attachments: Upload message attachments](https://docs.emelia.io/docs/campaigns/upload-message-attachments.md) - [POST /advanced/linkedin/audio: Upload a LinkedIn voice note](https://docs.emelia.io/docs/campaigns/upload-linkedin-voice-note.md) #### Legacy campaigns - [Legacy campaigns](https://docs.emelia.io/docs/campaigns/legacy.md): The routes of the previous Emelia campaign system, email only or LinkedIn only. Deprecated, still working for existing integrations. ##### Email campaigns - [Email campaigns](https://docs.emelia.io/docs/campaigns/legacy/email.md): The routes of the previous email only campaigns. Deprecated, still working for existing integrations. - [GET /emails/campaign/contacts: List email campaign contacts (paginated)](https://docs.emelia.io/docs/campaigns/legacy/email/list-campaign-contacts.md) - [POST /emails/campaign/contacts: Add a contact to an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/add-contact.md) - [DELETE /emails/campaign/contacts: Remove a contact from an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/remove-contact.md) - [POST /emails/lists/contacts: Add a contact to an email list](https://docs.emelia.io/docs/campaigns/legacy/email/add-contact-to-list.md) - [GET /emails/campaigns: List email campaigns](https://docs.emelia.io/docs/campaigns/legacy/email/list-campaigns.md) - [POST /emails/campaigns: Create an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/create-campaign.md) - [GET /emails/campaigns/{campaignId}: Get email campaign details](https://docs.emelia.io/docs/campaigns/legacy/email/get-campaign.md) - [PATCH /emails/campaigns/{campaignId}/settings/global: Update email campaign schedule (global settings)](https://docs.emelia.io/docs/campaigns/legacy/email/update-schedule.md) - [PATCH /emails/campaigns/{campaignId}/settings/providers: Update email campaign sending providers](https://docs.emelia.io/docs/campaigns/legacy/email/update-mailboxes.md) - [PATCH /emails/campaigns/{campaignId}/name: Rename an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/rename-campaign.md) - [PATCH /emails/campaigns/{campaignId}/steps: Replace email campaign steps](https://docs.emelia.io/docs/campaigns/legacy/email/replace-steps.md) - [POST /emails/campaigns/{campaignId}/start: Start an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/start-campaign.md) - [POST /emails/campaigns/{campaignId}/pause: Pause an email campaign](https://docs.emelia.io/docs/campaigns/legacy/email/pause-campaign.md) - [PATCH /emails/contacts: Set a custom field on an email contact](https://docs.emelia.io/docs/campaigns/legacy/email/set-contact-field.md) - [GET /emails/campaigns/{campaignId}/activities: Get email campaign activities](https://docs.emelia.io/docs/campaigns/legacy/email/get-activities.md) - [POST /emails/test: Send a test email](https://docs.emelia.io/docs/campaigns/legacy/email/send-test-email.md) - [GET /stats: Get email campaign statistics](https://docs.emelia.io/docs/campaigns/legacy/email/get-statistics.md) ##### LinkedIn campaigns - [LinkedIn campaigns](https://docs.emelia.io/docs/campaigns/legacy/linkedin.md): The routes of the previous LinkedIn only campaigns. Deprecated, still working for existing integrations. - [GET /linkedin/campaign/contacts: List LinkedIn campaign contacts (paginated)](https://docs.emelia.io/docs/campaigns/legacy/linkedin/list-campaign-contacts.md) - [POST /linkedin/campaign/contacts: Add a contact to a LinkedIn campaign](https://docs.emelia.io/docs/campaigns/legacy/linkedin/add-contact.md) - [DELETE /linkedin/campaign/contacts: Remove a contact from a LinkedIn campaign](https://docs.emelia.io/docs/campaigns/legacy/linkedin/remove-contact.md) - [GET /linkedin/campaigns: List LinkedIn campaigns](https://docs.emelia.io/docs/campaigns/legacy/linkedin/list-campaigns.md) - [POST /linkedin/campaigns: Create a LinkedIn campaign](https://docs.emelia.io/docs/campaigns/legacy/linkedin/create-campaign.md) - [PATCH /linkedin/campaigns/{campaignId}/settings/global: Update LinkedIn campaign schedule (global settings)](https://docs.emelia.io/docs/campaigns/legacy/linkedin/update-schedule.md) - [PATCH /linkedin/campaigns/{campaignId}/name: Rename a LinkedIn campaign](https://docs.emelia.io/docs/campaigns/legacy/linkedin/rename-campaign.md) - [PATCH /linkedin/campaigns/{campaignId}/steps: Replace LinkedIn campaign steps](https://docs.emelia.io/docs/campaigns/legacy/linkedin/replace-steps.md) - [GET /linkedin/campaigns/{campaignId}/activities: Get LinkedIn campaign activities](https://docs.emelia.io/docs/campaigns/legacy/linkedin/get-activities.md) - [GET /stats/linkedin: Get LinkedIn campaign statistics](https://docs.emelia.io/docs/campaigns/legacy/linkedin/get-statistics.md) ### Lists & contacts - [Lists & contacts](https://docs.emelia.io/docs/lists.md): Create contact lists, add and update contacts one by one or 100 at a time, declare custom variables, look a contact up, export lists, and feed running campaigns. #### Lists - [GET /lists/list: List your lists](https://docs.emelia.io/docs/lists/list-your-lists.md) - [POST /lists/list: Create a list](https://docs.emelia.io/docs/lists/create-list.md) - [GET /lists/list/{listId}: Get a list](https://docs.emelia.io/docs/lists/get-list.md) - [PATCH /lists/list/{listId}: Rename a list](https://docs.emelia.io/docs/lists/rename-list.md) - [DELETE /lists/list/{listId}: Delete a list](https://docs.emelia.io/docs/lists/delete-list.md) - [POST /lists/list/export: Export lists as CSV](https://docs.emelia.io/docs/lists/export-lists-as-csv.md) - [GET /lists/list/campaign-usage: Find the campaigns using lists](https://docs.emelia.io/docs/lists/find-campaigns-of-lists.md) #### Contacts - [GET /lists/list/{listId}/rows: List or find the contacts of a list](https://docs.emelia.io/docs/lists/list-or-find-contacts.md) - [DELETE /lists/list/{listId}/rows/{leadId}: Delete a contact](https://docs.emelia.io/docs/lists/delete-contact.md) - [POST /lists/list/{listId}/contacts: Add a contact to a list (add or update)](https://docs.emelia.io/docs/lists/add-contact.md) - [POST /lists/list/{listId}/contacts/batch: Add up to 100 contacts to a list](https://docs.emelia.io/docs/lists/add-contacts-in-bulk.md) - [PATCH /lists/contacts/{contactId}: Update a contact](https://docs.emelia.io/docs/lists/update-contact.md) #### Custom variables - [POST /lists/custom-variable: Create a custom variable](https://docs.emelia.io/docs/lists/create-custom-variable.md) - [GET /lists/custom-variable/check: Check whether a custom variable exists](https://docs.emelia.io/docs/lists/check-custom-variable.md) #### Exports - [GET /lists/list/export/jobs/{jobId}: Get the status of an export](https://docs.emelia.io/docs/lists/get-status-of-export.md) - [GET /lists/list/export/jobs/{jobId}/download: Download a finished export](https://docs.emelia.io/docs/lists/download-finished-export.md) ### Enrichment - [Enrichment](https://docs.emelia.io/docs/enrichment.md): Find professional emails, find phone numbers and verify addresses with the Emelia enrichment API. Every call starts a job that you poll until it is done. #### Email Finder - [Email Finder](https://docs.emelia.io/docs/enrichment/email-finder.md): Find the professional email address of a person from a full name, a company and a country, with the Emelia Email Finder API. 1 credit, refunded when nothing is found. - [POST /tools/find/email: Find the email of a person](https://docs.emelia.io/docs/enrichment/email-finder/find-email.md) - [GET /tools/find/email/{jobId}: Get an email search result](https://docs.emelia.io/docs/enrichment/email-finder/get-result.md) - [GET /tools/find/email: List email searches](https://docs.emelia.io/docs/enrichment/email-finder/list-past-searches.md) #### Phone Finder - [Phone Finder](https://docs.emelia.io/docs/enrichment/phone-finder.md): Find the phone number of a person from a LinkedIn profile URL with the Emelia Phone Finder API. 50 credits, refunded when no number is found. - [POST /tools/find/phone: Find the phone number of a person](https://docs.emelia.io/docs/enrichment/phone-finder/find-phone-number.md) - [GET /tools/find/phone/{jobId}: Get a phone search result](https://docs.emelia.io/docs/enrichment/phone-finder/get-result.md) - [GET /tools/find/phone: List phone searches](https://docs.emelia.io/docs/enrichment/phone-finder/list-past-searches.md) #### Email Verifier - [Email Verifier](https://docs.emelia.io/docs/enrichment/email-verifier.md): Verify that an email address can receive mail before you send, with the Emelia Email Verification API. 0.25 credit per verification. - [POST /tools/verify/email: Verify an email address](https://docs.emelia.io/docs/enrichment/email-verifier/verify-email.md) - [GET /tools/verify/email/{jobId}: Get an email verification result](https://docs.emelia.io/docs/enrichment/email-verifier/get-result.md) - [GET /tools/verify/email: List email verifications](https://docs.emelia.io/docs/enrichment/email-verifier/list-past-verifications.md) ### Replies - [Replies](https://docs.emelia.io/docs/replies.md): Get the replies of your Emelia campaigns as they come, read them in batches or as a CSV, see what was sent, and answer from the right mailbox. - [GET /advanced/campaigns/{campaignId}/activities: List campaign activities](https://docs.emelia.io/docs/replies/list-campaign-activities.md) - [GET /advanced/campaigns/{campaignId}/activities/{activityId}/message: Get the message of a send activity](https://docs.emelia.io/docs/replies/get-sent-message.md) - [POST /emails/reply: Send a reply from a connected mailbox](https://docs.emelia.io/docs/replies/send-reply.md) ### Blacklist - [Blacklist](https://docs.emelia.io/docs/blacklist.md): Add an email address, a whole domain or a LinkedIn profile to the Emelia blacklist by API, so that no campaign of your account ever contacts them. - [POST /emails/blacklists/contact: Add an email or domain to the account blacklist](https://docs.emelia.io/docs/blacklist/blacklist-email-or-domain.md) - [DELETE /emails/blacklists/contact: Remove an email or domain from the account blacklist](https://docs.emelia.io/docs/blacklist/remove-email-or-domain.md) - [GET /emails/blacklists: Get the account blacklists](https://docs.emelia.io/docs/blacklist/get-blacklists.md) - [POST /emails/blacklists/linkedin: Add a LinkedIn profile to the blacklist](https://docs.emelia.io/docs/blacklist/blacklist-linkedin-profile.md) - [DELETE /emails/blacklists/linkedin: Remove a LinkedIn profile from the blacklist](https://docs.emelia.io/docs/blacklist/remove-linkedin-profile.md) ### Webhooks - [Webhooks](https://docs.emelia.io/docs/webhooks.md): Receive a JSON POST each time something happens in your Emelia campaigns: email sent, opened, clicked, replied, bounced, LinkedIn invitation accepted, WhatsApp reply, campaign finished. #### Routes - [GET /webhook: List webhooks](https://docs.emelia.io/docs/webhooks/list-webhooks.md) #### Events - [Webhook event advancedCampaignActivity: Activity on an advanced (multichannel) campaign](https://docs.emelia.io/docs/webhooks/campaign-activity.md) - [Webhook event campaignEnding: Campaign finished](https://docs.emelia.io/docs/webhooks/campaign-finished.md) - [Webhook event emailCampaignActivity: Activity on a legacy email campaign](https://docs.emelia.io/docs/webhooks/legacy-email-activity.md) - [Webhook event linkedinCampaignActivity: Activity on a legacy LinkedIn campaign](https://docs.emelia.io/docs/webhooks/legacy-linkedin-activity.md) ### Email providers - [Email providers](https://docs.emelia.io/docs/email-providers.md): List and connect the sending mailboxes of your Emelia account, change their sender name, enable their warmup and run a deliverability diagnosis by API. #### Mailboxes - [GET /email-providers: List email providers](https://docs.emelia.io/docs/email-providers/list-email-providers.md) - [POST /email-providers: Connect an SMTP/IMAP mailbox](https://docs.emelia.io/docs/email-providers/connect-mailbox.md) - [PATCH /email-providers/{providerId}: Update an SMTP/IMAP mailbox](https://docs.emelia.io/docs/email-providers/update-mailbox.md) - [PATCH /email-providers/{providerId}/sender-name: Change the sender name](https://docs.emelia.io/docs/email-providers/change-sender-name.md) - [DELETE /email-providers/{providerId}: Delete a mailbox](https://docs.emelia.io/docs/email-providers/delete-mailbox.md) #### Warmup - [GET /email-providers/warmup: List warmups](https://docs.emelia.io/docs/email-providers/list-warmups.md) - [POST /email-providers/warmup/enable: Enable the warmup of a mailbox](https://docs.emelia.io/docs/email-providers/enable-warmup.md) - [POST /email-providers/warmup/check-health: Run a deliverability diagnosis](https://docs.emelia.io/docs/email-providers/run-deliverability-check.md) ### LinkedIn scraper - [LinkedIn scraper](https://docs.emelia.io/docs/linkedin-scraper.md): Extract the people or companies of a LinkedIn or Sales Navigator search with the Emelia LinkedIn Scraper API, find their emails, download the CSV, and get them as an Emelia list. #### Extractions - [POST /linkedin-scrappers: Create a LinkedIn scraper (start an extraction)](https://docs.emelia.io/docs/linkedin-scraper/start-extraction.md) - [GET /linkedin-scrappers: List your LinkedIn scrapers](https://docs.emelia.io/docs/linkedin-scraper/list-scrapers.md) - [GET /linkedin-scrappers/{id}: Get one LinkedIn scraper (poll its progress)](https://docs.emelia.io/docs/linkedin-scraper/get-scraper.md) - [GET /linkedin-scrappers/{id}/download: Download the contacts of a scraper (CSV)](https://docs.emelia.io/docs/linkedin-scraper/download-csv.md) - [POST /linkedin-scrappers/{id}/enrich: Find the emails of a finished scraper](https://docs.emelia.io/docs/linkedin-scraper/find-emails.md) - [POST /linkedin-scrappers/{id}/filter: Remove contacts already extracted by your other scrapers](https://docs.emelia.io/docs/linkedin-scraper/remove-known-contacts.md) - [PUT /linkedin-scrappers/{id}/pause: Pause a segmented extraction](https://docs.emelia.io/docs/linkedin-scraper/pause-extraction.md) - [PUT /linkedin-scrappers/{id}/resume: Resume a paused, scheduled or failed scraper](https://docs.emelia.io/docs/linkedin-scraper/resume-extraction.md) - [POST /linkedin-scrappers/{id}/split: Detach the part already extracted from a segmented extraction](https://docs.emelia.io/docs/linkedin-scraper/split-extraction.md) - [PUT /linkedin-scrappers/{id}/rename: Rename a LinkedIn scraper](https://docs.emelia.io/docs/linkedin-scraper/rename-scraper.md) - [DELETE /linkedin-scrappers/{id}: Delete a LinkedIn scraper](https://docs.emelia.io/docs/linkedin-scraper/delete-scraper.md) #### Webhooks - [POST /linkedin-scrappers/{id}/webhook: Register a webhook on a scraper](https://docs.emelia.io/docs/linkedin-scraper/add-webhook.md) - [DELETE /linkedin-scrappers/{id}/webhook: Remove a webhook from a scraper](https://docs.emelia.io/docs/linkedin-scraper/remove-webhook.md) #### Scraping accounts - [POST /linkedin-scrappers/authes: Connect a LinkedIn account for scraping (session cookies)](https://docs.emelia.io/docs/linkedin-scraper/connect-account.md) - [PUT /linkedin-scrappers/authes/{id}: Refresh the cookies of a connected scraping account](https://docs.emelia.io/docs/linkedin-scraper/refresh-account.md) ## Resources ### AI & integrations - [AI & integrations](https://docs.emelia.io/docs/ai.md): Use Emelia from Claude, Cursor or VS Code, give your assistant the whole API in one file, and build faster with ready-made prompts. - [MCP server](https://docs.emelia.io/docs/ai/mcp.md): Connect Claude Code, Claude Desktop, Cursor, VS Code or any MCP client to your Emelia account. 26 tools for campaigns, lists, contacts, enrichment and deliverability. - [Claude Code plugin](https://docs.emelia.io/docs/ai/claude-code-plugin.md): claude-outreach runs your whole outbound from Claude Code, from the ideal customer profile to the replies, with Emelia as the engine. Install, keys, commands and updates. - [Claude skill](https://docs.emelia.io/docs/ai/claude-skill.md): Download the emelia-api skill, one SKILL.md that teaches Claude the Emelia API, its rules and its traps, so the code it writes works the first time. - [Build with AI](https://docs.emelia.io/docs/ai/build-with-ai.md): Prompts ready to paste into Claude, ChatGPT or Cursor to build the most common Emelia integrations, with the documentation they need. - [Docs for AI agents](https://docs.emelia.io/docs/ai/llms.md): llms.txt, llms-full.txt, a Markdown version of every page and the OpenAPI specs. Everything an agent needs to read these docs. - [All endpoints](https://docs.emelia.io/docs/all-endpoints.md): Every route of the Emelia API on one page, grouped by topic, with a link to its reference page and playground, and the OpenAPI specs to download. - [Changelog](https://docs.emelia.io/docs/changelog.md): Changes to the Emelia API, the MCP server and this documentation. 118 documented routes and webhook events in total.