Referència de l'API
Integra enuchat als teus sistemes utilitzant l'API de Tenant. Gestiona converses, envia missatges i accedeix a dades de facturació de manera programàtica.
Autenticació
Totes les sol·licituds d'API s'autentiquen utilitzant una clau API enviada a la capçalera X-Api-Key.
Obtenir la teva clau API
- Vés a Configuració → Claus API al teu panell
- Fes clic a Crea clau API i posa-li un nom
- Copia la clau immediatament — només es mostra una vegada
- Emmagatzema-la de manera segura (variable d'entorn, gestor de secrets)
Fent sol·licituds
Inclou la clau a cada sol·licitud:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsTotes les respostes són JSON. Les respostes reeixides tenen un camp data. Els errors tenen un camp error amb code i message.
Seguretat: Les claus API s'encripten (SHA-256) a la nostra base de dades. Mai emmagatzemem la clau en cru. Tracta la teva clau com una contrasenya — no la commitis al codi ni la comparteixis públicament.
URL base
https://api.enuchat.com/api/v1/tenant-apiTots els endpoints de sota són relatius a aquesta URL base.
Endpoints
GET /widgets
Llista tots els widgets del teu compte.
Resposta
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Llista converses, ordenades pel missatge més recent.
Paràmetres de consulta
| Paràmetre | Tipus | Descripció |
|---|---|---|
status | string | Filtra per estat: open, pending, closed |
widgetId | string | Filtra per UUID del widget |
limit | integer | Resultats màxims (per defecte 20, màxim 100) |
offset | integer | Salta N resultats |
Exemple
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Resposta
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
Obté una conversa amb tots els missatges.
Paràmetres de consulta
| Paràmetre | Tipus | Descripció |
|---|---|---|
limit | integer | Missatges màxims (per defecte 50, màxim 200) |
Resposta
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Envia un missatge a una conversa. El missatge serà lliurat al visitant en temps real via el widget de xat.
Cos de la sol·licitud
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| Camp | Tipus | Descripció |
|---|---|---|
content | string | Requerit. El text del missatge. |
role | string | system (per defecte) o operator |
Resposta (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Actualitza l'estat o l'assignació d'una conversa.
Cos de la sol·licitud
{'{'}
"status": "closed"
}| Camp | Tipus | Descripció |
|---|---|---|
status | string | open, pending, o closed |
assignedTo | string|null | UUID de l'operador per assignar, o null per desassignar |
GET /billing/balance
Obté el teu pla actual i saldo de crèdit.
Resposta
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Gestió d'errors
Els errors retornen un codi d'estat no-2xx amb un cos JSON:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| Estat HTTP | Significat |
|---|---|
401 | Clau API no vàlida, caducada o que falta |
400 | Cos de sol·licitud o paràmetres no vàlids |
404 | Recurs no trobat (o pertany a un tenant diferent) |
500 | Error del servidor |
Casos d'ús comuns
Integració de CRM
Sondeja per noves converses i sincronitza dades de visitants (nom, correu, idioma) al teu CRM. Utilitza l'ID de conversa com a referència externa.
Seguiments automatitzats
Després que una conversa es tanqui, envia un missatge de seguiment via l'API: "Gràcies per xatejar! Hi ha alguna cosa més amb què puguem ajudar?"
Alternativa de webhook
Fins que els webhooks de sortida estiguin disponibles, sondeja l'endpoint de converses periòdicament per detectar nous missatges o canvis d'estat.
Operacions massives
Tanca totes les converses de més de 7 dies, assigna converses a operadors basant-te en lògica externa, o exporta l'historial de converses per a analítiques.
Límits de tarifa
L'API permet fins a 60 sol·licituds per minut per clau API. Si excedeixes aquest límit, rebràs una resposta 429 Too Many Requests. Espera i torna-ho a provar amb backoff exponencial.