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

  1. Vés a Configuració → Claus API al teu panell
  2. Fes clic a Crea clau API i posa-li un nom
  3. Copia la clau immediatament — només es mostra una vegada
  4. 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/widgets

Totes 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-api

Tots 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àmetreTipusDescripció
statusstringFiltra per estat: open, pending, closed
widgetIdstringFiltra per UUID del widget
limitintegerResultats màxims (per defecte 20, màxim 100)
offsetintegerSalta 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àmetreTipusDescripció
limitintegerMissatges 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"
}
CampTipusDescripció
contentstringRequerit. El text del missatge.
rolestringsystem (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"
}
CampTipusDescripció
statusstringopen, pending, o closed
assignedTostring|nullUUID 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 HTTPSignificat
401Clau API no vàlida, caducada o que falta
400Cos de sol·licitud o paràmetres no vàlids
404Recurs no trobat (o pertany a un tenant diferent)
500Error 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.

Preparat per integrar?

Crea el teu compte gratuït i genera una clau API en minuts.

Comença gratis