Skip to main content

Jak połączyć CRM z Heilo przez API

Prosta ścieżka integracji: Heilo wysyła dane rozmów do Twojego CRM-a, a niżej znajdziesz szczegóły dla programisty.

Szybki start: połącz CRM z Heilo

Najprostsza integracja polega na tym, że Heilo samo wysyła dane po każdej rozmowie do Twojego CRM-a.

Najważniejsze zdarzenie to call.completed. Oznacza: rozmowa jest gotowa, a CRM może zapisać kontakt, lead lub notatkę. Adresy REST /calls traktuj jako dodatek do sprawdzania lub odczytu danych.

  1. Przygotuj adres URL w CRM-ie, Zapierze, Make albo własnym systemie, na który Heilo ma wysyłać dane.
  2. W Heilo dodaj subskrypcję na zdarzenie call.completed. Opcjonalnie dodaj też call.outbound.attempted, jeśli chcesz śledzić próby połączeń wychodzących.
  3. Odbieraj call.completed i sprawdzaj podpis Heilo-Signature, żeby upewnić się, że wiadomość przyszła z Heilo.
  4. Nie twórz duplikatów: zapisuj event_id z nagłówka heilo-event-id. data.call_id oznacza konkretną rozmowę.
  5. W CRM-ie znajdź albo utwórz kontakt po numerze telefonu, potem dodaj lead, deal, aktywność albo notatkę z podsumowaniem i linkiem do nagrania.

Nie kodujesz? Przewodnik połączenia bez kodu (Zapier/Make) prowadzi krok po kroku.

Dostęp przez klucz API

Do publicznego API używasz klucza API. Wygeneruj go w karcie „Klucze API”, a programista wklei go w nagłówek Authorization:

Authorization: Bearer hk_live_AbC1MnPq...

W Heilo są trzy sposoby potwierdzania dostępu:

  • Klucz API, np. hk_live_… — używany przez CRM, Zapier, Make albo własny skrypt.
  • Sesja użytkownika w przeglądarce — używana tylko w panelu Heilo, nie w integracji API.
  • Podpis HMAC — dodatkowe zabezpieczenie webhooków, czyli wiadomości wysyłanych z Heilo do Twojego adresu URL.
Uprawnienie (scope)Znaczenie
read.callsOdczyt rozmów: GET /api/v1/calls, GET /api/v1/calls/:id
write.calls, read.contacts, write.contacts, manage.webhooks, manage.api_keysZarezerwowane dla planowanych adresów API — nie zaznaczaj na zapas.

Pole environment w odpowiedzi /me ma dziś zawsze wartość live. Klucze testowe są w planach.

Adres API

Wszystkie publiczne adresy API zaczynają się od:

https://www.heilo.io/api/v1

Adresy API

Te adresy służą głównie do sprawdzenia klucza i odczytu wybranych danych rozmów. Główna integracja CRM powinna opierać się na webhookach, czyli automatycznych powiadomieniach wysyłanych przez Heilo po rozmowie.

GET/api/v1/me

Sprawdza, czy klucz API działa. Zwraca identyfikator klucza, użytkownika, uprawnienia i limit zapytań.

Przykładowe zapytanie

curl https://www.heilo.io/api/v1/me \
  -H "Authorization: Bearer hk_live_AbC1MnPq..."

Przykładowa odpowiedź

{
  "success": true,
  "data": {
    "api_key_id": "a1b2c3d4-5e6f-7081-92a3-b4c5d6e7f809",
    "user_id": "5f4e3d2c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
    "organization_id": "7a8b9c0d-1e2f-4a3b-9c8d-7e6f5a4b3c2d",
    "scopes": ["read.calls", "manage.webhooks"],
    "rate_limit_per_hour": 1000,
    "environment": "live"
  },
  "meta": { "timestamp": "2026-06-03T12:34:56Z" }
}

Przydatne jako test połączenia: jeśli dostajesz odpowiedź 200, klucz i sieć działają.

Rozmowy

Te adresy pozwalają odczytać rozmowy. Klucz API musi mieć uprawnienie read.calls.

GET/api/v1/calls

Lista rozmów organizacji. Stronicowanie (page/limit≤100), filtry: direction, status, zakres dat (dateFrom/dateTo). Zwraca has_more.

Parametry zapytania

ParametrTypWartości
pageintod 1 (domyślnie 1)
limitint1–100 (domyślnie 20)
directionenuminbound | outbound
statusenumnew | to_call | contacted | qualified
dateFrom / dateTostringdata YYYY-MM-DD lub ISO 8601, np. 2026-06-03T12:34:56Z

Przykładowe zapytanie

curl "https://www.heilo.io/api/v1/calls?limit=20&direction=inbound" \
  -H "Authorization: Bearer hk_live_AbC1MnPq..."

Przykładowa odpowiedź

{
  "success": true,
  "data": {
    "items": [
      {
        "call_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "direction": "inbound",
        "caller_phone": "+48600100200",
        "customer_phone_e164": "+48600100200",
        "caller_name": "Jan Kowalski",
        "duration": 87,
        "crm_status": "new",
        "review_status": null,
        "outbound_lifecycle": null,
        "transcript_processed": { "caller_name": "Jan Kowalski", "summary": "...", "service_needed": "..." },
        "created_at": "2026-06-03T12:34:56Z"
      }
    ],
    "has_more": false,
    "page": 1,
    "limit": 20
  },
  "meta": { "timestamp": "2026-06-03T12:34:56Z" }
}
GET/api/v1/calls/:id

Jedna rozmowa po identyfikatorze. API zwróci 404, jeśli rozmowa nie należy do organizacji albo została usunięta.

Przykładowe zapytanie

curl https://www.heilo.io/api/v1/calls/<id> \
  -H "Authorization: Bearer hk_live_AbC1MnPq..."

Lista rozmów nie zwraca plików nagrań. Link do nagrania dostajesz w webhooku, a nagrania mogą zostać usunięte zgodnie z retencją i RODO.

Limity zapytań

Heilo ogranicza liczbę zapytań w ciągu godziny, osobno dla jednego klucza i całego konta. Limit resetuje się o pełnej godzinie UTC.

Na jeden klucz

1000 req/h

Na całe konto

5000 req/h

Po przekroczeniu limitu API zwraca 429 i informację, kiedy spróbować ponownie:

HTTP/1.1 429 Too Many Requests
Retry-After: 1842
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-06-03T13:00:00Z

Błędy

Błędy mają stały format JSON. W automatyzacji zapisuj error.code, bo error.message jest opisem dla człowieka i może się zmienić.

{
  "success": false,
  "error": { "code": "RATE_LIMITED", "message": "Per-key rate limit 1000/h exceeded" },
  "meta": { "timestamp": "2026-06-03T12:34:56Z" }
}
HTTPcodeZnaczenie
400BAD_REQUESTNiepoprawne parametry zapytania lub treści (ogólna walidacja)
401UNAUTHORIZEDBrak lub niepoprawny klucz API
402SUBSCRIPTION_INACTIVESubskrypcja nieaktywna — odnów płatność, aby znów włączyć klucz
403FORBIDDENKlucz API nie ma potrzebnego uprawnienia
404NOT_FOUNDZasób nie istnieje albo należy do innego użytkownika
422VALIDATION_ERRORReguła biznesowa odrzuciła żądanie (np. niepoprawny numer, limit)
429RATE_LIMITEDPrzekroczono limit zapytań
500DATABASE_ERRORBłąd serwera lub bazy — można spróbować ponownie później
503MAINTENANCEPubliczne API jest tymczasowo wyłączone

Kod SUBSCRIPTION_INACTIVE występuje w dwóch sytuacjach: HTTP 402 — subskrypcja Heilo wygasła (płatność), oraz HTTP 409 — subskrypcja webhooka jest wstrzymana (np. przy akcji Test); wtedy najpierw kliknij „Ponów weryfikację”.

Webhooki: dane wysyłane do CRM-a

Webhook to adres URL w Twoim CRM-ie, Zapierze, Make albo własnym systemie. Po rozmowie Heilo wyśle tam JSON z danymi. Przy aktywacji sprawdzamy, czy adres odpowiada. Każda wiadomość ma podpis HMAC, żeby odbiorca mógł sprawdzić, że pochodzi z Heilo:

POST <your URL>
content-type: application/json
heilo-signature: t=1717423396,v1=4f3a...
heilo-event-id: 1bf3a5e2-...
heilo-event-type: call.completed

{
  "api_version": "2026-06-15",
  "event_id": "1bf3a5e2-...",
  "event_type": "call.completed",
  "resource_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "created_at": "2026-06-03T12:34:56Z",
  "data": { /* see the setup guide for the full schema */ }
}

Co się stanie, jeśli Twój adres nie odpowie:

  • Błędy przejściowe (HTTP 408/429/5xx, sieć) ponawiamy z rosnącą przerwą (2 min, 5 min, 30 min, 2 h) — po 5 próbach wiadomość trafia do martwej kolejki.
  • Błędy trwałe (HTTP 401/403/422) od razu wstrzymują subskrypcję — bez ponawiania.
  • 50 błędów przejściowych z rzędu albo 2 razy z rzędu HTTP 410 Gone (np. usunięty scenariusz w Make) także wstrzymują subskrypcję.
  • Po poprawieniu adresu kliknij „Ponów weryfikację”, aby wznowić wysyłkę.

Gdy subskrypcja zostanie automatycznie wstrzymana, wysyłamy e-mail na adres właściciela konta. Zdarzenia z martwej kolejki możesz wysłać ponownie przyciskiem „Wyślij ponownie” w Historii wysyłek — po ponownej weryfikacji subskrypcji.

Weryfikacja adresu webhooka

Gdy dodajesz adres webhooka, Heilo sprawdza, czy da się na niego wysłać wiadomość. Dla Zapier i Make zostaw tryb domyślny. Tryb zaawansowany jest tylko dla własnych serwerów.

Tryb prosty permissive (domyślnie)

Heilo wysyła wiadomość testową. Każda odpowiedź 2xx oznacza, że adres działa.

Tryb zaawansowany strict (opcjonalnie)

Heilo wysyła wiadomość testową z polem challenge. Twój serwer musi odesłać odpowiedź 2xx z takim JSON-em:

{"challenge":"<echo of the challenge field from Heilo's POST>"}

Tryb wybierasz przy tworzeniu subskrypcji. Po utworzeniu nie zmienisz go w miejscu — usuń subskrypcję i dodaj ją ponownie.

Możesz mieć maksymalnie 20 aktywnych subskrypcji na konto. Subskrypcję wstrzymujemy automatycznie po 50 błędach przejściowych z rzędu lub 2 razy z rzędu HTTP 410, a od razu przy HTTP 401/403/422.

Podpis bezpieczeństwa HMAC

Heilo podpisuje każdą wiadomość webhooka. Programista powinien sprawdzić podpis na niezmienionej treści żądania, zanim zapisze dane w CRM-ie.

signed_string = "<unix_timestamp>.<raw_request_body>"
signature     = HMAC-SHA256(signing_secret, signed_string).hex()
header        = "t=<unix_timestamp>,v1=<signature>"
import { createHmac, timingSafeEqual } from 'crypto';

// rawBody MUST be the exact received bytes — do NOT re-serialize the JSON.
function verifyHeiloSignature(rawBody, header, signingSecret, toleranceSec = 300) {
  if (!header) return false;
  const parts = Object.fromEntries(
    header.split(',').map((p) => p.split('=').map((s) => s.trim()))
  );
  const t = Number(parts.t);
  const sig = parts.v1;
  if (!Number.isFinite(t) || !sig) return false;

  // Asymmetric tolerance: reject old replays; allow only small clock skew ahead.
  const now = Math.floor(Date.now() / 1000);
  if (now - t > toleranceSec || t - now > 60) return false;

  const expected = createHmac('sha256', signingSecret)
    .update(`${t}.${rawBody}`)
    .digest('hex');
  const a = Buffer.from(expected, 'utf8');
  const b = Buffer.from(sig, 'utf8');
  // timingSafeEqual THROWS on length mismatch — length-check first.
  return a.length === b.length && timingSafeEqual(a, b);
}

Domyślnie akceptuj wiadomości wysłane maksymalnie 5 minut temu. Dzięki temu stary, przechwycony request nie powinien zostać użyty ponownie.

Sekret podpisu pokazujemy tylko raz — przy utworzeniu subskrypcji. Jeśli go zgubisz albo podejrzewasz wyciek: usuń subskrypcję i utwórz ją ponownie z tym samym adresem URL (adres w Zapier/Make się nie zmienia). Rotacja sekretu bez usuwania jest w planach.

Zdarzenia, które może wysłać Heilo

Przy tworzeniu subskrypcji wybierasz, które zdarzenia chcesz odbierać. Każde zdarzenie ma unikalny identyfikator, dzięki czemu CRM może uniknąć duplikatów.

Pierwsze zdarzenie, które dostaniesz, to webhook.test — wiadomość testowa z data._test = true. Użyj jej do zmapowania pól albo odfiltruj.

nazwa technicznaOpis
call.completedZakończona rozmowa, transkrypcja gotowa
call.outbound.attemptedPróba wybrania numeru wychodzącego (przed nawiązaniem)
call.recording.readyNagranie gotowe do pobrania
call.transcribedTranskrypcja gotowa
call.failedRozmowa nieudana (zajęte / brak odpowiedzi / błąd)
call.outbound.lifecycle_repairedKorekta statusu rozmowy wychodzącej
call.deletion_scheduledRozmowa zaplanowana do usunięcia (RODO)
call.recording.deletedNagranie usunięte (RODO)
contact.createdNowy kontakt utworzony
contact.updatedKontakt zaktualizowany

Poniżej obiekt data każdego zdarzenia. Nazwy pól, typy i wartości słownikowe są częścią kontraktu API i nie zmieniają znaczenia w ramach v1; z czasem mogą dochodzić nowe, opcjonalne pola.

call.completed

Wysyłane po zakończeniu przetwarzania rozmowy. To główna wiadomość dla CRM-a: zawiera link do nagrania, podsumowanie i rozpoznane dane rozmówcy.

{
  "api_version": "2026-06-15",
  "event_id": "1bf3a5e2-...",        // same value as heilo-event-id header
  "event_type": "call.completed",
  "resource_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "created_at": "2026-06-03T12:34:56Z",
  "data": {
    "call_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "direction": "inbound",
    "caller_phone": "+48600100200",
    "customer_phone_e164": "+48600100200",
    "duration": 87,
    "recording_url": "https://www.heilo.io/api/v1/calls/.../recording.mp3?token=...&exp=...",
    "transcript_processed": { "caller_name": "Jan Kowalski", "summary": "...", "service_needed": "..." },
    "transcript_original": "..."
  }
}
PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
direction'inbound' | 'outbound'Kierunek rozmowy.
caller_phonestringNumer telefonu rozmówcy, tak jak zapisany przy rozmowie.
customer_phone_e164stringTen sam numer jeszcze raz — alias ułatwiający mapowanie pól.
durationnumberDługość nagrania w sekundach.
recording_urlstring | nullStały link do nagrania; null, gdy nagranie nie było jeszcze zapisane w chwili przetwarzania.
transcript_processedobjectPrzetworzona analiza rozmowy — patrz spis pól transcript_processed w tej sekcji.
transcript_originalstring | nullSurowa, dosłowna transkrypcja; null, gdy niedostępna.

Heilo może wysłać to samo zdarzenie więcej niż raz, dlatego CRM powinien sprawdzać event_id i nie tworzyć duplikatów. data.call_id łączy wszystkie zdarzenia dotyczące tej samej rozmowy.

transcript_processed — spis pól

Stabilny podzbiór pól, na którym możesz polegać przy mapowaniu do CRM-a. Każde pole jest opcjonalne — ma wartość null, gdy rozmowa nie zawierała tej informacji.

PoleTypOpis
caller_namestring | nullImię i nazwisko rozmówcy, jeśli je podał.
summarystring | nullKrótkie podsumowanie rozmowy.
subjectstring | nullJednolinijkowy tytuł rozmowy (do 80 znaków).
service_neededstring | nullCzego dotyczyła prośba rozmówcy.
services_matchboolean | nullCzy prośba pasuje do usług, które oferujesz.
lead_scorenumber | null (1–10)Ocena jakości leada od 1 do 10.
preferred_datestring | nullTermin wspomniany przez rozmówcę, jeśli padł.
client_citystring | nullMiasto, jeśli padło w rozmowie.
client_addressstring | nullAdres, jeśli padł w rozmowie.
additional_detailsstring | nullDodatkowy kontekst z rozmowy.

Pola, które mogą się pojawić

PoleTypOpis
caller_locationstring | nullOdniesienie geograficzne wykryte w rozmowie.
client_countrystring | nullKraj, jeśli padł w rozmowie.
counterparty_namestring | nullNazwa drugiej strony — tylko rozmowy wychodzące i tryb rozmowy.
detected_languagestringKod języka rozmowy (np. pl); klucz może w ogóle nie wystąpić.
proposal_itemsobject[] | nullZaproponowane działania i decyzje wyciągnięte z rozmowy.

Analiza może zawierać dodatkowe pola — traktuj nieznane pola jako opcjonalne i nie zakładaj ich obecności.

call.outbound.attempted

Wysyłane, gdy próba połączenia wychodzącego osiągnie stan końcowy — także nieudany. completed oznacza, że rozmowa się odbyła i zakończyła normalnie; nagranie i transkrypcja przyjdą osobnymi zdarzeniami.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
agent_user_idstring (uuid)Identyfikator użytkownika Heilo, który dzwonił.
customer_phonestringWybierany numer klienta.
customer_phone_e164stringTen sam numer jeszcze raz — alias ułatwiający mapowanie pól.
outbound_lifecycle'completed' | 'agent_no_answer' | 'customer_no_answer' | 'failed_to_initiate'Stan końcowy, który wywołał zdarzenie; completed oznacza, że rozmowa się odbyła i zakończyła normalnie.
durationnumber | nullCzas rozmowy w sekundach; null, gdy połączenie nie doszło do skutku przy nawiązywaniu albo czas nie jest jeszcze znany.
attempted_atstring (ISO 8601)Moment wysłania zdarzenia (ISO 8601).
has_recordingbooleantrue tylko wtedy, gdy outbound_lifecycle to completed — nagranie przyjdzie wtedy jako call.recording.ready.

call.recording.ready

Wysyłane, gdy plik nagrania jest gotowy. Użyj, jeśli CRM ma pobierać lub archiwizować audio.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
recording_urlstring | nullStały link do nagrania; w rzadkich przypadkach null, gdy nie udało się wygenerować linku.
durationnumber | nullCzas trwania w sekundach; null, gdy jeszcze nieznany.

call.transcribed

Wysyłane w tym samym przebiegu co call.completed — zawiera wyłącznie transkrypcję, bez danych rozmowy i linku do nagrania.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
transcript_originalstring | nullSurowa, dosłowna transkrypcja; null, gdy niedostępna.
transcript_processedobjectPrzetworzona analiza rozmowy — patrz spis pól transcript_processed w tej sekcji.

call.failed

Wysyłane, gdy połączenie wychodzące nie doszło do skutku (brak odpowiedzi, zajęte, błąd przy nawiązywaniu). Dotyczy tylko połączeń wychodzących. Zwykle nie warto tworzyć wtedy leada — wystarczy odnotować próbę kontaktu.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
outbound_lifecycle'agent_no_answer' | 'customer_no_answer' | 'failed_to_initiate'Który etap połączenia wychodzącego się nie powiódł.
failure_reasonstring | nullTechniczny kod przyczyny (np. customer_busy, agent_no_confirmation); może być null.

call.outbound.lifecycle_repaired

Wysyłane, gdy Heilo koryguje wstecznie stan rozmowy wychodzącej (późny sygnał od operatora potwierdził, że rozmowa jednak się odbyła). Zaktualizuj stan rozmowy po swojej stronie.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
previous_lifecycle'agent_only'Stan przed korektą; obecnie zawsze agent_only.
new_lifecycle'completed'Stan po korekcie; obecnie zawsze completed.
repaired_atstring (ISO 8601)Moment korekty (ISO 8601).

call.deletion_scheduled

RODO art. 17: rozmowa jest zaplanowana do usunięcia. CRM powinien przestać używać nagrania i przygotować się na usunięcie danych.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
pending_deletion_atstring (ISO 8601)Kiedy dane zostaną trwale usunięte (ISO 8601).
reason'consent_not_asked' | 'consent_withdrawn' | 'retention_expired' | 'user_erasure'Powód zaplanowania usunięcia.

call.recording.deleted

RODO: nagranie zostało usunięte — recording_url zwraca 410. Usuń albo wyłącz link do nagrania po swojej stronie.

PoleTypOpis
call_idstring (uuid)Identyfikator rozmowy w Heilo — ta sama wartość co resource_id; łączy wszystkie zdarzenia jednej rozmowy.
reasonstring | nullPowód zapisany przy planowaniu usunięcia; może być null.
recording_sidstring | nullIdentyfikator nagrania w Twilio; null, gdy nie dało się go ustalić.
deletion_kind'hard_deleted' | 'twilio_404'hard_deleted = usunięte przez Heilo; twilio_404 = plik już wcześniej zniknął po stronie Twilio.
deleted_atstring (ISO 8601)Moment usunięcia nagrania (ISO 8601).

contact.created

Wysyłane po utworzeniu nowego kontaktu w Heilo. data.contact to pełny obraz nowego kontaktu; nie zawiera notatek ani tagów.

PoleTypOpis
contactobjectPełny obraz nowego kontaktu (pola poniżej).
contact.idstring (uuid)Identyfikator kontaktu w Heilo.
contact.phonestringNumer telefonu kontaktu.
contact.first_namestring | nullnull, jeśli nie podano.
contact.last_namestring | nullnull, jeśli nie podano.
contact.emailstring | nullnull, jeśli nie podano.
contact.companystring | nullnull, jeśli nie podano.

contact.updated

Wysyłane po edycji kontaktu. W przeciwieństwie do contact.created to nie jest pełny obraz: data.diff zawiera tylko zmienione pola.

PoleTypOpis
contact_idstring (uuid)Identyfikator zaktualizowanego kontaktu.
diffobject (partial)Tylko zmienione pola — klucze nieobecne w diff nie były modyfikowane.

Możliwe klucze w diff: first_name, last_name, email, phone, company, notes, tags

webhook.test

Pierwsza wiadomość po utworzeniu subskrypcji i przy każdym ręcznym teście. resource_id to identyfikator subskrypcji (nie rozmowy); pozostałe pola data odzwierciedlają przykład call.completed z przykładowymi wartościami.

PoleTypOpis
_testtrueZawsze true — odróżnia wiadomość testową od prawdziwych zdarzeń.
_messagestringCzytelna informacja, że to test.
_sent_atstring (ISO 8601)Moment wysłania testu (ISO 8601).
Wersjonowanie i roadmap

Wersja API

Wersja API jest oznaczona datą. Drobne zmiany, takie jak nowe pola w odpowiedzi, nie powinny psuć istniejącej integracji.

Aktualna wersja

v1 · 2026-06-15

To nazwa wersji API, nie informacja o dzisiejszej dacie.

Status

Beta

Jeśli kiedyś zmienimy API w sposób wymagający zmian po Twojej stronie, wydamy nową główną wersję, np. v2, i utrzymamy starą wersję przez co najmniej 12 miesięcy.

Planowane funkcje

Te adresy API planujemy dodać w kolejnych wydaniach. Kolejność zależy od potrzeb klientów.

  • GET /contactslista kontaktów
  • POST /contactstworzenie kontaktu (synchronizacja z CRM-a do Heilo)

Brakuje konkretnego adresu API? Napisz na support@heilo.io i opisz, co chcesz zautomatyzować.

Zarządzaj kluczami i webhookami w panelu

Po zalogowaniu wygenerujesz klucze API, dodasz subskrypcje webhooków i sprawdzisz historię wysyłek.