API-Referenz
Aufgaben
Aufgaben auf dem Aufgabenboard: erstellen, mit einem Kunden oder Deal verknüpfen, verschieben, abschließen und wieder öffnen.
Endpunkte
-
GET
/tasksAufgaben auflisten -
GET
/tasks/{task}Aufgabe abrufen -
POST
/tasksAufgabe erstellen -
PATCH
/tasks/{task}Aufgabe bearbeiten -
POST
/tasks/{task}/moveAufgabe verschieben -
POST
/tasks/{task}/completeAufgabe abschließen -
POST
/tasks/{task}/reopenAufgabe wieder öffnen -
POST
/tasks/{task}/cancelAufgabe abbrechen -
DELETE
/tasks/{task}Aufgabe löschen
Aufgaben auflisten
/api/v1/tasks
Eine Liste von Aufgaben, neueste zuerst. Filtern Sie nach Status, Priorität, Benutzer, Board, Spalte, Kunde oder Änderungsdatum.
- Scope
-
tasks.read— Aufgaben, Boards und Kommentare lesen - Erforderliche Funktion
tasks
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 | Sortierung nach created_at oder updated_at; ein Minuszeichen davor sortiert absteigend. einer von: -created_at, created_at, -updated_at, updated_at · Standard: -created_at |
filter[status]
|
string | Nur Aufgaben mit diesem Status: open, in_progress, completed oder cancelled. einer von: open, in_progress, completed, cancelled |
filter[priority]
|
string | Nur Aufgaben mit dieser Priorität. einer von: low, normal, high, urgent |
filter[assigned_user_id]
|
string | Nur was diesem Benutzer zugewiesen ist (die ID aus Benutzer auflisten). |
filter[board_id]
|
string (uuid) | Nur Aufgaben auf diesem Board. |
filter[status_id]
|
string (uuid) | Nur Aufgaben in dieser Spalte. |
filter[customer_id]
|
string (uuid) | Nur was zu diesem Kunden gehört. |
filter[updated_since]
|
string (date-time) | Nur was seit diesem Zeitpunkt geändert wurde: ISO 8601 mit Zeitzone, zum Beispiel 2026-09-14T10:15:00Z. Praktisch zum Synchronisieren. |
Beispielanfrage
curl "https://app.klantly.com/api/v1/tasks?filter[status]=open" \
-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', 'tasks', [
'query' => [
'filter[status]' => 'open',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks?filter[status]=open', {
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/tasks",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
params={
"filter[status]": "open"
},
)
data = response.json()["data"]Antwort 200
Die Antwort ist eine Liste mit Cursor-Paginierung: data enthält die Objekte, meta die Paginierung.
{
"data": [
{
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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.
Aufgabe abrufen
/api/v1/tasks/{task}
Eine Aufgabe nach ID, mit ihren Verknüpfungen und ob es noch offene Aktionen gibt.
- Scope
-
tasks.read— Aufgaben, Boards und Kommentare lesen - Erforderliche Funktion
tasks
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Beispielanfrage
curl "https://app.klantly.com/api/v1/tasks/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', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/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/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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.
Aufgabe erstellen
/api/v1/tasks
Erstellt eine Aufgabe. Ohne status_id landet sie in der offenen Spalte des Standardboards. Verknüpfen Sie sie mit links mit einem Kunden, Deal, Termin, Arbeitsauftrag, Angebot oder einer Rechnung. Der zugewiesene Benutzer erhält eine Benachrichtigung, genau wie auf dem Bildschirm.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
title
erforderlich
|
string | Titel der Aufgabe. höchstens 500 Zeichen |
description
optional
|
string | Beschreibung. kann leer sein (null) · höchstens 10000 Zeichen |
priority
optional
|
string | low, normal (Standard), high oder urgent. einer von: low, normal, high, urgent |
due_date
optional
|
string (date) | Frist als JJJJ-MM-TT, oder null. kann leer sein (null) |
assigned_user_id
optional
|
string | Der Benutzer, der die Aufgabe erledigt, oder null. kann leer sein (null) |
status_id
optional
|
string (uuid) | Die Spalte auf dem Board. Beim Erstellen optional; ohne Spalte: die offene Spalte des Standardboards. kann leer sein (null) |
links
optional
|
array | Die Datensätze, zu denen die Aufgabe gehört (höchstens 20). |
Beispielanfrage
curl -X POST "https://app.klantly.com/api/v1/tasks" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
-d '{
"title": "Offerte nabellen",
"due_date": "2026-10-01",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
]
}'$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('POST', 'tasks', [
'headers' => [
'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
],
'json' => [
'title' => 'Offerte nabellen',
'due_date' => '2026-10-01',
'assigned_user_id' => 'usr_0k3j9x21m4zq8p',
'links' => [
0 => [
'object' => 'customer',
'id' => '9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70',
],
],
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
},
body: JSON.stringify({
"title": "Offerte nabellen",
"due_date": "2026-10-01",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
]
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://app.klantly.com/api/v1/tasks",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
"Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
},
json={
"title": "Offerte nabellen",
"due_date": "2026-10-01",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
]
},
)
data = response.json()["data"]Antwort 201
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Aufgabe bearbeiten
/api/v1/tasks/{task}
Ändert nur die Felder, die Sie mitsenden. links ersetzt die Verknüpfungen als Ganzes; Verknüpfungen, die die API nicht zeigt (etwa mit einem Gespräch), bleiben bestehen, und dieselben Verknüpfungen erneut zu senden ändert nichts. Eine Änderung erscheint wie auf dem Bildschirm im Verlauf der Aufgabe. Spalte und Status ändern Sie mit Verschieben, Abschließen, Wieder öffnen oder Abbrechen.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie das ETag in If-Match mit, dann überschreiben Sie nie versehentlich eine neuere Version.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
title
optional
|
string | Titel der Aufgabe. höchstens 500 Zeichen |
description
optional
|
string | Beschreibung. kann leer sein (null) · höchstens 10000 Zeichen |
priority
optional
|
string | low, normal (Standard), high oder urgent. einer von: low, normal, high, urgent |
due_date
optional
|
string (date) | Frist als JJJJ-MM-TT, oder null. kann leer sein (null) |
assigned_user_id
optional
|
string | Der Benutzer, der die Aufgabe erledigt, oder null. kann leer sein (null) |
links
optional
|
array | Die Datensätze, zu denen die Aufgabe gehört (höchstens 20). |
Beispielanfrage
curl -X PATCH "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"priority": "high"
}'$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('PATCH', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70', [
'json' => [
'priority' => 'high',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"priority": "high"
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
json={
"priority": "high"
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
404
not_found— Nicht gefunden. -
412
precondition_failed— Der Datensatz wurde inzwischen geändert.
Aufgabe verschieben
/api/v1/tasks/{task}/move
Verschiebt die Aufgabe in eine andere Spalte, genau wie das Ziehen auf dem Board. Die Spalte bestimmt den Status. In eine abgeschlossene Spalte geht es nicht, solange offene Aktionen bestehen.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
status_id
erforderlich
|
string (uuid) | Die ID der Spalte, in die die Aufgabe verschoben wird (aus Aufgabenboards auflisten). |
Beispielanfrage
curl -X POST "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/move" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
-d '{
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8"
}'$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('POST', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/move', [
'headers' => [
'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
],
'json' => [
'status_id' => '9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/move', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
},
body: JSON.stringify({
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8"
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/move",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
"Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
},
json={
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8"
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
404
not_found— Nicht gefunden. -
409
invalid_state_transition— Diese Aktion ist im aktuellen Status nicht möglich. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Aufgabe abschließen
/api/v1/tasks/{task}/complete
Schließt die Aufgabe ab. Hat sie noch offene Aktionen, folgt 409: Schließen Sie diese zuerst in Klantly ab oder überspringen Sie sie.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Beispielanfrage
curl -X POST "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/complete" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('POST', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/complete', [
'headers' => [
'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/complete', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
},
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/complete",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
"Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
409
invalid_state_transition— Diese Aktion ist im aktuellen Status nicht möglich. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Aufgabe wieder öffnen
/api/v1/tasks/{task}/reopen
Setzt eine abgeschlossene oder abgebrochene Aufgabe zurück auf offen.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Beispielanfrage
curl -X POST "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/reopen" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('POST', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/reopen', [
'headers' => [
'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/reopen', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
},
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/reopen",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
"Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Aufgabe abbrechen
/api/v1/tasks/{task}/cancel
Bricht die Aufgabe ab.
- Scope
-
tasks.write— Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben - Erforderliche Funktion
tasks
Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Beispielanfrage
curl -X POST "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/cancel" \
-H "Authorization: Bearer $KLANTLY_API_KEY" \
-H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f"$client = new \GuzzleHttp\Client([
'base_uri' => 'https://app.klantly.com/api/v1/',
'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);
$response = $client->request('POST', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/cancel', [
'headers' => [
'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/cancel', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
},
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/cancel",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
"Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "task",
"id": "9d3f7fc5-6bad-4c2a-9f7e-8d9bacbdced6",
"title": "Offerte nabellen",
"description": null,
"status": "open",
"priority": "normal",
"due_date": "2026-10-01",
"board_id": "9d3f80e6-7cbe-4d3b-8a8f-9eacbdcedfe7",
"status_id": "9d3f8207-8dcf-4e4c-9b9a-afbdcedfe0f8",
"assigned_user_id": "usr_0k3j9x21m4zq8p",
"links": [
{
"object": "customer",
"id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70"
}
],
"has_open_actions": false,
"completed_at": null,
"cancelled_at": null,
"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. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Aufgabe löschen
/api/v1/tasks/{task}
Löscht die Aufgabe endgültig, mit ihren Kommentaren und Aktionen.
- Scope
-
tasks.delete— Aufgaben löschen - Erforderliche Funktion
tasks
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
task erforderlich |
string (uuid) | Die ID (UUID) der Aufgabe. |
Beispielanfrage
curl -X DELETE "https://app.klantly.com/api/v1/tasks/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('DELETE', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');
$data = json_decode((string) $response->getBody(), true)['data'];const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.delete(
"https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
headers={
"Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
},
)
data = response.json()["data"]Antwort 200
{
"data": {
"object": "note",
"id": "9d3f7b41-2d6f-4e8c-9b3a-4f5d6e7a8b92",
"deleted": true
}
}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 „task“. |
id |
string (uuid) | Eindeutige ID (UUID). |
title |
string | Titel der Aufgabe. |
description |
string | Beschreibung. kann leer sein (null) |
status |
string | open, in_progress (in Arbeit), completed (abgeschlossen) oder cancelled (abgebrochen); ergibt sich aus der Spalte. einer von: open, in_progress, completed, cancelled |
priority |
string | low, normal (Standard), high oder urgent. einer von: low, normal, high, urgent |
due_date |
string (date) | Frist als JJJJ-MM-TT, oder null. kann leer sein (null) |
board_id |
string (uuid) | Das Board, auf dem die Aufgabe steht. kann leer sein (null) |
status_id |
string (uuid) | Die Spalte auf dem Board. Beim Erstellen optional; ohne Spalte: die offene Spalte des Standardboards. kann leer sein (null) |
assigned_user_id |
string | Der Benutzer, der die Aufgabe erledigt, oder null. kann leer sein (null) |
links |
array<object> | Die Datensätze, zu denen die Aufgabe gehört (höchstens 20). |
links.object |
string | Art des Datensatzes: customer, deal, appointment, work_order, quote oder invoice. einer von: customer, deal, appointment, work_order, quote, invoice |
links.id |
string (uuid) | ID (UUID) des Datensatzes. |
has_open_actions |
boolean | Gibt es noch offene Aktionen? Dann kann die Aufgabe nicht abgeschlossen werden. |
completed_at |
string (date-time) | Wann die Aufgabe abgeschlossen wurde. kann leer sein (null) |
cancelled_at |
string (date-time) | Wann die Aufgabe abgebrochen wurde. kann leer sein (null) |
created_at |
string (date-time) | Erstellt am (UTC). |
updated_at |
string (date-time) | Zuletzt geändert am (UTC). |