Klantly Developers

API-Referenz

Webshop-Bestellungen

Bestellungen aus Ihrem Webshop oder Konfigurator nachverfolgen: den Status aktualisieren, die Sendungsverfolgung eintragen und Notizen schreiben.

Endpunkte

Bestellungen abrufen

GET /api/v1/orders

Eine Liste der Webshop-Bestellungen, neueste zuerst, mit Positionen und Notizen. Filtern nach Status, Kunde oder Änderungsdatum. Mit filter[status]=paid holen Sie ab, was zur Bearbeitung bereitsteht.

Scope
orders.read — Webshop-Bestellungen lesen, mit Positionen, Adressen und den Kontaktdaten des Kunden
Erforderliche Funktion
webshop

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 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 Bestellungen mit diesem Status, zum Beispiel paid oder shipped. einer von: pending_payment, paid, processing, shipped, delivered, cancelled, refunded
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
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"]

Antwort 200

Die Antwort ist eine Liste mit Cursor-Paginierung: data enthält die Objekte, meta die Paginierung.

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

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.

Bestellung abrufen

GET /api/v1/orders/{order}

Eine Bestellung per id, mit Positionen, Adressen und Notizen.

Scope
orders.read — Webshop-Bestellungen lesen, mit Positionen, Adressen und den Kontaktdaten des Kunden
Erforderliche Funktion
webshop

Pfadparameter

NameTypBeschreibung
order erforderlich string (uuid) Die id (UUID) der Bestellung.

Beispielanfrage

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"]

Antwort 200

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

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.

Status einer Bestellung ändern

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

Setzt die Bestellung auf in Bearbeitung, versendet, zugestellt oder storniert, genau wie in der App: Der Zeitpunkt wird festgehalten, eine interne Notiz kommt hinzu und der Kunde erhält die zum Status passende E-Mail. Erstattungen sind hier nicht möglich: Sie bewegen Geld und werden in Klantly erledigt.

Scope
orders.write — Den Status von Webshop-Bestellungen ändern (der Kunde erhält dann eine E-Mail), Sendungsverfolgung eintragen und Notizen schreiben
Erforderliche Funktion
webshop

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

Pfadparameter

NameTypBeschreibung
order erforderlich string (uuid) Die id (UUID) der Bestellung.

Body (JSON)

FeldTypBeschreibung
status erforderlich string pending_payment (wartet auf Zahlung), paid (bezahlt), processing (in Bearbeitung), shipped (versendet), delivered (zugestellt), cancelled (storniert) oder refunded (erstattet). Beim Senden nur processing, shipped, delivered oder cancelled. einer von: processing, shipped, delivered, cancelled

Beispielanfrage

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"]

Antwort 200

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

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.

Sendungsverfolgung eintragen

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

Speichert den Tracking-Code und optional den Tracking-Link, zum Beispiel aus Ihrem Versandsystem. Senden Sie nur einen Code, bleibt der bestehende Link erhalten; null löscht den Code.

Scope
orders.write — Den Status von Webshop-Bestellungen ändern (der Kunde erhält dann eine E-Mail), Sendungsverfolgung eintragen und Notizen schreiben
Erforderliche Funktion
webshop

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

Pfadparameter

NameTypBeschreibung
order erforderlich string (uuid) Die id (UUID) der Bestellung.

Body (JSON)

FeldTypBeschreibung
tracking_code erforderlich string Der Tracking-Code der Sendung. Beim Eintragen der Sendungsverfolgung erforderlich; null löscht ihn. kann leer sein (null) · höchstens 255 Zeichen
tracking_url optional string (uri) Der Link zur Tracking-Seite (http oder https). Ohne Angabe bleibt der bestehende Link erhalten. kann leer sein (null) · höchstens 500 Zeichen

Beispielanfrage

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"]

Antwort 200

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

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.

Notiz schreiben

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

Schreibt eine interne Notiz zur Bestellung. Der Kunde sieht sie nie. Eine Notiz über die API hat keinen Autor.

Scope
orders.write — Den Status von Webshop-Bestellungen ändern (der Kunde erhält dann eine E-Mail), Sendungsverfolgung eintragen und Notizen schreiben
Erforderliche Funktion
webshop

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

Pfadparameter

NameTypBeschreibung
order erforderlich string (uuid) Die id (UUID) der Bestellung.

Body (JSON)

FeldTypBeschreibung
content erforderlich string Der Text der Notiz (höchstens 5.000 Zeichen). höchstens 5000 Zeichen

Beispielanfrage

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"]

Antwort 201

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

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 "order".
id string (uuid) Eindeutige id (UUID).
number string Bestellnummer, zum Beispiel ORD-00042.
status string pending_payment (wartet auf Zahlung), paid (bezahlt), processing (in Bearbeitung), shipped (versendet), delivered (zugestellt), cancelled (storniert) oder refunded (erstattet). Beim Senden nur processing, shipped, delivered oder cancelled. einer von: pending_payment, paid, processing, shipped, delivered, cancelled, refunded
customer_id string (uuid) Der Kunde in Klantly, oder null. kann leer sein (null)
customer object Die Kundendaten, wie sie bei der Bestellung angegeben wurden.
customer.name string Name. kann leer sein (null)
customer.email string E-Mail-Adresse. kann leer sein (null)
customer.phone string Telefonnummer. kann leer sein (null)
customer.company_name string Firmenname. kann leer sein (null)
customer.vat_number string USt-IdNr. kann leer sein (null)
billing_address object Die Rechnungsadresse.
billing_address.address string Straße und Hausnummer. kann leer sein (null)
billing_address.postal_code string Postleitzahl. kann leer sein (null)
billing_address.city string Ort. kann leer sein (null)
billing_address.country string Land. kann leer sein (null)
shipping_address object Die Lieferadresse.
shipping_address.address string Straße und Hausnummer. kann leer sein (null)
shipping_address.postal_code string Postleitzahl. kann leer sein (null)
shipping_address.city string Ort. kann leer sein (null)
shipping_address.country string Land. kann leer sein (null)
form_title string Der Webshop oder Konfigurator, aus dem die Bestellung stammt. kann leer sein (null)
language string Sprache der Bestellung. kann leer sein (null)
currency string Immer "EUR".
subtotal string Summe ohne MwSt., als Text mit zwei Dezimalstellen.
discount_amount string Rabatt.
shipping_cost string Versandkosten.
tax_amount string MwSt.-Betrag.
total string Summe inklusive MwSt.
payment_method string Wie bezahlt wurde, zum Beispiel ideal. kann leer sein (null)
tracking_code string Der Tracking-Code der Sendung. Beim Eintragen der Sendungsverfolgung erforderlich; null löscht ihn. kann leer sein (null)
tracking_url string Der Link zur Tracking-Seite (http oder https). Ohne Angabe bleibt der bestehende Link erhalten. kann leer sein (null)
invoice_id string (uuid) Die Rechnung zu dieser Bestellung, oder null. kann leer sein (null)
quote_id string (uuid) Das Angebot, aus dem die Bestellung stammt, oder null. kann leer sein (null)
paid_at string (date-time) Wann bezahlt wurde. kann leer sein (null)
shipped_at string (date-time) Wann die Bestellung versendet wurde. kann leer sein (null)
delivered_at string (date-time) Wann die Bestellung zugestellt wurde. kann leer sein (null)
cancelled_at string (date-time) Wann die Bestellung storniert wurde. kann leer sein (null)
refunded_at string (date-time) Wann erstattet wurde. kann leer sein (null)
items array<object> Die bestellten Positionen.
items.object string Immer "order_item".
items.type string Art der Position, zum Beispiel product.
items.name string Name der Position.
items.description string Beschreibung. kann leer sein (null)
items.quantity string Menge.
items.unit string Einheit. kann leer sein (null)
items.unit_price string Preis je Einheit, ohne MwSt.
items.discount_percentage string Rabatt auf diese Position, in Prozent.
items.discount_amount string Rabatt auf diese Position, als Betrag.
items.line_total string Positionssumme ohne MwSt., nach Rabatt.
items.is_taxable boolean Ob diese Position für die MwSt. zählt.
items.tax_rate string MwSt.-Satz, in Prozent.
notes array<object> Die Notizen zur Bestellung, neueste zuerst.
notes.object string Immer "order_note".
notes.type string note (Notiz), status_change (Statusänderung), tracking_update (Sendungsverfolgung) oder email_sent (E-Mail gesendet). einer von: note, status_change, tracking_update, email_sent
notes.content string Der Text.
notes.is_internal boolean Nur für Ihr Unternehmen sichtbar.
notes.created_at string (date-time) Wann die Notiz geschrieben wurde.
created_at string (date-time) Wann die Bestellung aufgegeben wurde.
updated_at string (date-time) Wann die Bestellung zuletzt geändert wurde.