Référence de l'API
Tâches
Les tâches du tableau des tâches : créer, lier à un client ou un deal, déplacer, terminer et rouvrir.
Endpoints
-
GET
/tasksLister les tâches -
GET
/tasks/{task}Récupérer une tâche -
POST
/tasksCréer une tâche -
PATCH
/tasks/{task}Modifier une tâche -
POST
/tasks/{task}/moveDéplacer une tâche -
POST
/tasks/{task}/completeTerminer une tâche -
POST
/tasks/{task}/reopenRouvrir une tâche -
POST
/tasks/{task}/cancelAnnuler une tâche -
DELETE
/tasks/{task}Supprimer une tâche
Lister les tâches
/api/v1/tasks
Une liste de tâches, de la plus récente à la plus ancienne. Filtrez par statut, priorité, utilisateur, tableau, colonne, client ou date de modification.
- Scope
-
tasks.read— Lire les tâches, les tableaux et les commentaires - Fonctionnalité requise
tasks
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
limit
|
integer | Nombre de résultats par page. de 1 à 100 · par défaut : 50 |
cursor
|
string | Le next_cursor ou prev_cursor de meta dans la réponse précédente. |
sort
|
string | Tri par created_at ou updated_at ; un signe moins devant trie par ordre décroissant. l'une des valeurs : -created_at, created_at, -updated_at, updated_at · par défaut : -created_at |
filter[status]
|
string | Uniquement les tâches de ce statut : open, in_progress, completed ou cancelled. l'une des valeurs : open, in_progress, completed, cancelled |
filter[priority]
|
string | Uniquement les tâches de cette priorité. l'une des valeurs : low, normal, high, urgent |
filter[assigned_user_id]
|
string | Uniquement ce qui est assigné à cet utilisateur (l’id de Lister les utilisateurs). |
filter[board_id]
|
string (uuid) | Uniquement les tâches de ce tableau. |
filter[status_id]
|
string (uuid) | Uniquement les tâches de cette colonne. |
filter[customer_id]
|
string (uuid) | Uniquement ce qui appartient à ce client. |
filter[updated_since]
|
string (date-time) | Uniquement ce qui a changé depuis ce moment : ISO 8601 avec fuseau horaire, par exemple 2026-09-14T10:15:00Z. Pratique pour synchroniser. |
Exemple de requête
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"]Réponse 200
La réponse est une liste avec pagination par curseur : data contient les objets, meta la pagination.
{
"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
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
422
validation_failed— Les données saisies ne sont pas valides.
Récupérer une tâche
/api/v1/tasks/{task}
Une tâche par id, avec ses liens et l’indication d’actions encore ouvertes.
- Scope
-
tasks.read— Lire les tâches, les tableaux et les commentaires - Fonctionnalité requise
tasks
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
404
not_found— Introuvable.
Créer une tâche
/api/v1/tasks
Crée une tâche. Sans status_id, elle arrive dans la colonne ouverte du tableau par défaut. Avec links, liez-la à un client, un deal, un rendez-vous, un bon d’intervention, un devis ou une facture. L’utilisateur assigné reçoit une notification, comme à l’écran.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez une Idempotency-Key : une nouvelle tentative après un délai d'attente ne crée alors jamais de doublon.
Corps (JSON)
| Champ | Type | Description |
|---|---|---|
title
obligatoire
|
string | Titre de la tâche. au maximum 500 caractères |
description
facultatif
|
string | Description. peut être vide (null) · au maximum 10000 caractères |
priority
facultatif
|
string | low, normal (par défaut), high ou urgent. l'une des valeurs : low, normal, high, urgent |
due_date
facultatif
|
string (date) | Échéance au format AAAA-MM-JJ, ou null. peut être vide (null) |
assigned_user_id
facultatif
|
string | L’utilisateur qui réalise la tâche, ou null. peut être vide (null) |
status_id
facultatif
|
string (uuid) | La colonne du tableau. Facultatif à la création ; sans colonne : la colonne ouverte du tableau par défaut. peut être vide (null) |
links
facultatif
|
array | Les enregistrements auxquels la tâche appartient (20 au maximum). |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
422
validation_failed— Les données saisies ne sont pas valides. -
422
unknown_field— Les données contiennent un champ inconnu. -
415
unsupported_media_type— Ce format n'est pas pris en charge. -
413
payload_too_large— Le corps de la requête est trop volumineux. -
422
idempotency_key_reused— Cette Idempotency-Key a déjà été utilisée pour une autre requête. -
409
idempotency_in_progress— Une requête avec cette Idempotency-Key est encore en cours.
Modifier une tâche
/api/v1/tasks/{task}
Ne modifie que les champs envoyés. links remplace l’ensemble des liens ; les liens que l’API n’affiche pas (par exemple avec une conversation) sont conservés, et renvoyer les mêmes liens ne change rien. Une modification apparaît dans l’historique de la tâche, comme à l’écran. Pour changer la colonne ou le statut, utilisez déplacer, terminer, rouvrir ou annuler.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez l'ETag dans If-Match : vous n'écraserez jamais par erreur une version plus récente.
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Corps (JSON)
| Champ | Type | Description |
|---|---|---|
title
facultatif
|
string | Titre de la tâche. au maximum 500 caractères |
description
facultatif
|
string | Description. peut être vide (null) · au maximum 10000 caractères |
priority
facultatif
|
string | low, normal (par défaut), high ou urgent. l'une des valeurs : low, normal, high, urgent |
due_date
facultatif
|
string (date) | Échéance au format AAAA-MM-JJ, ou null. peut être vide (null) |
assigned_user_id
facultatif
|
string | L’utilisateur qui réalise la tâche, ou null. peut être vide (null) |
links
facultatif
|
array | Les enregistrements auxquels la tâche appartient (20 au maximum). |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
422
validation_failed— Les données saisies ne sont pas valides. -
422
unknown_field— Les données contiennent un champ inconnu. -
415
unsupported_media_type— Ce format n'est pas pris en charge. -
413
payload_too_large— Le corps de la requête est trop volumineux. -
404
not_found— Introuvable. -
412
precondition_failed— L'enregistrement a été modifié entre-temps.
Déplacer une tâche
/api/v1/tasks/{task}/move
Déplace la tâche vers une autre colonne, comme un glisser-déposer sur le tableau. La colonne détermine le statut. Impossible vers une colonne terminée tant qu’il reste des actions ouvertes.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez une Idempotency-Key : une nouvelle tentative après un délai d'attente ne crée alors jamais de doublon.
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Corps (JSON)
| Champ | Type | Description |
|---|---|---|
status_id
obligatoire
|
string (uuid) | L’id de la colonne vers laquelle la tâche est déplacée (de Lister les tableaux de tâches). |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
422
validation_failed— Les données saisies ne sont pas valides. -
422
unknown_field— Les données contiennent un champ inconnu. -
415
unsupported_media_type— Ce format n'est pas pris en charge. -
413
payload_too_large— Le corps de la requête est trop volumineux. -
404
not_found— Introuvable. -
409
invalid_state_transition— Cette action n'est pas possible dans le statut actuel. -
422
idempotency_key_reused— Cette Idempotency-Key a déjà été utilisée pour une autre requête. -
409
idempotency_in_progress— Une requête avec cette Idempotency-Key est encore en cours.
Terminer une tâche
/api/v1/tasks/{task}/complete
Termine la tâche. S’il reste des actions ouvertes, vous recevez une 409 : terminez-les ou ignorez-les d’abord dans Klantly.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez une Idempotency-Key : une nouvelle tentative après un délai d'attente ne crée alors jamais de doublon.
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
404
not_found— Introuvable. -
409
invalid_state_transition— Cette action n'est pas possible dans le statut actuel. -
422
idempotency_key_reused— Cette Idempotency-Key a déjà été utilisée pour une autre requête. -
409
idempotency_in_progress— Une requête avec cette Idempotency-Key est encore en cours.
Rouvrir une tâche
/api/v1/tasks/{task}/reopen
Remet une tâche terminée ou annulée au statut ouvert.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez une Idempotency-Key : une nouvelle tentative après un délai d'attente ne crée alors jamais de doublon.
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
404
not_found— Introuvable. -
422
idempotency_key_reused— Cette Idempotency-Key a déjà été utilisée pour une autre requête. -
409
idempotency_in_progress— Une requête avec cette Idempotency-Key est encore en cours.
Annuler une tâche
/api/v1/tasks/{task}/cancel
Annule la tâche.
- Scope
-
tasks.write— Créer, modifier, déplacer et terminer des tâches, et publier des commentaires - Fonctionnalité requise
tasks
Envoyez une Idempotency-Key : une nouvelle tentative après un délai d'attente ne crée alors jamais de doublon.
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Exemple de requête
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"]Réponse 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"
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
404
not_found— Introuvable. -
422
idempotency_key_reused— Cette Idempotency-Key a déjà été utilisée pour une autre requête. -
409
idempotency_in_progress— Une requête avec cette Idempotency-Key est encore en cours.
Supprimer une tâche
/api/v1/tasks/{task}
Supprime définitivement la tâche, avec ses commentaires et ses actions.
- Scope
-
tasks.delete— Supprimer des tâches - Fonctionnalité requise
tasks
Paramètres de chemin
| Nom | Type | Description |
|---|---|---|
task obligatoire |
string (uuid) | L’id (UUID) de la tâche. |
Exemple de requête
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"]Réponse 200
{
"data": {
"object": "note",
"id": "9d3f7b41-2d6f-4e8c-9b3a-4f5d6e7a8b92",
"deleted": true
}
}Erreurs possibles
-
403
insufficient_scope— Cette clé API n'a pas accès à cette action. -
404
not_found— Introuvable.
L'objet
Tous les champs sont toujours présents ; un champ sans valeur vaut null.
| Champ | Type | Description |
|---|---|---|
object |
string | Toujours « task ». |
id |
string (uuid) | Id unique (UUID). |
title |
string | Titre de la tâche. |
description |
string | Description. peut être vide (null) |
status |
string | open, in_progress (en cours), completed (terminée) ou cancelled (annulée) ; découle de la colonne. l'une des valeurs : open, in_progress, completed, cancelled |
priority |
string | low, normal (par défaut), high ou urgent. l'une des valeurs : low, normal, high, urgent |
due_date |
string (date) | Échéance au format AAAA-MM-JJ, ou null. peut être vide (null) |
board_id |
string (uuid) | Le tableau sur lequel se trouve la tâche. peut être vide (null) |
status_id |
string (uuid) | La colonne du tableau. Facultatif à la création ; sans colonne : la colonne ouverte du tableau par défaut. peut être vide (null) |
assigned_user_id |
string | L’utilisateur qui réalise la tâche, ou null. peut être vide (null) |
links |
array<object> | Les enregistrements auxquels la tâche appartient (20 au maximum). |
links.object |
string | Type d’enregistrement : customer, deal, appointment, work_order, quote ou invoice. l'une des valeurs : customer, deal, appointment, work_order, quote, invoice |
links.id |
string (uuid) | Id (UUID) de l’enregistrement. |
has_open_actions |
boolean | Reste-t-il des actions ouvertes sur la tâche ? Elle ne peut alors pas être terminée. |
completed_at |
string (date-time) | Date à laquelle la tâche a été terminée. peut être vide (null) |
cancelled_at |
string (date-time) | Date à laquelle la tâche a été annulée. peut être vide (null) |
created_at |
string (date-time) | Créée le (UTC). |
updated_at |
string (date-time) | Dernière modification (UTC). |