Klantly Developers

Référence de l'API

Commandes de la boutique

Suivre les commandes de votre boutique en ligne ou de votre configurateur : mettre à jour le statut, renseigner le suivi de colis et ajouter des notes.

Endpoints

Lister les commandes

GET /api/v1/orders

Une liste des commandes de la boutique, les plus récentes d'abord, avec leurs lignes et leurs notes. Filtrez par statut, client ou date de modification. Avec filter[status]=paid, vous récupérez ce qui est prêt à être traité.

Scope
orders.read — Lire les commandes de la boutique, avec leurs lignes, leurs adresses et les coordonnées du client
Fonctionnalité requise
webshop

Paramètres de requête

NomTypeDescription
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 commandes avec ce statut, par exemple paid ou shipped. l'une des valeurs : pending_payment, paid, processing, shipped, delivered, cancelled, refunded
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
curl "https://app.klantly.com/api/v1/orders?filter[status]=paid&sort=created_at" \
  -H "Authorization: Bearer $KLANTLY_API_KEY"
PHP
$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://app.klantly.com/api/v1/',
    'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);

$response = $client->request('GET', 'orders', [
    'query' => [
        'filter[status]' => 'paid',
        'sort' => 'created_at',
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/orders?filter[status]=paid&sort=created_at', {
  headers: {
    Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
  },
});

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

import requests

response = requests.get(
    "https://app.klantly.com/api/v1/orders",
    headers={
        "Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
    },
    params={
        "filter[status]": "paid",
        "sort": "created_at"
    },
)
data = response.json()["data"]

Réponse 200

La réponse est une liste avec pagination par curseur : data contient les objets, meta la pagination.

Exemple de réponse
{
  "data": [
    {
      "object": "order",
      "id": "9d3f89ee-f4d6-4fbd-8c01-b6c4d5e6f7a0",
      "number": "ORD-00042",
      "status": "paid",
      "customer_id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
      "customer": {
        "name": "Jan de Vries",
        "email": "jan@example.com",
        "phone": "+31 6 12345678",
        "company_name": null,
        "vat_number": null
      },
      "billing_address": {
        "address": "Dorpsstraat 1",
        "postal_code": "3511 AB",
        "city": "Utrecht",
        "country": "NL"
      },
      "shipping_address": {
        "address": "Dorpsstraat 1",
        "postal_code": "3511 AB",
        "city": "Utrecht",
        "country": "NL"
      },
      "form_title": "Plissé op maat",
      "language": "nl",
      "currency": "EUR",
      "subtotal": "100.00",
      "discount_amount": "0.00",
      "shipping_cost": "0.00",
      "tax_amount": "21.00",
      "total": "121.00",
      "payment_method": "ideal",
      "tracking_code": null,
      "tracking_url": null,
      "invoice_id": null,
      "quote_id": null,
      "paid_at": null,
      "shipped_at": null,
      "delivered_at": null,
      "cancelled_at": null,
      "refunded_at": null,
      "items": [
        {
          "object": "order_item",
          "type": "product",
          "name": "Plissé",
          "description": null,
          "quantity": "1.00",
          "unit": "stuk",
          "unit_price": "100.00",
          "discount_percentage": "0.00",
          "discount_amount": "0.00",
          "line_total": "100.00",
          "is_taxable": true,
          "tax_rate": "21.00"
        }
      ],
      "notes": [
        {
          "object": "order_note",
          "type": "note",
          "content": "Klant belde: graag na 14.00 uur leveren.",
          "is_internal": true,
          "created_at": "2026-09-16T10:15:00Z"
        }
      ],
      "created_at": "2026-09-14T10:15:00Z",
      "updated_at": "2026-09-14T10:15:00Z"
    }
  ],
  "meta": {
    "limit": 50,
    "next_cursor": "eyJpZCI6IjlkM2Y2YzFlIn0",
    "prev_cursor": null
  }
}

Erreurs possibles

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

Récupérer une commande

GET /api/v1/orders/{order}

Une commande par id, avec ses lignes, ses adresses et ses notes.

Scope
orders.read — Lire les commandes de la boutique, avec leurs lignes, leurs adresses et les coordonnées du client
Fonctionnalité requise
webshop

Paramètres de chemin

NomTypeDescription
order obligatoire string (uuid) L'id (UUID) de la commande.

Exemple de requête

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

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/orders/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/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
    headers={
        "Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
    },
)
data = response.json()["data"]

Réponse 200

Exemple de réponse
{
  "data": {
    "object": "order",
    "id": "9d3f89ee-f4d6-4fbd-8c01-b6c4d5e6f7a0",
    "number": "ORD-00042",
    "status": "paid",
    "customer_id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
    "customer": {
      "name": "Jan de Vries",
      "email": "jan@example.com",
      "phone": "+31 6 12345678",
      "company_name": null,
      "vat_number": null
    },
    "billing_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "shipping_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "form_title": "Plissé op maat",
    "language": "nl",
    "currency": "EUR",
    "subtotal": "100.00",
    "discount_amount": "0.00",
    "shipping_cost": "0.00",
    "tax_amount": "21.00",
    "total": "121.00",
    "payment_method": "ideal",
    "tracking_code": null,
    "tracking_url": null,
    "invoice_id": null,
    "quote_id": null,
    "paid_at": null,
    "shipped_at": null,
    "delivered_at": null,
    "cancelled_at": null,
    "refunded_at": null,
    "items": [
      {
        "object": "order_item",
        "type": "product",
        "name": "Plissé",
        "description": null,
        "quantity": "1.00",
        "unit": "stuk",
        "unit_price": "100.00",
        "discount_percentage": "0.00",
        "discount_amount": "0.00",
        "line_total": "100.00",
        "is_taxable": true,
        "tax_rate": "21.00"
      }
    ],
    "notes": [
      {
        "object": "order_note",
        "type": "note",
        "content": "Klant belde: graag na 14.00 uur leveren.",
        "is_internal": true,
        "created_at": "2026-09-16T10:15:00Z"
      }
    ],
    "created_at": "2026-09-14T10:15:00Z",
    "updated_at": "2026-09-14T10:15:00Z"
  }
}

Erreurs possibles

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

Modifier le statut d'une commande

POST /api/v1/orders/{order}/status

Passe la commande en traitement, expédiée, livrée ou annulée, comme dans l'application : l'heure est enregistrée, une note interne est ajoutée et le client reçoit l'e-mail correspondant à ce statut. Les remboursements ne sont pas possibles ici : ils déplacent de l'argent et se font dans Klantly.

Scope
orders.write — Modifier le statut des commandes (le client reçoit alors un e-mail), renseigner le suivi de colis et ajouter des notes
Fonctionnalité requise
webshop

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

NomTypeDescription
order obligatoire string (uuid) L'id (UUID) de la commande.

Corps (JSON)

ChampTypeDescription
status obligatoire string pending_payment (en attente de paiement), paid (payée), processing (en traitement), shipped (expédiée), delivered (livrée), cancelled (annulée) ou refunded (remboursée). À l'envoi, uniquement processing, shipped, delivered ou cancelled. l'une des valeurs : processing, shipped, delivered, cancelled

Exemple de requête

cURL
curl -X POST "https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/status" \
  -H "Authorization: Bearer $KLANTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
  -d '{
  "status": "shipped"
}'
PHP
$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://app.klantly.com/api/v1/',
    'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);

$response = $client->request('POST', 'orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/status', [
    'headers' => [
        'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
    ],
    'json' => [
        'status' => 'shipped',
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/status', {
  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": "shipped"
}),
});

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

import requests

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

Réponse 200

Exemple de réponse
{
  "data": {
    "object": "order",
    "id": "9d3f89ee-f4d6-4fbd-8c01-b6c4d5e6f7a0",
    "number": "ORD-00042",
    "status": "paid",
    "customer_id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
    "customer": {
      "name": "Jan de Vries",
      "email": "jan@example.com",
      "phone": "+31 6 12345678",
      "company_name": null,
      "vat_number": null
    },
    "billing_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "shipping_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "form_title": "Plissé op maat",
    "language": "nl",
    "currency": "EUR",
    "subtotal": "100.00",
    "discount_amount": "0.00",
    "shipping_cost": "0.00",
    "tax_amount": "21.00",
    "total": "121.00",
    "payment_method": "ideal",
    "tracking_code": null,
    "tracking_url": null,
    "invoice_id": null,
    "quote_id": null,
    "paid_at": null,
    "shipped_at": null,
    "delivered_at": null,
    "cancelled_at": null,
    "refunded_at": null,
    "items": [
      {
        "object": "order_item",
        "type": "product",
        "name": "Plissé",
        "description": null,
        "quantity": "1.00",
        "unit": "stuk",
        "unit_price": "100.00",
        "discount_percentage": "0.00",
        "discount_amount": "0.00",
        "line_total": "100.00",
        "is_taxable": true,
        "tax_rate": "21.00"
      }
    ],
    "notes": [
      {
        "object": "order_note",
        "type": "note",
        "content": "Klant belde: graag na 14.00 uur leveren.",
        "is_internal": true,
        "created_at": "2026-09-16T10:15:00Z"
      }
    ],
    "created_at": "2026-09-14T10:15:00Z",
    "updated_at": "2026-09-14T10:15:00Z"
  }
}

Erreurs possibles

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

Renseigner le suivi de colis

POST /api/v1/orders/{order}/tracking

Enregistre le code de suivi et éventuellement le lien de suivi, par exemple depuis votre système d'expédition. Si vous n'envoyez qu'un code, le lien existant est conservé ; null efface le code.

Scope
orders.write — Modifier le statut des commandes (le client reçoit alors un e-mail), renseigner le suivi de colis et ajouter des notes
Fonctionnalité requise
webshop

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

NomTypeDescription
order obligatoire string (uuid) L'id (UUID) de la commande.

Corps (JSON)

ChampTypeDescription
tracking_code obligatoire string Le code de suivi de l'envoi. Obligatoire pour renseigner le suivi ; null l'efface. peut être vide (null) · au maximum 255 caractères
tracking_url facultatif string (uri) Le lien vers la page de suivi (http ou https). Sans indication, le lien existant est conservé. peut être vide (null) · au maximum 500 caractères

Exemple de requête

cURL
curl -X POST "https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/tracking" \
  -H "Authorization: Bearer $KLANTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
  -d '{
  "tracking_code": "3SABCD123456789",
  "tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD123456789"
}'
PHP
$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://app.klantly.com/api/v1/',
    'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);

$response = $client->request('POST', 'orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/tracking', [
    'headers' => [
        'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
    ],
    'json' => [
        'tracking_code' => '3SABCD123456789',
        'tracking_url' => 'https://jouw.postnl.nl/track-and-trace/3SABCD123456789',
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/tracking', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
  },
  body: JSON.stringify({
  "tracking_code": "3SABCD123456789",
  "tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD123456789"
}),
});

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

import requests

response = requests.post(
    "https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/tracking",
    headers={
        "Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
        "Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    },
    json={
        "tracking_code": "3SABCD123456789",
        "tracking_url": "https://jouw.postnl.nl/track-and-trace/3SABCD123456789"
    },
)
data = response.json()["data"]

Réponse 200

Exemple de réponse
{
  "data": {
    "object": "order",
    "id": "9d3f89ee-f4d6-4fbd-8c01-b6c4d5e6f7a0",
    "number": "ORD-00042",
    "status": "paid",
    "customer_id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
    "customer": {
      "name": "Jan de Vries",
      "email": "jan@example.com",
      "phone": "+31 6 12345678",
      "company_name": null,
      "vat_number": null
    },
    "billing_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "shipping_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "form_title": "Plissé op maat",
    "language": "nl",
    "currency": "EUR",
    "subtotal": "100.00",
    "discount_amount": "0.00",
    "shipping_cost": "0.00",
    "tax_amount": "21.00",
    "total": "121.00",
    "payment_method": "ideal",
    "tracking_code": null,
    "tracking_url": null,
    "invoice_id": null,
    "quote_id": null,
    "paid_at": null,
    "shipped_at": null,
    "delivered_at": null,
    "cancelled_at": null,
    "refunded_at": null,
    "items": [
      {
        "object": "order_item",
        "type": "product",
        "name": "Plissé",
        "description": null,
        "quantity": "1.00",
        "unit": "stuk",
        "unit_price": "100.00",
        "discount_percentage": "0.00",
        "discount_amount": "0.00",
        "line_total": "100.00",
        "is_taxable": true,
        "tax_rate": "21.00"
      }
    ],
    "notes": [
      {
        "object": "order_note",
        "type": "note",
        "content": "Klant belde: graag na 14.00 uur leveren.",
        "is_internal": true,
        "created_at": "2026-09-16T10:15:00Z"
      }
    ],
    "created_at": "2026-09-14T10:15:00Z",
    "updated_at": "2026-09-14T10:15:00Z"
  }
}

Erreurs possibles

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

Ajouter une note

POST /api/v1/orders/{order}/notes

Ajoute une note interne à la commande. Le client ne la voit jamais. Une note ajoutée via l'API n'a pas d'auteur.

Scope
orders.write — Modifier le statut des commandes (le client reçoit alors un e-mail), renseigner le suivi de colis et ajouter des notes
Fonctionnalité requise
webshop

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

NomTypeDescription
order obligatoire string (uuid) L'id (UUID) de la commande.

Corps (JSON)

ChampTypeDescription
content obligatoire string Le texte de la note (5 000 caractères au maximum). au maximum 5000 caractères

Exemple de requête

cURL
curl -X POST "https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/notes" \
  -H "Authorization: Bearer $KLANTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f" \
  -d '{
  "content": "Klant belde: graag na 14.00 uur leveren."
}'
PHP
$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://app.klantly.com/api/v1/',
    'headers' => ['Authorization' => 'Bearer ' . getenv('KLANTLY_API_KEY')],
]);

$response = $client->request('POST', 'orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/notes', [
    'headers' => [
        'Idempotency-Key' => '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
    ],
    'json' => [
        'content' => 'Klant belde: graag na 14.00 uur leveren.',
    ],
]);

$data = json_decode((string) $response->getBody(), true)['data'];
JavaScript
const response = await fetch('https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/notes', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.KLANTLY_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': '6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f',
  },
  body: JSON.stringify({
  "content": "Klant belde: graag na 14.00 uur leveren."
}),
});

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

import requests

response = requests.post(
    "https://app.klantly.com/api/v1/orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70/notes",
    headers={
        "Authorization": f"Bearer {os.environ['KLANTLY_API_KEY']}",
        "Idempotency-Key": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    },
    json={
        "content": "Klant belde: graag na 14.00 uur leveren."
    },
)
data = response.json()["data"]

Réponse 201

Exemple de réponse
{
  "data": {
    "object": "order",
    "id": "9d3f89ee-f4d6-4fbd-8c01-b6c4d5e6f7a0",
    "number": "ORD-00042",
    "status": "paid",
    "customer_id": "9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70",
    "customer": {
      "name": "Jan de Vries",
      "email": "jan@example.com",
      "phone": "+31 6 12345678",
      "company_name": null,
      "vat_number": null
    },
    "billing_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "shipping_address": {
      "address": "Dorpsstraat 1",
      "postal_code": "3511 AB",
      "city": "Utrecht",
      "country": "NL"
    },
    "form_title": "Plissé op maat",
    "language": "nl",
    "currency": "EUR",
    "subtotal": "100.00",
    "discount_amount": "0.00",
    "shipping_cost": "0.00",
    "tax_amount": "21.00",
    "total": "121.00",
    "payment_method": "ideal",
    "tracking_code": null,
    "tracking_url": null,
    "invoice_id": null,
    "quote_id": null,
    "paid_at": null,
    "shipped_at": null,
    "delivered_at": null,
    "cancelled_at": null,
    "refunded_at": null,
    "items": [
      {
        "object": "order_item",
        "type": "product",
        "name": "Plissé",
        "description": null,
        "quantity": "1.00",
        "unit": "stuk",
        "unit_price": "100.00",
        "discount_percentage": "0.00",
        "discount_amount": "0.00",
        "line_total": "100.00",
        "is_taxable": true,
        "tax_rate": "21.00"
      }
    ],
    "notes": [
      {
        "object": "order_note",
        "type": "note",
        "content": "Klant belde: graag na 14.00 uur leveren.",
        "is_internal": true,
        "created_at": "2026-09-16T10:15:00Z"
      }
    ],
    "created_at": "2026-09-14T10:15:00Z",
    "updated_at": "2026-09-14T10:15:00Z"
  }
}

Erreurs possibles

En outre, chaque endpoint peut renvoyer les erreurs générales, comme une clé invalide ou une limite atteinte. Voir tous les codes d'erreur.

L'objet

Tous les champs sont toujours présents ; un champ sans valeur vaut null.

ChampTypeDescription
object string Toujours "order".
id string (uuid) Id unique (UUID).
number string Numéro de commande, par exemple ORD-00042.
status string pending_payment (en attente de paiement), paid (payée), processing (en traitement), shipped (expédiée), delivered (livrée), cancelled (annulée) ou refunded (remboursée). À l'envoi, uniquement processing, shipped, delivered ou cancelled. l'une des valeurs : pending_payment, paid, processing, shipped, delivered, cancelled, refunded
customer_id string (uuid) Le client dans Klantly, ou null. peut être vide (null)
customer object Les coordonnées du client telles qu'indiquées à la commande.
customer.name string Nom. peut être vide (null)
customer.email string Adresse e-mail. peut être vide (null)
customer.phone string Numéro de téléphone. peut être vide (null)
customer.company_name string Raison sociale. peut être vide (null)
customer.vat_number string Numéro de TVA. peut être vide (null)
billing_address object L'adresse de facturation.
billing_address.address string Rue et numéro. peut être vide (null)
billing_address.postal_code string Code postal. peut être vide (null)
billing_address.city string Ville. peut être vide (null)
billing_address.country string Pays. peut être vide (null)
shipping_address object L'adresse de livraison.
shipping_address.address string Rue et numéro. peut être vide (null)
shipping_address.postal_code string Code postal. peut être vide (null)
shipping_address.city string Ville. peut être vide (null)
shipping_address.country string Pays. peut être vide (null)
form_title string La boutique ou le configurateur d'où provient la commande. peut être vide (null)
language string Langue de la commande. peut être vide (null)
currency string Toujours "EUR".
subtotal string Total hors TVA, sous forme de texte à deux décimales.
discount_amount string Remise.
shipping_cost string Frais de livraison.
tax_amount string Montant de la TVA.
total string Total TTC.
payment_method string Comment le paiement a été effectué, par exemple ideal. peut être vide (null)
tracking_code string Le code de suivi de l'envoi. Obligatoire pour renseigner le suivi ; null l'efface. peut être vide (null)
tracking_url string Le lien vers la page de suivi (http ou https). Sans indication, le lien existant est conservé. peut être vide (null)
invoice_id string (uuid) La facture de cette commande, ou null. peut être vide (null)
quote_id string (uuid) Le devis dont provient la commande, ou null. peut être vide (null)
paid_at string (date-time) Quand le paiement a eu lieu. peut être vide (null)
shipped_at string (date-time) Quand la commande a été expédiée. peut être vide (null)
delivered_at string (date-time) Quand la commande a été livrée. peut être vide (null)
cancelled_at string (date-time) Quand la commande a été annulée. peut être vide (null)
refunded_at string (date-time) Quand le remboursement a eu lieu. peut être vide (null)
items array<object> Les lignes commandées.
items.object string Toujours "order_item".
items.type string Type de ligne, par exemple product.
items.name string Nom de la ligne.
items.description string Description. peut être vide (null)
items.quantity string Quantité.
items.unit string Unité. peut être vide (null)
items.unit_price string Prix unitaire, hors TVA.
items.discount_percentage string Remise sur cette ligne, en pourcentage.
items.discount_amount string Remise sur cette ligne, en montant.
items.line_total string Total de la ligne hors TVA, après remise.
items.is_taxable boolean Si cette ligne compte pour la TVA.
items.tax_rate string Taux de TVA, en pourcentage.
notes array<object> Les notes de la commande, les plus récentes d'abord.
notes.object string Toujours "order_note".
notes.type string note (note), status_change (changement de statut), tracking_update (suivi de colis) ou email_sent (e-mail envoyé). l'une des valeurs : note, status_change, tracking_update, email_sent
notes.content string Le texte.
notes.is_internal boolean Visible uniquement par votre entreprise.
notes.created_at string (date-time) Quand la note a été ajoutée.
created_at string (date-time) Quand la commande a été passée.
updated_at string (date-time) Quand la commande a été modifiée pour la dernière fois.