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

  1. Przejdź do Ustawienia → Klucze API w dashboardzie
  2. Kliknij Utwórz klucz API i nadaj mu nazwę
  3. Skopiuj klucz natychmiast — jest wyświetlany tylko raz
  4. 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/widgets

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

Wszystkie 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

ParametrTypOpis
statusstringFiltruj wg statusu: open, pending, closed
widgetIdstringFiltruj wg UUID widgetu
limitintegerMaks. wyników (domyślnie 20, maks. 100)
offsetintegerPomiń 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

ParametrTypOpis
limitintegerMaks. 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"
}
PoleTypOpis
contentstringWymagane. Treść wiadomości.
rolestringsystem (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"
}
PoleTypOpis
statusstringopen, pending lub closed
assignedTostring|nullUUID 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 HTTPZnaczenie
401Nieprawidłowy, wygasły lub brakujący klucz API
400Nieprawidłowa treść żądania lub parametry
404Zasób nie znaleziony (lub należy do innego tenanta)
500Błą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.

Gotowy do integracji?

Utwórz darmowe konto i wygeneruj klucz API w kilka minut.

Zacznij za darmo