API-referentie
Events
Alles wat er de afgelopen 30 dagen veranderde, als lijst. Om gemiste webhooks in te halen, of om te pollen in plaats van webhooks te gebruiken.
Endpoints
Events opvragen
GET
/api/v1/events
De events van de afgelopen 30 dagen, nieuwste eerst. Je ziet alleen events over gegevens waar je sleutel leesrecht op heeft. Met sort=created_at en filter[created_since] haal je gemiste events op volgorde in.
- Scope
-
events.read— Events ophalen
Queryparameters
| Naam | Type | Omschrijving |
|---|---|---|
limit |
integer | Aantal resultaten per pagina. van 1 tot 100 · standaard: 50 |
cursor |
string | De next_cursor of prev_cursor uit meta van het vorige antwoord. |
sort |
string | created_at houdt de volgorde aan waarin alles gebeurde, -created_at (standaard) toont het nieuwste eerst. een van: -created_at, created_at · standaard: -created_at |
filter[type] |
string | Alleen deze eventtypes, gescheiden door komma's, bijvoorbeeld customer.created,deal.won. maximaal 500 tekens |
filter[created_since] |
string (date-time) | Alleen events vanaf dit tijdstip: ISO 8601 mét tijdzone, bijvoorbeeld 2026-09-14T10:15:00Z. |
Voorbeeldverzoek
curl "https://app.klantly.com/api/v1/events?filter[type]=customer.created%2Cdeal.won&sort=created_at" \
-H "Authorization: Bearer $KLANTLY_API_KEY"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('GET', 'events', [
'query' => [
'filter[type]' => 'customer.created,deal.won',
'sort' => 'created_at',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/events?filter[type]=customer.created%2Cdeal.won&sort=created_at', {
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://app.klantly.com/api/v1/events",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
params={
"filter[type]": "customer.created,deal.won",
"sort": "created_at"
},
)
data = response.json()["data"]Antwoord 200
Het antwoord is een lijst met cursorpaginering: data bevat de objecten, meta de paginering.
{
"data": [
{
"object": "event",
"id": "evt_01j7zs1a2b3c4d5e6f7g8h9j0k",
"type": "customer.created",
"created_at": "2026-09-14T10:15:00Z",
"data": {
"object": {
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
"type": "business",
"status": "lead",
"name": "Jan de Vries",
"email": "jan@example.com",
"phone": "+31 6 12345678",
"company_name": "De Vries Bouw",
"vat_number": "NL123456789B01",
"coc_number": "12345678",
"address": "Dorpsstraat 1",
"postal_code": "3511 AB",
"city": "Utrecht",
"country": "NL",
"email_unsubscribed": false,
"converted_at": null,
"last_activity_at": "2026-09-14T10:15:00Z",
"created_at": "2026-09-14T10:15:00Z",
"updated_at": "2026-09-14T10:15:00Z"
}
}
}
],
"meta": {
"limit": 50,
"next_cursor": "eyJpZCI6IjlkM2Y2YzFlIn0",
"prev_cursor": null
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
422
validation_failed— De invoer is ongeldig.
Event ophalen
GET
/api/v1/events/{event}
Eén event op id, bijvoorbeeld de webhook-id uit een ontvangen bericht.
- Scope
-
events.read— Events ophalen
Padparameters
| Naam | Type | Omschrijving |
|---|---|---|
event verplicht |
string | De id van het event (evt_…). |
Voorbeeldverzoek
curl "https://app.klantly.com/api/v1/events/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70" \
-H "Authorization: Bearer $KLANTLY_API_KEY"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('GET', 'events/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/events/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70', {
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://app.klantly.com/api/v1/events/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
)
data = response.json()["data"]Antwoord 200
{
"data": {
"object": "event",
"id": "evt_01j7zs1a2b3c4d5e6f7g8h9j0k",
"type": "customer.created",
"created_at": "2026-09-14T10:15:00Z",
"data": {
"object": {
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
"type": "business",
"status": "lead",
"name": "Jan de Vries",
"email": "jan@example.com",
"phone": "+31 6 12345678",
"company_name": "De Vries Bouw",
"vat_number": "NL123456789B01",
"coc_number": "12345678",
"address": "Dorpsstraat 1",
"postal_code": "3511 AB",
"city": "Utrecht",
"country": "NL",
"email_unsubscribed": false,
"converted_at": null,
"last_activity_at": "2026-09-14T10:15:00Z",
"created_at": "2026-09-14T10:15:00Z",
"updated_at": "2026-09-14T10:15:00Z"
}
}
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
404
not_found— Niet gevonden.
Het object
Alle velden zijn altijd aanwezig; een veld zonder waarde is null.
| Veld | Type | Omschrijving |
|---|---|---|
object |
string | Altijd "event". |
id |
string | Unieke id (evt_…). Gelijk aan de header webhook-id: gebruik hem om dubbele berichten te herkennen. |
type |
string | Het soort event, bijvoorbeeld customer.created. een van: customer.created, customer.updated, customer.converted, deal.created, deal.updated, deal.stage_changed, deal.won, deal.lost, note.created, note.updated, note.deleted |
created_at |
string (date-time) | Wanneer het gebeurde (UTC). |
data |
object | De inhoud van het event. |
data.object |
object | Het object zoals het na de wijziging was, in dezelfde vorm als in de REST-API (bij note.deleted: zoals het vóór het verwijderen was). |