Construye sobre CustomerEagle.
Una API REST y webhooks para tus datos de soporte — lee conversaciones y mensajes, añade notas internas y suscríbete a eventos. Pensada para Zapier, Make, n8n o tu propio backend. El acceso a la API está en los planes de pago (Growth y superiores).
Crea una API key
En Panel → Configuración → API Keys, crea una key con scope READ o WRITE (o ambos). Necesita un plan de pago (Growth y superiores) — con Free o Starter no puedes crear keys. La key en bruto se muestra una sola vez — guárdala como una contraseña.
Autentica cada petición
URL base https://api.customereagle.com/api/v1. Envía tu key como bearer token en la cabecera Authorization.
Haz tu primera llamada
Comprueba que la key funciona y descubre qué espacio de trabajo y scopes tiene.
curl -H "Authorization: Bearer ce_live_..." \
https://api.customereagle.com/api/v1/meEndpoints
Una superficie pequeña y honesta: lee conversaciones y mensajes, añade una nota interna. Es un fundamento, no una API REST completa — deliberadamente sin un endpoint de respuesta al cliente, porque una respuesta tiene que salir por el canal real (widget, email, WhatsApp…) para llegar a alguien.
| Endpoint | Scope | Notas |
|---|---|---|
| GET /me | Cualquier key | Confirma que la key está activa y devuelve su espacio de trabajo y scopes. |
| GET /conversations | READ | Filtra por status o canal. Paginación por cursor, más recientes primero. |
| GET /conversations/:id | READ | Una sola conversación. Devuelve un 404 genérico fuera de tu espacio de trabajo. |
| GET /conversations/:id/messages | READ | Más antiguos primero. Las notas internas quedan excluidas — solo mensajes de cliente, agente e IA. |
| POST /conversations/:id/notes | WRITE | Añade una nota interna y dispara un webhook message.created. |
Las notas internas nunca aparecen en el feed de mensajes de arriba — se quedan visibles solo para agentes, a propósito.
Escribir datos
Los scopes se aplican por key — una key solo-READ recibe un 403 aquí. La misma nota, creada desde 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." }),
},
);Límites de tasa
Cada capa falla cerrada si el propio limitador no está disponible, así que una caída bloquea las llamadas en lugar de dejarlas pasar sin medir.
| Scope | Límite | Notas |
|---|---|---|
| Por IP de origen | 300 / min | Un límite general, comprobado antes incluso de buscar tu key. |
| Por API key | 300 / min | El tope anunciado. Se devuelve en cada respuesta vía las cabeceras X-RateLimit-*. |
| Por API key | 25.000 / día | Acota el uso sostenido — cada llamada abre una transacción de base de datos. |
| Por espacio de trabajo | 600 / min | Agregado entre todas las keys del espacio de trabajo. |
| Por espacio de trabajo | 100.000 / día | El tope diario agregado entre todas las keys del espacio de trabajo. |
| Escrituras, por key | 120 / min | Aplica solo a POST …/notes. |
Una respuesta 429 añade una cabecera Retry-After — espera esos segundos y reinténtalo. Cada espacio de trabajo tiene un tope de 25 API keys, así que el límite por key no se puede multiplicar creando más.
Webhooks
Configura endpoints en Panel → Configuración → Webhooks — hasta 10 por espacio de trabajo, cada uno con su propio secreto y su lista de eventos suscritos.
Formatos
Entrega el payload JSON en bruto (firmado con HMAC), o una notificación lista para usar en Discord, Microsoft Teams o Google Chat — elige el formato al añadir el endpoint.
Eventos
Todos los payloads comparten el mismo sobre:
{ event, timestamp, data }conversation.createdmessage.createdconversation.assignedconversation.escalatedresolution.createdcsat.receivedVerificar firmas
Los endpoints JSON llevan una cabecera X-CE-Signature — el HMAC-SHA256 en hexadecimal del cuerpo bruto de la petición, firmado con el secreto del endpoint. Recalcúlalo y compáralo antes de confiar en el 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),
);
}Empieza a construir.
Crea un espacio de trabajo gratuito, genera una API key y haz tu primera llamada en minutos.