Skip to main content
Developers · Standard plan and up

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 · GET /api/v1/me
curl -H "Authorization: Bearer ce_live_..." \
  https://api.customereagle.com/api/v1/me
Confirm the key works and see which workspace and scopes it carries.
01

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.

02

Authenticate every request

Base URL https://api.customereagle.com/api/v1. Send your key as a bearer token in the Authorization header.

03

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.

EndpointScopeNotes
GET /meAny keyConfirms the key is live and returns its workspace and scopes.
GET /conversationsREADFilter by status or channel. Cursor-paginated, newest first. Also: GET /conversations/:id.
GET /conversations/:id/messagesREADOldest first. Internal notes are excluded — only customer, agent and AI messages.
POST /conversations/:id/messagesWRITEReplies to the customer on the conversation's own channel, exactly like a reply from the inbox. A closed conversation reopens.
POST /conversations/:id/notesWRITEAdds an internal note and fires a message.created webhook.
PATCH /conversations/:idWRITEChange status or priority. Also: create a conversation, assign it, add or remove tags.
GET /messagesREADWorkspace-wide message feed, newest first. Internal notes are excluded.
POST /contactsWRITECreate or update a contact. Also: list, get and PATCH /contacts/:id.
DELETE /contacts/:idERASEGDPR erasure. Irreversible, so it needs the separate Erase scope — Write never implies it.
PATCH /articles/:idWRITEUpdate or publish a help-centre article. Also: list, get and create drafts.
POST /tasksWRITECreate a task. Also: list, update, complete, delete and comment.
POST /webhooksWRITESubscribe to events from code. Also: list, unsubscribe, delivery log and redelivery.
GET /reports/:id/runREADRun a saved report and page through its rows. Also: GET /reports.
POST /eventsWRITERecord a journey event for a contact; journeys enrol, wait or exit on it.
GET /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:

JavaScript · POST …/notes
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.

Per source IP300 / min

A coarse backstop, checked before your key is even looked up.

Per API key300 / min

The advertised ceiling. Returned on every response via X-RateLimit-* headers.

Per API key25,000 / day

Bounds sustained cost — every call opens a database transaction.

Per workspace600 / min

Aggregated across every key in the workspace.

Per workspace100,000 / day

The aggregate daily ceiling across every key in the workspace.

Writes, per key120 / min

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.received

Formats

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.

Raw JSON · HMAC-signedDiscordMicrosoft TeamsGoogle Chat

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.

Node.js · X-CE-Signature
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),
  );
}
Eagle AI

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.