API-Referenz
Events
Alles, was sich in den letzten 30 Tagen geändert hat, als Liste. Um verpasste Webhooks nachzuholen oder um abzufragen, statt Webhooks zu verwenden.
Endpunkte
Events auflisten
GET
/api/v1/events
Die Events der letzten 30 Tage, neueste zuerst. Sie sehen nur Events zu Daten, auf die Ihr Schlüssel Leserechte hat. Mit sort=created_at und filter[created_since] holen Sie verpasste Events der Reihe nach nach.
- Scope
-
events.read— Events abrufen
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
limit |
integer | Anzahl der Ergebnisse pro Seite. von 1 bis 100 · Standard: 50 |
cursor |
string | Der next_cursor oder prev_cursor aus meta der vorherigen Antwort. |
sort |
string | created_at hält die Reihenfolge ein, in der alles geschah, -created_at (Standard) zeigt das Neueste zuerst. einer von: -created_at, created_at · Standard: -created_at |
filter[type] |
string | Nur diese Event-Typen, durch Kommas getrennt, zum Beispiel customer.created,deal.won. höchstens 500 Zeichen |
filter[created_since] |
string (date-time) | Nur Events ab diesem Zeitpunkt: ISO 8601 mit Zeitzone, zum Beispiel 2026-09-14T10:15:00Z. |
Beispielanfrage
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"]Antwort 200
Die Antwort ist eine Liste mit Cursor-Paginierung: data enthält die Objekte, meta die Paginierung.
{
"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
}
}Mögliche Fehler
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig.
Event abrufen
GET
/api/v1/events/{event}
Ein Event nach ID, zum Beispiel die webhook-id einer empfangenen Nachricht.
- Scope
-
events.read— Events abrufen
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
event erforderlich |
string | Die ID des Events (evt_…). |
Beispielanfrage
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"]Antwort 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"
}
}
}
}Mögliche Fehler
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
404
not_found— Nicht gefunden.
Das Objekt
Alle Felder sind immer vorhanden; ein Feld ohne Wert ist null.
| Feld | Typ | Beschreibung |
|---|---|---|
object |
string | Immer „event“. |
id |
string | Eindeutige ID (evt_…). Gleich dem Header webhook-id: Verwenden Sie sie, um doppelte Nachrichten zu erkennen. |
type |
string | Die Art des Events, zum Beispiel customer.created. einer von: 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) | Wann es geschah (UTC). |
data |
object | Der Inhalt des Events. |
data.object |
object | Das Objekt, wie es nach der Änderung war, in derselben Form wie in der REST-API (bei note.deleted: wie es vor dem Löschen war). |