Bouw op CustomerEagle.
Een REST API en webhooks voor je supportdata — lees gesprekken en berichten, voeg interne notities toe en abonneer je op events. Gemaakt voor Zapier, Make, n8n of je eigen backend. API-toegang zit op betaalde plannen (Growth en hoger).
Maak een API-key aan
Maak in Dashboard → Instellingen → API Keys een key aan met READ- of WRITE-scope (of beide). Vereist een betaald plan (Growth en hoger) — met Free of Starter kun je geen keys aanmaken. De ruwe key wordt één keer getoond — bewaar ‘m als een wachtwoord.
Authenticeer elke aanvraag
Base URL https://api.customereagle.com/api/v1. Stuur je key mee als bearer token in de Authorization-header.
Doe je eerste aanroep
Controleer dat de key werkt en zie welke workspace en scopes eraan hangen.
curl -H "Authorization: Bearer ce_live_..." \
https://api.customereagle.com/api/v1/meEndpoints
Een klein, eerlijk oppervlak: lees gesprekken en berichten, voeg een interne notitie toe. Dit is een fundament, geen volledige REST API — bewust geen endpoint om als klant te antwoorden, want een antwoord moet echt via het juiste kanaal (widget, e-mail, WhatsApp…) verstuurd worden om iemand te bereiken.
| Endpoint | Scope | Notities |
|---|---|---|
| GET /me | Elke key | Bevestigt dat de key actief is en geeft de workspace en scopes terug. |
| GET /conversations | READ | Filter op status of kanaal. Cursor-paginering, nieuwste eerst. |
| GET /conversations/:id | READ | Eén gesprek. Geeft een generieke 404 buiten je workspace. |
| GET /conversations/:id/messages | READ | Oudste eerst. Interne notities worden uitgesloten — alleen klant-, agent- en AI-berichten. |
| POST /conversations/:id/notes | WRITE | Voegt een interne notitie toe en vuurt een message.created-webhook af. |
Interne notities verschijnen nooit in de berichtenfeed hierboven — ze blijven bewust alleen zichtbaar voor agents.
Data wegschrijven
Scopes worden per key afgedwongen — een READ-only key krijgt hier een 403. Dezelfde notitie, aangemaakt vanuit 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." }),
},
);Rate limits
Elke laag faalt closed als de limiter zelf niet beschikbaar is, dus een storing blokkeert aanroepen in plaats van ze ongemeten door te laten.
| Scope | Limiet | Notities |
|---|---|---|
| Per bron-IP | 300 / min | Een grove backstop, gecheckt vóórdat je key wordt opgezocht. |
| Per API-key | 300 / min | Het geadverteerde maximum. Teruggegeven op elke response via de X-RateLimit-*-headers. |
| Per API-key | 25.000 / dag | Begrenst structureel gebruik — elke aanroep opent een databasetransactie. |
| Per workspace | 600 / min | Opgeteld over alle keys in de workspace. |
| Per workspace | 100.000 / dag | Het opgetelde daglimiet over alle keys in de workspace samen. |
| Writes, per key | 120 / min | Geldt alleen voor POST …/notes. |
Een 429-response krijgt een Retry-After-header — wacht dat aantal seconden en probeer opnieuw. Een workspace mag maximaal 25 API-keys hebben, zodat de per-key-limiet niet te vermenigvuldigen is door extra keys aan te maken.
Webhooks
Stel endpoints in via Dashboard → Instellingen → Webhooks — tot 10 per workspace, elk met een eigen secret en lijst met events.
Formaten
Lever de ruwe JSON-payload (HMAC-signed), of een kant-en-klare melding voor Discord, Microsoft Teams of Google Chat — kies het formaat bij het toevoegen van het endpoint.
Events
Elke payload deelt dezelfde envelop:
{ event, timestamp, data }conversation.createdmessage.createdconversation.assignedconversation.escalatedresolution.createdcsat.receivedSignatures verifiëren
JSON-endpoints krijgen een X-CE-Signature-header — de hex HMAC-SHA256 van de ruwe request body, met het secret van het endpoint als key. Bereken ‘m opnieuw en vergelijk voordat je de payload vertrouwt.
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),
);
}Begin met bouwen.
Maak een gratis werkruimte aan, genereer een API-key en doe je eerste aanroep binnen enkele minuten.