API v2 – kontakty i leady

Wyświetlaj listę kontaktów i leadów, twórz lub aktualizuj jeden kontakt na podstawie identyfikatora zewnętrznego oraz importuj kontakty agenta zbiorczo.

Contact payloads expose customAttributes; write requests accept customAttributes.plan and other JSON keys such as customAttributes.seats.

Kontakty łączą Twoje własne, stabilne identyfikatory użytkowników końcowych z imionami i nazwiskami, adresami e-mail oraz numerami telefonów. Leady to zgłoszenia tylko do odczytu, zebrane przez agenta. Każdy punkt końcowy na tej stronie wymaga nagłówka Authorization: Bearer YOUR_API_KEY oraz dostępu do {agentId}.

Informacje o podpisanych oświadczeniach tożsamości w osadzonym czacie znajdziesz w sekcji Weryfikacja tożsamości. Wspólne błędy uwierzytelniania i walidacji opisano w katalogu błędów.

Obiekt kontaktu

PoleTypUwagi
idciąg znakówUUID kontaktu.
externalIdciąg znakówTwój stabilny identyfikator użytkownika końcowego.
nameciąg znaków lub nullImię i nazwisko kontaktu.
emailciąg znaków lub nullAdres e-mail kontaktu.
phoneciąg znaków lub nullNumer telefonu kontaktu.
createdAtliczba całkowita lub nullZnacznik czasu Unix w sekundach.
updatedAtliczba całkowita lub nullZnacznik czasu Unix w sekundach.
lastSeenAtliczba całkowita lub nullZnacznik czasu Unix w sekundach.

Lista kontaktów

Ścieżka: /api/v2/agents/{agentId}/contacts

GET /api/v2/agents/{agentId}/contacts

Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.

ParametrWymaganeOgraniczenia
limitNieLiczba całkowita od 1 do 100; domyślnie 20.
cursorNieNieprzejrzysty kursor zwrócony przez poprzednią stronę wyników. Prześlij go bez zmian.
searchNiePrzycięte, niewrażliwe na wielkość liter wyszukiwanie podciągu (ILIKE) w polach identyfikatora zewnętrznego, adresu e-mail, imienia i telefonu. Znaki procentu (%) są usuwane, ale podkreślenie (_) nie jest maskowane i działa jako symbol wieloznaczny zastępujący jeden znak — np. acct_1 pasuje również do acctX1. Pusty wynik po przycięciu jest ignorowany.
curl 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/contacts?search=alice&limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Sukces: 200 OK

{
  "data": [
    {
      "id": "f9878f31-c2b3-469f-a82e-26e996e67721",
      "externalId": "customer_123",
      "name": "Alice Example",
      "email": "[email protected]",
      "phone": "+1 555 0100",
      "customAttributes": { "plan": "pro", "seats": 4 },
      "createdAt": 1784332800,
      "updatedAt": 1784332800,
      "lastSeenAt": null
    }
  ],
  "pagination": {
    "cursor": null,
    "hasMore": false,
    "total": 1
  }
}

Nieprawidłowe wartości limit lub cursor skutkują błędem 400 VALIDATION_INVALID_BODY.

Obiekt leada

PoleTypUwagi
idciąg znakówUUID leada.
nameciąg znaków lub nullPodane imię i nazwisko.
emailciąg znaków lub nullPodany adres e-mail.
phoneciąg znaków lub nullPodany numer telefonu.
conversationIdciąg znaków lub nullPubliczny identyfikator referencyjny konwersacji, gdy lead jest powiązany z konwersacją.
createdAtliczba całkowitaZnacznik czasu Unix w sekundach.

Lista leadów

Ścieżka: /api/v2/agents/{agentId}/leads

GET /api/v2/agents/{agentId}/leads

Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.

ParametrWymaganeOgraniczenia
limitNieLiczba całkowita od 1 do 100; domyślnie 20.
cursorNieNieprzejrzysty kursor zwrócony przez poprzednią stronę wyników. Prześlij go bez zmian.
createdAfterNieData i godzina w formacie ISO 8601 z sufiksem Z lub przesunięciem UTC. Dolna granica jest inkluzywna.
createdBeforeNieData i godzina w formacie ISO 8601 z sufiksem Z lub przesunięciem UTC. Górna granica jest inkluzywna.

Gdy oba filtry dat są podane, wartość createdAfter musi być mniejsza lub równa createdBefore przy porównaniu jako konkretne chwile w czasie. Równe granice są dozwolone.

curl 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/leads?createdAfter=2026-07-18T08:00:00Z&limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Sukces: 200 OK

{
  "data": [
    {
      "id": "ad47f673-6bfb-43a0-a296-d79c84870a32",
      "name": "Alice Example",
      "email": "[email protected]",
      "phone": "+1 555 0100",
      "conversationId": "a1b2c3d4e5f6g7h8",
      "createdAt": 1784361600
    }
  ],
  "pagination": {
    "cursor": null,
    "hasMore": false,
    "total": 1
  }
}

Leady są uporządkowane według czasu zgłoszenia, od najnowszych do najstarszych. Nieprawidłowe wartości limit, cursor, dat i godzin lub odwrócone granice dat skutkują błędem 400 VALIDATION_INVALID_BODY.

Tworzenie lub aktualizacja jednego kontaktu

POST /api/v2/agents/{agentId}/contacts

Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.

Ten punkt końcowy tworzy nowy kontakt lub aktualizuje istniejący na podstawie pary {agentId, externalId}. Jeśli pasujący kontakt już istnieje, aktualizowane są wyłącznie pola profilu obecne w żądaniu. Pominięte pole zachowuje swoją zapisaną wartość; jawne podanie null lub pustego ciągu znaków czyści je.

Pole treści żądaniaWymaganeTyp i ograniczenia
externalIdTakCiąg znaków, przycięty, o długości od 1 do 255 znaków.
nameNieCiąg znaków przycięty do maksymalnie 255 znaków lub null.
emailNiePrawidłowy adres e-mail przycięty do maksymalnie 320 znaków, pusty ciąg znaków lub null.
phoneNieCiąg znaków przycięty do maksymalnie 50 znaków, pusty ciąg znaków lub null.
curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/contacts' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"externalId":"customer_123","name":"Alice Example","email":"[email protected]","customAttributes":{"plan":"pro","seats":4}}'

Sukces: 201 Created zarówno przy tworzeniu nowego wpisu, jak i przy aktualizacji w wyniku konfliktu. Obiekt kontaktu jest zwracany bez opakowania.

{
  "id": "f9878f31-c2b3-469f-a82e-26e996e67721",
  "externalId": "customer_123",
  "name": "Alice Example",
  "email": "[email protected]",
  "phone": null,
  "customAttributes": { "plan": "pro", "seats": 4 },
  "createdAt": 1784332800,
  "updatedAt": 1784332800,
  "lastSeenAt": null
}

Nieprawidłowa treść żądania skutkuje błędem 400 VALIDATION_INVALID_BODY wraz ze szczegółami walidacji.

Importowanie kontaktów

Ścieżka: /api/v2/agents/{agentId}/contacts/import

POST /api/v2/agents/{agentId}/contacts/import

Uwierzytelnianie: klucz API typu Bearer z dostępem do {agentId}.

Żądanie wykorzystuje nazwy pól w formacie snake_case. Pole rows musi zawierać od 1 do 1000 wpisów.

Pole wierszaWymaganeTyp i ograniczenia
external_idTakCiąg znaków, przycięty, o długości od 1 do 255 znaków.
nameNieCiąg znaków przycięty do maksymalnie 255 znaków lub null.
emailNiePrawidłowy adres e-mail przycięty do maksymalnie 320 znaków, pusty ciąg znaków lub null.
phoneNieCiąg znaków przycięty do maksymalnie 50 znaków lub null; pusty ciąg znaków jest również akceptowany i zapisywany jako null.

Wiersze są deduplikowane na podstawie external_id w ramach żądania; wygrywa ostatnie wystąpienie. W przeciwieństwie do częściowej aktualizacji pojedynczego kontaktu, import ustawia wszystkie pola profilu dla każdego zachowanego wiersza, więc pominięta, null lub pusta wartość profilu jest w razie konfliktu zapisywana jako null.

curl -X POST 'https://your-domain.com/api/v2/agents/955f28f1-8515-40bb-802c-f3f730bf0343/contacts/import' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"rows":[{"external_id":"customer_123","name":"Alice Example","email":"[email protected]","phone":"+1 555 0100","customAttributes":{"plan":"pro"}},{"external_id":"customer_456","name":"Bob Example","email":"[email protected]","phone":null}]}'

Sukces: 200 OK

{
  "processed": 2,
  "skipped": 0
}

processed to liczba unikalnych identyfikatorów zewnętrznych, dla których utworzono lub zaktualizowano wpis. skipped to liczba zduplikowanych wierszy usuniętych z przesłanej partii. Nieprawidłowa treść żądania, w tym puste partie oraz partie zawierające ponad 1000 wierszy, skutkuje błędem 400 VALIDATION_INVALID_BODY.

Powiązane materiały