API-Referenz
Webshop-Bestellungen
Bestellungen aus Ihrem Webshop oder Konfigurator nachverfolgen: den Status aktualisieren, die Sendungsverfolgung eintragen und Notizen schreiben.
Endpunkte
-
GET
/ordersBestellungen abrufen -
GET
/orders/{order}Bestellung abrufen -
POST
/orders/{order}/statusStatus einer Bestellung ändern -
POST
/orders/{order}/trackingSendungsverfolgung eintragen -
POST
/orders/{order}/notesNotiz schreiben
Bestellungen abrufen
/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
| Name | Typ | Beschreibung |
|---|---|---|
limit
|
integer | Anzahl der Ergebnisse pro Seite. von 1 bis 100 · Standard: 50 |
cursor
|
string | Der next_cursor oder prev_cursor aus meta der vorherigen Antwort. |
sort
|
string | Sortierung nach created_at oder updated_at; ein Minuszeichen davor sortiert absteigend. einer von: -created_at, created_at, -updated_at, updated_at · Standard: -created_at |
filter[status]
|
string | Nur 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 "https://app.klantly.com/api/v1/orders?filter[status]=paid&sort=created_at" \
-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', 'orders', [
'query' => [
'filter[status]' => 'paid',
'sort' => 'created_at',
],
]);
$data = json_decode((string) $response->getBody(), true)['data'];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();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.
{
"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
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig.
Bestellung abrufen
/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
| Name | Typ | Beschreibung |
|---|---|---|
order erforderlich |
string (uuid) | Die id (UUID) der Bestellung. |
Beispielanfrage
curl "https://app.klantly.com/api/v1/orders/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', 'orders/9d3f6c1e-4b2a-4c8e-9f1a-2b3c4d5e6f70');
$data = json_decode((string) $response->getBody(), true)['data'];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();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
{
"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
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
404
not_found— Nicht gefunden.
Status einer Bestellung ändern
/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
| Name | Typ | Beschreibung |
|---|---|---|
order erforderlich |
string (uuid) | Die id (UUID) der Bestellung. |
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
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 -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"
}'$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'];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();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
{
"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
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
404
not_found— Nicht gefunden. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Sendungsverfolgung eintragen
/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
| Name | Typ | Beschreibung |
|---|---|---|
order erforderlich |
string (uuid) | Die id (UUID) der Bestellung. |
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
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 -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"
}'$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'];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();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
{
"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
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
404
not_found— Nicht gefunden. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Notiz schreiben
/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
| Name | Typ | Beschreibung |
|---|---|---|
order erforderlich |
string (uuid) | Die id (UUID) der Bestellung. |
Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
content
erforderlich
|
string | Der Text der Notiz (höchstens 5.000 Zeichen). höchstens 5000 Zeichen |
Beispielanfrage
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."
}'$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'];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();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
{
"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
-
403
insufficient_scope— Dieser API-Schlüssel hat keinen Zugriff auf diese Aktion. -
422
validation_failed— Die Eingabe ist ungültig. -
422
unknown_field— Die Eingabe enthält ein unbekanntes Feld. -
415
unsupported_media_type— Dieses Format wird nicht unterstützt. -
413
payload_too_large— Der Body der Anfrage ist zu groß. -
404
not_found— Nicht gefunden. -
422
idempotency_key_reused— Dieser Idempotency-Key wurde bereits für eine andere Anfrage verwendet. -
409
idempotency_in_progress— Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet.
Das Objekt
Alle Felder sind immer vorhanden; ein Feld ohne Wert ist null.
| Feld | Typ | Beschreibung |
|---|---|---|
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. |