Dokumentacja API
Integruj enuchat ze swoimi systemami za pomocą Tenant API. Zarządzaj rozmowami, wysyłaj wiadomości i uzyskuj dostęp do danych rozliczeniowych programistycznie.
Uwierzytelnianie
Wszystkie żądania API są uwierzytelniane za pomocą klucza API wysyłanego w nagłówku X-Api-Key.
Uzyskiwanie klucza API
- Przejdź do Ustawienia → Klucze API w dashboardzie
- Kliknij Utwórz klucz API i nadaj mu nazwę
- Skopiuj klucz natychmiast — jest wyświetlany tylko raz
- Przechowuj go bezpiecznie (zmienna środowiskowa, menedżer sekretów)
Wykonywanie żądań
Dołączaj klucz do każdego żądania:
curl -H "X-Api-Key: tak_twój_klucz" \
https://api.enuchat.com/api/v1/tenant-api/widgetsWszystkie odpowiedzi są w formacie JSON. Pomyślne odpowiedzi mają pole data. Błędy mają pole error z code i message.
Bezpieczeństwo: Klucze API są hashowane (SHA-256) w naszej bazie danych. Nigdy nie przechowujemy surowego klucza. Traktuj swój klucz jak hasło — nie commituj go do kodu ani nie udostępniaj publicznie.
Bazowy URL
https://api.enuchat.com/api/v1/tenant-apiWszystkie poniższe endpointy są względne wobec tego bazowego URL.
Endpointy
GET /widgets
Lista wszystkich widgetów na Twoim koncie.
Odpowiedź
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Czat na stronie głównej",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Lista rozmów, posortowana od najnowszej wiadomości.
Parametry zapytania
| Parametr | Typ | Opis |
|---|---|---|
status | string | Filtruj wg statusu: open, pending, closed |
widgetId | string | Filtruj wg UUID widgetu |
limit | integer | Maks. wyników (domyślnie 20, maks. 100) |
offset | integer | Pomiń N wyników |
Przykład
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Odpowiedź
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "Jan",
"visitorEmail": "jan{'@'}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}
Pobierz rozmowę ze wszystkimi wiadomościami.
Parametry zapytania
| Parametr | Typ | Opis |
|---|---|---|
limit | integer | Maks. wiadomości (domyślnie 50, maks. 200) |
Odpowiedź
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Cześć, ile to kosztuje?",
"contentLanguage": "pl",
"translatedContent": "Hello, how much does it cost?",
"translatedLanguage": "en",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Nasze plany zaczynają się od €19/mies....",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Wyślij wiadomość do rozmowy. Wiadomość zostanie dostarczona odwiedzającemu w czasie rzeczywistym przez widget czatu.
Treść żądania
{'{'}
"content": "Dziękujemy za kontakt! Zajmiemy się Twoim zgłoszeniem.",
"role": "system"
}| Pole | Typ | Opis |
|---|---|---|
content | string | Wymagane. Treść wiadomości. |
role | string | system (domyślnie) lub operator |
Odpowiedź (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Dziękujemy za kontakt!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Zaktualizuj status rozmowy lub przypisanie.
Treść żądania
{'{'}
"status": "closed"
}| Pole | Typ | Opis |
|---|---|---|
status | string | open, pending lub closed |
assignedTo | string|null | UUID operatora do przypisania lub null, aby usunąć przypisanie |
GET /billing/balance
Pobierz aktualny plan i saldo kredytowe.
Odpowiedź
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Obsługa błędów
Błędy zwracają kod statusu inny niż 2xx z treścią JSON:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Rozmowa nie została znaleziona."
}
}| Status HTTP | Znaczenie |
|---|---|
401 | Nieprawidłowy, wygasły lub brakujący klucz API |
400 | Nieprawidłowa treść żądania lub parametry |
404 | Zasób nie znaleziony (lub należy do innego tenanta) |
500 | Błąd serwera |
Typowe zastosowania
Integracja z CRM
Odpytuj o nowe rozmowy i synchronizuj dane odwiedzających (imię, email, język) z Twoim CRM. Użyj ID rozmowy jako referencji zewnętrznej.
Automatyczne follow-upy
Po zamknięciu rozmowy wyślij wiadomość follow-up przez API: "Dziękujemy za rozmowę! Czy jest coś jeszcze, w czym możemy pomóc?"
Alternatywa dla webhooków
Do czasu udostępnienia wychodzących webhooków, odpytuj endpoint rozmów okresowo, aby wykrywać nowe wiadomości lub zmiany statusów.
Operacje masowe
Zamykaj wszystkie rozmowy starsze niż 7 dni, przypisuj rozmowy do operatorów na podstawie zewnętrznej logiki lub eksportuj historię rozmów do analityki.
Limity żądań
API pozwala na maksymalnie 60 żądań na minutę na klucz API. Jeśli przekroczysz ten limit, otrzymasz odpowiedź 429 Too Many Requests. Poczekaj i ponów próbę z wykładniczym opóźnieniem.