Klantly Developers

API-Referenz

Aufgaben

Aufgaben auf dem Aufgabenboard: erstellen, mit einem Kunden oder Deal verknüpfen, verschieben, abschließen und wieder öffnen.

Endpunkte

Aufgaben auflisten

GET /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

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 Das Feld, nach dem sortiert wird; ein Minuszeichen davor bedeutet absteigend. Welche Felder Sie wählen können und was der Standard ist, steht bei diesem Parameter. 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[label_id] string (uuid) Nur Aufgaben mit diesem eigenen Label (ID aus Labels abrufen).
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. Überlappen Sie Ihren vorherigen Zeitpunkt um einige Minuten, weil die Uhr Ihres Systems und die von Klantly nicht exakt gleich laufen und weil eine Änderung kurz nach Ihrem vorherigen Zeitpunkt sonst knapp außerhalb liegen würde. Die Grenze ist inklusiv: etwas, das genau zu diesem Zeitpunkt geändert wurde, zählt mit.

Beispielanfrage

cURL
curl "https://app.klantly.com/api/v1/tasks?filter[status]=open" \
  -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', 'tasks', [
    'query' => [
        'filter[status]' => 'open',
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
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();
Python
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.

Beispielantwort
{
  "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,
      "labels": [
        {
          "object": "deal_label",
          "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
          "name": "HEET",
          "color": "#DC2626",
          "group": "Urgentie"
        }
      ],
      "deal_id": null,
      "deal_labels": [],
      "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

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

Aufgabe abrufen

GET /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Beispielanfrage

cURL
curl "https://app.klantly.com/api/v1/tasks/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', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe erstellen

POST /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. Mit label_ids erhält sie sofort eigene Labels. 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)

FeldTypBeschreibung
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).
label_ids optional array Nur beim Erstellen: IDs der Labels (GET /deal-labels), die die Aufgabe sofort erhält. Labels derselben Gruppe schließen sich gegenseitig aus; ein unbekanntes Label ergibt not_found.

Beispielanfrage

cURL
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"
    }
  ],
  "label_ids": [
    "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
  ]
}'
PHP
$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',
            ],
        ],
        'label_ids' => [
            0 => '4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70',
        ],
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
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"
    }
  ],
  "label_ids": [
    "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
  ]
}),
});

const { data } = await response.json();
Python
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"
            }
        ],
        "label_ids": [
            "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
        ]
    },
)
data = response.json()["data"]

Antwort 201

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe bearbeiten

PATCH /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Body (JSON)

FeldTypBeschreibung
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
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"
}'
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe verschieben

POST /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Body (JSON)

FeldTypBeschreibung
status_id erforderlich string (uuid) Die ID der Spalte, in die die Aufgabe verschoben wird (aus Aufgabenboards auflisten).

Beispielanfrage

cURL
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"
}'
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe abschließen

POST /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Beispielanfrage

cURL
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"
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe wieder öffnen

POST /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Beispielanfrage

cURL
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"
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe abbrechen

POST /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Beispielanfrage

cURL
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"
PHP
$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'];
JavaScript
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();
Python
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

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Labels einer Aufgabe ändern

POST /api/v1/tasks/{task}/labels

Setzt eigene Labels auf die Aufgabe (add) oder entfernt sie (remove), aus demselben Satz wie bei Deals (GET /deal-labels). Labels derselben Gruppe schließen sich aus: HEISS hinzufügen entfernt FRÜHJAHR. Ein Label eines anderen Unternehmens ergibt not_found. Gibt die Aufgabe mit ihren neuen Labels zurück.

Scope
tasks.write — Aufgaben erstellen, bearbeiten, verschieben und abschließen sowie Kommentare schreiben
Erforderliche Funktion
tasks, pipeline

Senden Sie einen Idempotency-Key mit, dann erzeugt ein erneuter Versuch nach einem Timeout keinen doppelten Datensatz.

Pfadparameter

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Body (JSON)

FeldTypBeschreibung
add optional array Ids der Labels, die auf den Deal sollen.
remove optional array Ids der Labels, die entfernt werden sollen.

Beispielanfrage

cURL
curl -X POST "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/labels" \
  -H "Authorization: Bearer $KLANTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
  -d '{
  "add": [
    "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
  ]
}'
PHP
$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/labels', [
    'headers' => [
        'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
    ],
    'json' => [
        'add' => [
            0 => '4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70',
        ],
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/labels', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
  },
  body: JSON.stringify({
  "add": [
    "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
  ]
}),
});

const { data } = await response.json();
Python
import os

import requests

response = requests.post(
    "https://app.klantly.com/api/v1/tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/labels",
    headers={
        "Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
        "Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    },
    json={
        "add": [
            "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70"
        ]
    },
)
data = response.json()["data"]

Antwort 200

Beispielantwort
{
  "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,
    "labels": [
      {
        "object": "deal_label",
        "id": "4b8e2c10-7d3a-4f6e-9a1b-2c3d4e5f6a70",
        "name": "HEET",
        "color": "#DC2626",
        "group": "Urgentie"
      }
    ],
    "deal_id": null,
    "deal_labels": [],
    "completed_at": null,
    "cancelled_at": null,
    "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.

Aufgabe löschen

DELETE /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

NameTypBeschreibung
task erforderlich string (uuid) Die ID (UUID) der Aufgabe.

Beispielanfrage

cURL
curl -X DELETE "https://app.klantly.com/api/v1/tasks/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('DELETE', 'tasks/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
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();
Python
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

Beispielantwort
{
  "data": {
    "object": "note",
    "id": "9d3f7b41-2d6f-4e8c-9b3a-4f5d6e7a8b92",
    "deleted": true
  }
}

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 „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.
labels array<object> Die eigenen Labels der Aufgabe, z. B. HEISS oder GESCHÄFTLICH. Ändern mit POST /tasks/{id}/labels.
labels.object string Immer "deal_label".
labels.id string (uuid) ID des Labels.
labels.name string Name des Labels.
labels.color string Farbe (Hex).
labels.group string Labels derselben Gruppe schließen sich aus; null = mit allem kombinierbar. kann leer sein (null)
deal_id string (uuid) Der Deal (Karte in der Pipeline), zu dem die Aufgabe gehört: ein verknüpfter Deal, der Deal eines verknüpften Angebots, Termins, einer Rechnung oder eines Arbeitsauftrags, oder der offene Deal des Kunden. Null, wenn es keinen gibt. kann leer sein (null)
deal_labels array<object> Die Labels des Deals, zu dem die Aufgabe gehört (deal_id), nur zur Information. Ändern über den Deal (POST /deals/{id}/labels).
deal_labels.object string Immer "deal_label".
deal_labels.id string (uuid) Id des Labels.
deal_labels.name string Name des Labels.
deal_labels.color string Farbe (hex).
deal_labels.group string Labels derselben Gruppe schließen sich aus; null = kombinierbar mit allem. kann leer sein (null)
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).