Build on CustomerEagle.
A REST API and webhooks for your workspace — read and update conversations, reply to customers, manage contacts, help-centre articles and tasks, run saved reports and subscribe to events. Built for Zapier, Make, n8n or your own backend. API keys are available from the Standard plan up.
curl -H "Authorization: Bearer ce_live_..." \
https://api.customereagle.com/api/v1/me Create an API key
In Dashboard → Settings → API Keys, create a key and choose its scopes: Usage, Read, Write or Erase. Read and Write keys also pick which products they reach (Support, Sales, Marketing, Restaurant). Available from the Standard plan up — Free workspaces can't create keys. The raw key is shown once — store it like a password.
Authenticate every request
Base URL https://api.customereagle.com/api/v1. Send your key as a bearer token in the Authorization header.
Make your first call
Confirm the key works and see which workspace and scopes it carries.
01 · Endpoints
Conversations, contacts, articles, tasks and more.
Conversations, replies, contacts, help-centre articles, tasks, webhooks, saved reports and journey events — plus lookups for members, inboxes, collections, custom fields and companies, Restaurant endpoints for reservations and the waitlist, and an MCP server for AI agents. A reply sent through the API reaches the customer on the conversation's own channel, exactly like a reply from the inbox. The table shows the main calls; the OpenAPI document lists every one.
/meAny keyConfirms the key is live and returns its workspace and scopes./conversationsREADFilter by status or channel. Cursor-paginated, newest first. Also: GET /conversations/:id./conversations/:id/messagesREADOldest first. Internal notes are excluded — only customer, agent and AI messages./conversations/:id/messagesWRITEReplies to the customer on the conversation's own channel, exactly like a reply from the inbox. A closed conversation reopens./conversations/:id/notesWRITEAdds an internal note and fires a message.created webhook./conversations/:idWRITEChange status or priority. Also: create a conversation, assign it, add or remove tags./messagesREADWorkspace-wide message feed, newest first. Internal notes are excluded./contactsWRITECreate or update a contact. Also: list, get and PATCH /contacts/:id./contacts/:idERASEGDPR erasure. Irreversible, so it needs the separate Erase scope — Write never implies it./articles/:idWRITEUpdate or publish a help-centre article. Also: list, get and create drafts./tasksWRITECreate a task. Also: list, update, complete, delete and comment./webhooksWRITESubscribe to events from code. Also: list, unsubscribe, delivery log and redelivery./reports/:id/runREADRun a saved report and page through its rows. Also: GET /reports./eventsWRITERecord a journey event for a contact; journeys enrol, wait or exit on it./openapi.jsonNo keyThe full OpenAPI 3.1 reference for every endpoint, also as openapi.yaml.Internal notes never appear in the message feed above — they stay agent-only, by design. Base URL: https://api.customereagle.com/api/v1
02 · Writing data
Scopes are enforced per key.
Scopes are enforced per key — a READ-only key gets a 403 on this call. The same note, created from JavaScript:
await fetch( "https://api.customereagle.com/api/v1/conversations/CONVO_ID/notes", { method: "POST", headers: { Authorization: "Bearer ce_live_...", "Content-Type": "application/json", }, body: JSON.stringify({ content: "Refund approved, processing now." }), }, );
03 · Rate limits
Every layer fails closed.
Every layer fails closed if the limiter itself is unavailable, so an outage blocks calls rather than letting them through unmetered.
A coarse backstop, checked before your key is even looked up.
The advertised ceiling. Returned on every response via X-RateLimit-* headers.
Bounds sustained cost — every call opens a database transaction.
Aggregated across every key in the workspace.
The aggregate daily ceiling across every key in the workspace.
Applies to every write call (POST, PATCH, DELETE).
A 429 response adds a Retry-After header — back off and retry after that many seconds. Workspaces are capped at 25 API keys, so the per-key limit can't be multiplied by minting more.
04 · Webhooks
Up to 10 endpoints, each with its own secret.
Configure endpoints in Dashboard → Settings → Webhooks — up to 10 per workspace, each with its own secret and list of subscribed events. A failed delivery is retried up to 8 times with exponential backoff (about 10 minutes in total); an endpoint that keeps failing for 7 days is paused and your admins are notified.
Events
Every payload shares the same envelope: { event, timestamp, data }
conversation.createdmessage.createdconversation.assignedconversation.escalatedresolution.createdcsat.receivedFormats
Deliver the raw JSON payload (HMAC-signed), or a ready-made notification for Discord, Microsoft Teams, or Google Chat — pick the format when you add the endpoint.
Verifying signatures
JSON endpoints carry an X-CE-Signature header — the hex HMAC-SHA256 of the raw request body, keyed with the endpoint's secret. Recompute it and compare before trusting the payload.
const crypto = require("node:crypto"); function verify(rawBody, header, secret) { const expected = crypto .createHmac("sha256", secret) .update(rawBody) .digest("hex"); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(header), ); }
Start building.
Start a free trial, generate an API key, and make your first call.
API keys from Standard · up to 25 keys and 10 webhook endpoints per workspace.