API Reference v1
Integratiereferentie voor REST + Webhooks (versie 2026-06-15)
Quickstart CRM-integratie
De snelste route om een CRM met Heilo te verbinden. De volledige API-referentie staat hieronder.
Integreer webhook-first: het event call.completed is de primaire gegevensbron (het bevat de opnamekoppeling en het verwerkte transcript). REST /calls is een aanvulling — introspectie en het lezen van geselecteerde metadata.
- Stel een webhook-endpoint beschikbaar in uw CRM of middleware (zonder code: gebruik Zapier/Make — zie de handleiding hieronder).
- Voeg een abonnement toe in Heilo (Instellingen → Integraties) voor call.completed (optioneel ook call.outbound.attempted).
- Ontvang call.completed en verifieer de handtekening (Heilo-Signature-header, HMAC — zie hieronder).
- Ontdubbel op event_id (heilo-event-id-header); data.call_id groepeert events van hetzelfde gesprek.
- Map de velden naar uw CRM: vind/maak een contact op telefoonnummer, maak een lead/deal aan en koppel een activiteit/notitie (samenvatting + opnamekoppeling).
Geen code? De no-code verbindingshandleiding (Zapier/Make) leidt u er stap voor stap doorheen.
Authenticatie
De publieke API gebruikt Bearer-tokens. Genereer een API-sleutel via de kaart "API-sleutels" op de pagina Integraties en stuur deze mee in de header:
Authorization: Bearer hk_live_AbC1MnPq...
Heilo heeft drie authenticatiemodi:
- Bearer (API-sleutels hk_live_…) — voor de publieke API. Geen CSRF, geen cookies.
- Sessiecookies — voor de webapp (heilo.io). NIET gebruiken voor de publieke API.
- HMAC-SHA256 — voor Webhooks die Heilo naar UW endpoint stuurt (u verifieert de signature-header).
| Recht (scope) | Betekenis |
|---|---|
| read.calls | Gesprekken lezen: GET /api/v1/calls, GET /api/v1/calls/:id |
| write.calls, read.contacts, write.contacts, manage.webhooks, manage.api_keys | Gereserveerd voor geplande API-endpoints — vink ze niet alvast aan. |
Het veld environment in het /me-antwoord heeft vandaag altijd de waarde live. Testsleutels zijn gepland.
Base-URL
Alle publieke endpoints bevinden zich onder /api/v1/. Productie:
https://www.heilo.io/api/v1
Endpoints
Elk /api/v1-endpoint vereist Bearer. /me hieronder dient voor introspectie van de sleutel; het lezen van gesprekken staat in de sectie "Calls". Behandel webhooks als de primaire gegevensbron bij het integreren van een CRM — REST is voor introspectie en het lezen van geselecteerde metadata.
/api/v1/meIntrospectie van de API-sleutel — geeft de key id, user_id, scopes en rate limit terug. Handig voor een "connection test" in Zapier/Make.
Request
curl https://www.heilo.io/api/v1/me \ -H "Authorization: Bearer hk_live_AbC1MnPq..."
Response
{
"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" }
}Toepassing: Zapier-verbindingstest tijdens het opzetten van een eigen integratie. Een 200-respons bewijst dat de sleutel + het netwerk werken.
Calls
Lees-endpoints voor gesprekken. Vereisen de scope read.calls.
/api/v1/callsGeef de gesprekken van de organisatie weer. Paginering (page/limit≤100), filters: direction, status, datumbereik (dateFrom/dateTo). Geeft has_more terug.
Queryparameters
| Parameter | Type | Waarden |
|---|---|---|
| page | int | vanaf 1 (standaard 1) |
| limit | int | 1–100 (standaard 20) |
| direction | enum | inbound | outbound |
| status | enum | new | to_call | contacted | qualified |
| dateFrom / dateTo | string | datum YYYY-MM-DD of ISO 8601, bijv. 2026-06-03T12:34:56Z |
Request
curl "https://www.heilo.io/api/v1/calls?limit=20&direction=inbound" \ -H "Authorization: Bearer hk_live_AbC1MnPq..."
Response
{
"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" }
}/api/v1/calls/:idHaal één gesprek op via id. 404 als het niet bij de organisatie van de sleutel hoort of is verwijderd.
Request
curl https://www.heilo.io/api/v1/calls/<id> \ -H "Authorization: Bearer hk_live_AbC1MnPq..."
Opnamebestanden worden NIET via de API beschikbaar gesteld — ze worden gewist conform de wettelijke bewaartermijn (AVG). De API geeft gespreksmetadata en transcripttekst terug.
Rate limits
Uurlimieten per sleutel en per gebruiker (som van alle sleutels). Reset op het hele UTC-uur. Elk verzoek telt mee, ongeacht de responsstatus.
Per sleutel
1000 req/h
Per account (som van sleutels)
5000 req/h
Bij overschrijding geven we 429 terug met een Retry-After-header (seconden tot reset):
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
Fouten
Alle fouten geven een uniforme JSON-vorm terug met error.code (stabiel) en error.message (leesbaar, kan wijzigen). Log de code, niet het bericht.
{
"success": false,
"error": { "code": "RATE_LIMITED", "message": "Per-key rate limit 1000/h exceeded" },
"meta": { "timestamp": "2026-06-03T12:34:56Z" }
}| HTTP | code | Betekenis |
|---|---|---|
| 400 | BAD_REQUEST | Onjuist gevormde query- of body-parameters (algemene validatie) |
| 401 | UNAUTHORIZED | Ontbrekend / ongeldig Bearer-token |
| 402 | SUBSCRIPTION_INACTIVE | Abonnement inactief — verleng de betaling om de sleutel weer in te schakelen |
| 403 | FORBIDDEN | Sleutel heeft niet de vereiste scope |
| 404 | NOT_FOUND | Resource niet gevonden (of behoort aan een andere gebruiker) |
| 422 | VALIDATION_ERROR | Een bedrijfsregel heeft het verzoek geweigerd (bijv. ongeldig telefoonnummer, quota) |
| 429 | RATE_LIMITED | Uurlimiet overschreden (controleer Retry-After) |
| 500 | DATABASE_ERROR | Server-/databasefout — veilig om opnieuw te proberen met backoff |
| 503 | MAINTENANCE | Publieke API tijdelijk uitgeschakeld (kill switch) |
De code SUBSCRIPTION_INACTIVE komt in twee situaties voor: HTTP 402 — het Heilo-abonnement is verlopen (betaling), en HTTP 409 — het webhook-abonnement is gepauzeerd (bijv. bij de actie Test); klik in dat geval eerst op "Opnieuw verifiëren".
Uitgaande Webhooks
Heilo doet na elk event een POST met JSON naar uw endpoint. Abonnementen worden aangemaakt via de kaart "Webhook-abonnementen" — vereist een handshake bij activering. Elk verzoek bevat een HMAC-handtekening die u moet verifiëren:
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 */ }
}Beleid voor opnieuw proberen en pauzeren:
- Tijdelijke fouten (HTTP 408/429/5xx, netwerk) worden opnieuw geprobeerd met exponential backoff (2min, 5min, 30min, 2u) — daarna dead-letter na 5 pogingen.
- Permanente fouten (HTTP 401/403/422) pauzeren het abonnement onmiddellijk — geen nieuwe pogingen.
- 50 opeenvolgende tijdelijke fouten, of 2 opeenvolgende HTTP 410 Gone (bijv. een verwijderd Make-scenario), pauzeren het abonnement eveneens.
- Hervat een gepauzeerd abonnement met "Opnieuw verifiëren" — een nieuwe handshake reactiveert de wachtrij.
Wordt een abonnement automatisch gepauzeerd, dan sturen we een e-mail naar het adres van de accounteigenaar. Dead-letter-events kunt u opnieuw versturen met de knop "Opnieuw versturen" in het Afleverlog — nadat het abonnement opnieuw is geverifieerd.
Verificatiemodi
Heilo ondersteunt twee activeringsmodellen voor webhook-abonnementen. De standaard (permissief) past bij Zapier / Make / typische CRM-endpoints. Strict komt overeen met het model van de Slack Events API — handig voor eigen servers die de challenge synchroon kunnen terugsturen.
Modus permissive (standaard)
Heilo doet een POST van webhook.subscription.verify naar uw URL. Elke 2xx-respons activeert het abonnement. De response body wordt genegeerd. Dit komt overeen met het model van Stripe / GitHub / Twilio.
Modus strict (opt-in)
Heilo doet een POST van webhook.subscription.verify met een challenge-veld. Uw endpoint MOET antwoorden met 2xx en een JSON-body:
{"challenge":"<echo of the challenge field from Heilo's POST>"}U kiest de modus bij het aanmaken van het abonnement (verification_mode in POST /api/v1/webhook-subscriptions, standaard permissive). Het wijzigen van de modus na aanmaak vereist verwijderen + opnieuw aanmaken — bewust, omdat het de contractsemantiek wijzigt.
Limieten: max. 20 actieve abonnementen per account (te overschrijven via env). Een abonnement wordt automatisch gepauzeerd na 50 opeenvolgende tijdelijke fouten of 2 opeenvolgende HTTP 410, en onmiddellijk bij HTTP 401/403/422.
HMAC-verificatie (signing_secret)
Stripe-compatibel formaat. signed_string = "<unix_ts>.<raw_body>" (gescheiden door een punt). Verifieer altijd de RAW request body (vóór het parsen van JSON) — elke normalisatie wijzigt de handtekening.
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);
}Standaardtolerantie van 300s (5 min) voorkomt replay-aanvallen. Serverklokken moeten via NTP gesynchroniseerd zijn.
Het ondertekeningsgeheim tonen we maar één keer — bij het aanmaken van het abonnement. Bent u het kwijt of vermoedt u een lek: verwijder het abonnement en maak het opnieuw aan met dezelfde URL (het adres in Zapier/Make verandert niet). Rotatie van het geheim zonder verwijderen is gepland.
Eventtypes
Kies event_types bij het aanmaken van een abonnement. Elk event heeft een uniek event_id (UUID v5) en wordt per abonnement ontdubbeld.
De eerste gebeurtenis die u ontvangt is webhook.test — een testbericht met data._test = true. Gebruik het om uw velden te mappen of filter het eruit.
| event_type | Omschrijving |
|---|---|
| call.completed | Gesprek afgerond, transcript gereed |
| call.outbound.attempted | Uitgaande belpoging gedaan (vóór verbinding) |
| call.recording.ready | Opnamebestand beschikbaar om te downloaden |
| call.transcribed | Transcript gereed (los van call.completed) |
| call.failed | Gesprek mislukt (in gesprek/niet beantwoord/fout) |
| call.outbound.lifecycle_repaired | Correctie van uitgaande levenscyclus — gespreksstatus hersteld |
| call.deletion_scheduled | Gesprek ingepland voor verwijdering (AVG art. 17, bewaartermijn) |
| call.recording.deleted | Opname verwijderd (AVG) |
| contact.created | Nieuw contact aangemaakt |
| contact.updated | Contact bijgewerkt |
Hieronder het data-object van elk event. Veldnamen, types en enum-waarden maken deel uit van het API-contract en veranderen binnen v1 niet van betekenis; er kunnen in de loop van de tijd nieuwe, optionele velden bijkomen.
call.completed
Verstuurd nadat de opname en het transcript van een afgerond gesprek zijn verwerkt. De primaire gegevensbron voor een CRM — volledige payload (inclusief recording_url en het verwerkte transcript).
{
"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": "..."
}
}| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| direction | 'inbound' | 'outbound' | Gespreksrichting. |
| caller_phone | string | Telefoonnummer van de gesprekspartner, zoals opgeslagen bij het gesprek. |
| customer_phone_e164 | string | Hetzelfde nummer nogmaals — een alias voor eenvoudiger veldmapping. |
| duration | number | Lengte van de opname in seconden. |
| recording_url | string | null | Stabiele link naar de opname; null wanneer de opname op het moment van verwerking nog niet was opgeslagen. |
| transcript_processed | object | Verwerkte gespreksanalyse — zie het transcript_processed-veldoverzicht in deze sectie. |
| transcript_original | string | null | Ruw, letterlijk transcript; null wanneer niet beschikbaar. |
Aflevering is at-least-once en niet gegarandeerd in volgorde — sla idempotent op. Dedup-sleutel: event_id. data.call_id koppelt events van hetzelfde gesprek (bijv. call.completed na call.recording.ready).
transcript_processed — veldoverzicht
De stabiele subset waarop u kunt vertrouwen bij het mappen naar een CRM. Elk veld is optioneel — het is null wanneer het gesprek die informatie niet bevatte.
| Veld | Type | Omschrijving |
|---|---|---|
| caller_name | string | null | Naam van de beller, indien opgegeven. |
| summary | string | null | Korte samenvatting van het gesprek. |
| subject | string | null | Titel van één regel voor het gesprek (max. 80 tekens). |
| service_needed | string | null | Waar de beller om vroeg. |
| services_match | boolean | null | Of het verzoek past bij de diensten die u aanbiedt. |
| lead_score | number | null (1–10) | Inschatting van de leadkwaliteit van 1 tot 10. |
| preferred_date | string | null | Door de beller genoemde datum of tijd, indien genoemd. |
| client_city | string | null | Stad, indien genoemd. |
| client_address | string | null | Adres, indien genoemd. |
| additional_details | string | null | Extra context uit het gesprek. |
Velden die kunnen voorkomen
| Veld | Type | Omschrijving |
|---|---|---|
| caller_location | string | null | In het gesprek gedetecteerde geografische verwijzing. |
| client_country | string | null | Land, indien genoemd. |
| counterparty_name | string | null | Naam van de andere partij — alleen uitgaande gesprekken en gespreksmodus. |
| detected_language | string | Taalcode van het gesprek (bijv. pl); de sleutel kan volledig ontbreken. |
| proposal_items | object[] | null | Voorgestelde vervolgacties en beslissingen uit het gesprek. |
De analyse kan extra velden bevatten — behandel onbekende velden als optioneel en ga er nooit van uit dat ze aanwezig zijn.
call.outbound.attempted
Verstuurd wanneer een uitgaande belpoging een eindstatus bereikt — ook bij mislukkingen. completed betekent dat het gesprek tot stand kwam en normaal eindigde; de opname en het transcript volgen als aparte events.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| agent_user_id | string (uuid) | ID van de Heilo-gebruiker die het gesprek startte. |
| customer_phone | string | Het gebelde klantnummer. |
| customer_phone_e164 | string | Hetzelfde nummer nogmaals — een alias voor eenvoudiger veldmapping. |
| outbound_lifecycle | 'completed' | 'agent_no_answer' | 'customer_no_answer' | 'failed_to_initiate' | Eindstatus die het event veroorzaakte; completed betekent dat het gesprek tot stand kwam en normaal eindigde. |
| duration | number | null | Gespreksduur in seconden; null wanneer het gesprek bij het opzetten mislukte of de duur nog niet bekend is. |
| attempted_at | string (ISO 8601) | Moment waarop het event is verstuurd (ISO 8601). |
| has_recording | boolean | true alleen wanneer outbound_lifecycle completed is — de opname volgt dan als call.recording.ready. |
call.recording.ready
Verstuurd zodra het opnamebestand beschikbaar is. Gebruik het om de audio op te halen of te archiveren.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| recording_url | string | null | Stabiele link naar de opname; in zeldzame gevallen null wanneer de link niet kon worden gegenereerd. |
| duration | number | null | Duur in seconden; null wanneer nog niet bekend. |
call.transcribed
Verstuurd in dezelfde verwerkingsronde als call.completed — bevat alleen het transcript, zonder gespreksgegevens of opnamelink.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| transcript_original | string | null | Ruw, letterlijk transcript; null wanneer niet beschikbaar. |
| transcript_processed | object | Verwerkte gespreksanalyse — zie het transcript_processed-veldoverzicht in deze sectie. |
call.failed
Verstuurd wanneer een uitgaand gesprek niet tot stand kwam (geen antwoord, bezet, fout bij opzetten). Geldt alleen voor uitgaande gesprekken. Meestal is een nieuwe lead niet nodig — leg een contactpoging vast.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| outbound_lifecycle | 'agent_no_answer' | 'customer_no_answer' | 'failed_to_initiate' | Welke fase van het uitgaande gesprek mislukte. |
| failure_reason | string | null | Machineleesbare foutcode (bijv. customer_busy, agent_no_confirmation); kan null zijn. |
call.outbound.lifecycle_repaired
Verstuurd wanneer Heilo de status van een uitgaand gesprek achteraf corrigeert (een late bevestiging van de provider toonde aan dat het gesprek toch tot stand kwam). Werk de gespreksstatus aan uw kant bij.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| previous_lifecycle | 'agent_only' | Status vóór de correctie; momenteel altijd agent_only. |
| new_lifecycle | 'completed' | Status na de correctie; momenteel altijd completed. |
| repaired_at | string (ISO 8601) | Moment van de correctie (ISO 8601). |
call.deletion_scheduled
AVG art. 17: het gesprek is ingepland voor verwijdering. Uw CRM moet stoppen met het gebruik van de opname en zich voorbereiden op het verwijderen van de gegevens.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| pending_deletion_at | string (ISO 8601) | Wanneer de gegevens definitief worden verwijderd (ISO 8601). |
| reason | 'consent_not_asked' | 'consent_withdrawn' | 'retention_expired' | 'user_erasure' | Reden voor de geplande verwijdering. |
call.recording.deleted
AVG: de opname is verwijderd — recording_url geeft 410 terug. Verwijder of deactiveer de opnamelink aan uw kant.
| Veld | Type | Omschrijving |
|---|---|---|
| call_id | string (uuid) | Gespreks-ID in Heilo — dezelfde waarde als resource_id; koppelt alle events van één gesprek. |
| reason | string | null | Reden vastgelegd bij het inplannen van de verwijdering; kan null zijn. |
| recording_sid | string | null | Twilio-opname-ID; null wanneer deze niet kon worden bepaald. |
| deletion_kind | 'hard_deleted' | 'twilio_404' | hard_deleted = verwijderd door Heilo; twilio_404 = het bestand was aan de kant van Twilio al verdwenen. |
| deleted_at | string (ISO 8601) | Moment van verwijdering van de opname (ISO 8601). |
contact.created
Verstuurd wanneer in Heilo een nieuw contact wordt aangemaakt. data.contact is een volledige momentopname van het nieuwe contact; notities en tags zitten er niet in.
| Veld | Type | Omschrijving |
|---|---|---|
| contact | object | Volledige momentopname van het nieuwe contact (velden hieronder). |
| contact.id | string (uuid) | Contact-ID in Heilo. |
| contact.phone | string | Telefoonnummer van het contact. |
| contact.first_name | string | null | null wanneer niet opgegeven. |
| contact.last_name | string | null | null wanneer niet opgegeven. |
| contact.email | string | null | null wanneer niet opgegeven. |
| contact.company | string | null | null wanneer niet opgegeven. |
contact.updated
Verstuurd wanneer een contact wordt bewerkt. Anders dan bij contact.created is dit geen momentopname: data.diff bevat alleen de gewijzigde velden.
| Veld | Type | Omschrijving |
|---|---|---|
| contact_id | string (uuid) | ID van het bijgewerkte contact. |
| diff | object (partial) | Alleen de gewijzigde velden — sleutels die in diff ontbreken, zijn niet gewijzigd. |
Mogelijke sleutels in diff: first_name, last_name, email, phone, company, notes, tags
webhook.test
Het eerste bericht na het aanmaken van een abonnement en bij elke handmatige test. resource_id is het abonnements-ID (geen gespreks-ID); de overige data-velden spiegelen het call.completed-voorbeeld met voorbeeldwaarden.
| Veld | Type | Omschrijving |
|---|---|---|
| _test | true | Altijd true — onderscheidt het testbericht van echte events. |
| _message | string | Leesbare melding dat dit een test is. |
| _sent_at | string (ISO 8601) | Moment waarop de test is verstuurd (ISO 8601). |
Versiebeheer & roadmap
Versiebeheer
De Heilo API gebruikt een datumgestempelde versie. Alleen breaking changes verhogen de hoofdversie (v1 → v2). Velden of endpoints toevoegen is niet-brekend.
Huidige versie
v1 · 2026-06-15
De datum is de versie-identificatie van de API (datumgestempeld), niet de datum van vandaag.
Status
Beta
Achterwaarts compatibel: nieuwe responsvelden, nieuwe event_types, nieuwe endpoints. Breaking change = nieuwe hoofdversie (v2). Oude versie minimaal 12 maanden ondersteund na aankondiging van v2.
Roadmap (v1.1+)
Endpoints gepland voor komende v1.X-releases. Geen harde toezegging — de richting hangt af van feedback.
- GET /contacts — contacten opvragen
- POST /contacts — contact aanmaken (synchroniseren vanuit CRM naar Heilo)
Heeft u een endpoint nodig? Mail support@heilo.io met uw use-case — we prioriteren de roadmap op basis van werkelijke vraag.
Beheer sleutels en webhooks in het paneel
Na het inloggen genereert u API-sleutels, voegt u webhook-abonnementen toe en bekijkt u het verzendlogboek.