Klantly Developers

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

NameTypBeschreibung
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
curl "https://app.klantly.com/api/v1/events?filter[type]=customer.created%2Cdeal.won&sort=created_at" \
  -H "Authorization: Bearer $KLANTLY_API_KEY"
PHP
$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'];
JavaScript
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();
Python
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.

Beispielantwort
{
  "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

Zusätzlich kann jeder Endpunkt die allgemeinen Fehler zurückgeben, etwa einen ungültigen Schlüssel oder ein erreichtes Limit. Alle Fehlercodes ansehen.

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

NameTypBeschreibung
event erforderlich string Die ID des Events (evt_…).

Beispielanfrage

cURL
curl "https://app.klantly.com/api/v1/events/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70" \
  -H "Authorization: Bearer $KLANTLY_API_KEY"
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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

Zusätzlich kann jeder Endpunkt die allgemeinen Fehler zurückgeben, etwa einen ungültigen Schlüssel oder ein erreichtes Limit. Alle Fehlercodes ansehen.

Das Objekt

Alle Felder sind immer vorhanden; ein Feld ohne Wert ist null.

FeldTypBeschreibung
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).