Referință API

Integrează enuchat în sistemele tale folosind API-ul Tenant. Gestionează conversațiile, trimite mesaje și accesează datele de facturare programatic.

Autentificare

Toate cererile API sunt autentificate folosind o cheie API trimisă în header-ul X-Api-Key.

Obținerea cheii API

  1. Mergi la Setări → Chei API în dashboard
  2. Fă click pe Creează cheie API și dă-i un nume
  3. Copiază cheia imediat — este afișată doar o dată
  4. Stoch-o în siguranță (variabilă de mediu, manager de secrete)

Efectuarea cererilor

Include cheia în fiecare cerere:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Toate răspunsurile sunt JSON. Răspunsurile reușite au un câmp data. Erorile au un câmp error cu code și message.

Securitate: Cheile API sunt hashate (SHA-256) în baza noastră de date. Nu stocăm niciodată cheia brută. Tratează cheia ca pe o parolă — nu o commit-a în cod sau o partaja public.

URL de bază

https://api.enuchat.com/api/v1/tenant-api

Toate endpoint-urile de mai jos sunt relative la acest URL de bază.

Endpoint-uri

GET /widgets

Listează toate widget-urile din cont.

Răspuns

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Listează conversațiile, ordonate după cel mai recent mesaj.

Parametri query

ParametruTipDescriere
statusstringFiltrează după stare: open, pending, closed
widgetIdstringFiltrează după UUID widget
limitintegerRezultate maxime (implicit 20, max 100)
offsetintegerOmite N rezultate

Exemplu

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Răspuns

{'{'}
  "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}

Obține o conversație cu toate mesajele.

Parametri query

ParametruTipDescriere
limitintegerMesaje maxime (implicit 50, max 200)

Răspuns

{'{'}
  "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

Trimite un mesaj unei conversații. Mesajul va fi livrat vizitatorului în timp real prin widget-ul de chat.

Corp cerere

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
CâmpTipDescriere
contentstringObligatoriu. Textul mesajului.
rolestringsystem (implicit) sau operator

Răspuns (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

Actualizează starea sau atribuirea unei conversații.

Corp cerere

{'{'}
  "status": "closed"
}
CâmpTipDescriere
statusstringopen, pending, sau closed
assignedTostring|nullUUID operator de atribuit, sau null pentru dezalocare

GET /billing/balance

Obține planul curent și soldul de credite.

Răspuns

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Gestionarea erorilor

Erorile returnează un cod de stare non-2xx cu un corp JSON:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
Stare HTTPSemnificație
401Cheie API invalidă, expirată sau lipsă
400Corp cerere sau parametri invalizi
404Resursă negăsită (sau aparține altui tenant)
500Eroare server

Cazuri comune de utilizare

Integrare CRM

Fă polling pentru noi conversații și sincronizează datele vizitatorilor (nume, email, limbă) la CRM. Folosește ID-ul conversației ca referință externă.

Follow-up-uri automate

După ce o conversație este închisă, trimite un mesaj de follow-up prin API: «Mulțumim pentru discuție! Mai este ceva cu care putem ajuta?»

Alternativă la webhook

Până când webhook-urile outgoing sunt disponibile, fă polling la endpoint-ul conversațiilor periodic pentru a detecta mesaje noi sau schimbări de stare.

Operații în masă

Închide toate conversațiile mai vechi de 7 zile, atribuie conversații operatorilor pe baza logicii externe sau exportă istoricul conversațiilor pentru analize.

Limite de rată

API-ul permite până la 60 de cereri pe minut per cheie API. Dacă depășești această limită, vei primi un răspuns 429 Too Many Requests. Așteaptă și reîncearcă cu backoff exponențial.

Gata să integrezi?

Creează-ți contul gratuit și generează o cheie API în câteva minute.

Începe gratuit