API-referentie
Webshopbestellingen
Bestellingen uit je webshop of configurator opvolgen: de status bijwerken, track and trace invullen en notities plaatsen.
Endpoints
-
GET
/ordersBestellingen opvragen -
GET
/orders/{order}Bestelling ophalen -
POST
/orders/{order}/statusStatus van een bestelling wijzigen -
POST
/orders/{order}/trackingTrack and trace invullen -
POST
/orders/{order}/notesNotitie plaatsen
Bestellingen opvragen
/api/v1/orders
Een lijst van webshopbestellingen, nieuwste eerst, met regels en notities. Filter op status, klant of wijzigingsdatum. Met filter[status]=paid haal je op wat klaarstaat om te verwerken.
- Scope
-
orders.read— Webshopbestellingen lezen, met regels, adressen en de contactgegevens van de klant - Vereiste functie
webshop
Queryparameters
| Naam | Type | Omschrijving |
|---|---|---|
limit
|
integer | Aantal resultaten per pagina. van 1 tot 100 · standaard: 50 |
cursor
|
string | De next_cursor of prev_cursor uit meta van het vorige antwoord. |
sort
|
string | Het veld waarop je sorteert; een min-teken ervoor is aflopend. Welke velden je kunt kiezen en wat de standaard is, staat bij deze parameter. een van: -created_at, created_at, -updated_at, updated_at · standaard: -created_at |
filter[status]
|
string | Alleen bestellingen met deze status, bijvoorbeeld paid of shipped. een van: pending_payment, paid, processing, shipped, delivered, cancelled, refunded |
filter[customer_id]
|
string (uuid) | Alleen wat bij deze klant hoort. |
filter[updated_since]
|
string (date-time) | Alleen wat sinds dit tijdstip is gewijzigd: ISO 8601 mét tijdzone, bijvoorbeeld 2026-09-14T10:15:00Z. Handig om te synchroniseren. Neem een overlap van een paar minuten op je vorige moment, omdat de klok van jouw systeem en die van Klantly niet exact gelijk lopen, en omdat een wijziging vlak na je vorige moment anders net buiten de boot valt. De grens is inclusief: iets dat exact op dit tijdstip is gewijzigd, doet mee. |
Voorbeeldverzoek
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"]Antwoord 200
Het antwoord is een lijst met cursorpaginering: data bevat de objecten, meta de paginering.
{
"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
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
422
validation_failed— De invoer is ongeldig.
Bestelling ophalen
/api/v1/orders/{order}
Eén bestelling op id, met regels, adressen en notities.
- Scope
-
orders.read— Webshopbestellingen lezen, met regels, adressen en de contactgegevens van de klant - Vereiste functie
webshop
Padparameters
| Naam | Type | Omschrijving |
|---|---|---|
order verplicht |
string (uuid) | De id (UUID) van de bestelling. |
Voorbeeldverzoek
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"]Antwoord 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"
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
404
not_found— Niet gevonden.
Status van een bestelling wijzigen
/api/v1/orders/{order}/status
Zet de bestelling op in behandeling, verzonden, afgeleverd of geannuleerd, net als in de app: het tijdstip wordt vastgelegd, er komt een interne notitie bij en de klant krijgt de mail die bij die status hoort. Terugbetalen kan hier niet: dat verplaatst geld en doe je in Klantly.
- Scope
-
orders.write— De status van webshopbestellingen wijzigen (de klant krijgt dan mail), track and trace invullen en notities plaatsen - Vereiste functie
webshop
Stuur een Idempotency-Key mee, dan maakt een nieuwe poging na een time-out geen dubbel record.
Padparameters
| Naam | Type | Omschrijving |
|---|---|---|
order verplicht |
string (uuid) | De id (UUID) van de bestelling. |
Body (JSON)
| Veld | Type | Omschrijving |
|---|---|---|
status
verplicht
|
string | pending_payment (wacht op betaling), paid (betaald), processing (in behandeling), shipped (verzonden), delivered (afgeleverd), cancelled (geannuleerd) of refunded (terugbetaald). Bij invoer alleen processing, shipped, delivered of cancelled. een van: processing, shipped, delivered, cancelled |
Voorbeeldverzoek
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"]Antwoord 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"
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
422
validation_failed— De invoer is ongeldig. -
422
unknown_field— De invoer bevat een onbekend veld. -
415
unsupported_media_type— Dit formaat wordt niet ondersteund. -
413
payload_too_large— De body van het verzoek is te groot. -
404
not_found— Niet gevonden. -
422
idempotency_key_reused— Deze Idempotency-Key is al gebruikt voor een ander verzoek. -
409
idempotency_in_progress— Een verzoek met deze Idempotency-Key is nog bezig.
Track and trace invullen
/api/v1/orders/{order}/tracking
Slaat de trackingcode en eventueel de trackinglink op, bijvoorbeeld vanuit je verzendsysteem. Stuur je alleen een code, dan blijft de bestaande link staan; null wist de code.
- Scope
-
orders.write— De status van webshopbestellingen wijzigen (de klant krijgt dan mail), track and trace invullen en notities plaatsen - Vereiste functie
webshop
Stuur een Idempotency-Key mee, dan maakt een nieuwe poging na een time-out geen dubbel record.
Padparameters
| Naam | Type | Omschrijving |
|---|---|---|
order verplicht |
string (uuid) | De id (UUID) van de bestelling. |
Body (JSON)
| Veld | Type | Omschrijving |
|---|---|---|
tracking_code
verplicht
|
string | De trackingcode van de zending. Verplicht bij Track and trace invullen; null wist hem. kan leeg zijn (null) · maximaal 255 tekens |
tracking_url
optioneel
|
string (uri) | De link naar de trackingpagina (http of https). Laat je hem weg, dan blijft de bestaande link staan. kan leeg zijn (null) · maximaal 500 tekens |
Voorbeeldverzoek
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"]Antwoord 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"
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
422
validation_failed— De invoer is ongeldig. -
422
unknown_field— De invoer bevat een onbekend veld. -
415
unsupported_media_type— Dit formaat wordt niet ondersteund. -
413
payload_too_large— De body van het verzoek is te groot. -
404
not_found— Niet gevonden. -
422
idempotency_key_reused— Deze Idempotency-Key is al gebruikt voor een ander verzoek. -
409
idempotency_in_progress— Een verzoek met deze Idempotency-Key is nog bezig.
Notitie plaatsen
/api/v1/orders/{order}/notes
Plaatst een interne notitie bij de bestelling. De klant ziet die nooit. Een notitie via de API heeft geen auteur.
- Scope
-
orders.write— De status van webshopbestellingen wijzigen (de klant krijgt dan mail), track and trace invullen en notities plaatsen - Vereiste functie
webshop
Stuur een Idempotency-Key mee, dan maakt een nieuwe poging na een time-out geen dubbel record.
Padparameters
| Naam | Type | Omschrijving |
|---|---|---|
order verplicht |
string (uuid) | De id (UUID) van de bestelling. |
Body (JSON)
| Veld | Type | Omschrijving |
|---|---|---|
content
verplicht
|
string | De tekst van de notitie (maximaal 5.000 tekens). maximaal 5000 tekens |
Voorbeeldverzoek
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"]Antwoord 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"
}
}Mogelijke fouten
-
403
insufficient_scope— Deze API-sleutel heeft geen toegang tot deze actie. -
422
validation_failed— De invoer is ongeldig. -
422
unknown_field— De invoer bevat een onbekend veld. -
415
unsupported_media_type— Dit formaat wordt niet ondersteund. -
413
payload_too_large— De body van het verzoek is te groot. -
404
not_found— Niet gevonden. -
422
idempotency_key_reused— Deze Idempotency-Key is al gebruikt voor een ander verzoek. -
409
idempotency_in_progress— Een verzoek met deze Idempotency-Key is nog bezig.
Het object
Alle velden zijn altijd aanwezig; een veld zonder waarde is null.
| Veld | Type | Omschrijving |
|---|---|---|
object |
string | Altijd "order". |
id |
string (uuid) | Unieke id (UUID). |
number |
string | Bestelnummer, bijvoorbeeld ORD-00042. |
status |
string | pending_payment (wacht op betaling), paid (betaald), processing (in behandeling), shipped (verzonden), delivered (afgeleverd), cancelled (geannuleerd) of refunded (terugbetaald). Bij invoer alleen processing, shipped, delivered of cancelled. een van: pending_payment, paid, processing, shipped, delivered, cancelled, refunded |
customer_id |
string (uuid) | De klant in Klantly, of null. kan leeg zijn (null) |
customer |
object | De klantgegevens zoals ze bij de bestelling zijn opgegeven. |
customer.name |
string | Naam. kan leeg zijn (null) |
customer.email |
string | E-mailadres. kan leeg zijn (null) |
customer.phone |
string | Telefoonnummer. kan leeg zijn (null) |
customer.company_name |
string | Bedrijfsnaam. kan leeg zijn (null) |
customer.vat_number |
string | Btw-nummer. kan leeg zijn (null) |
billing_address |
object | Het factuuradres. |
billing_address.address |
string | Straat en huisnummer. kan leeg zijn (null) |
billing_address.postal_code |
string | Postcode. kan leeg zijn (null) |
billing_address.city |
string | Plaats. kan leeg zijn (null) |
billing_address.country |
string | Land. kan leeg zijn (null) |
shipping_address |
object | Het afleveradres. |
shipping_address.address |
string | Straat en huisnummer. kan leeg zijn (null) |
shipping_address.postal_code |
string | Postcode. kan leeg zijn (null) |
shipping_address.city |
string | Plaats. kan leeg zijn (null) |
shipping_address.country |
string | Land. kan leeg zijn (null) |
form_title |
string | De webshop of configurator waar de bestelling vandaan kwam. kan leeg zijn (null) |
language |
string | Taal van de bestelling. kan leeg zijn (null) |
currency |
string | Altijd "EUR". |
subtotal |
string | Totaal zonder btw, als tekst met twee decimalen. |
discount_amount |
string | Korting. |
shipping_cost |
string | Verzendkosten. |
tax_amount |
string | Btw-bedrag. |
total |
string | Totaal inclusief btw. |
payment_method |
string | Hoe er is betaald, bijvoorbeeld ideal. kan leeg zijn (null) |
tracking_code |
string | De trackingcode van de zending. Verplicht bij Track and trace invullen; null wist hem. kan leeg zijn (null) |
tracking_url |
string | De link naar de trackingpagina (http of https). Laat je hem weg, dan blijft de bestaande link staan. kan leeg zijn (null) |
invoice_id |
string (uuid) | De factuur van deze bestelling, of null. kan leeg zijn (null) |
quote_id |
string (uuid) | De offerte waar de bestelling uit voortkomt, of null. kan leeg zijn (null) |
paid_at |
string (date-time) | Wanneer er is betaald. kan leeg zijn (null) |
shipped_at |
string (date-time) | Wanneer de bestelling is verzonden. kan leeg zijn (null) |
delivered_at |
string (date-time) | Wanneer de bestelling is afgeleverd. kan leeg zijn (null) |
cancelled_at |
string (date-time) | Wanneer de bestelling is geannuleerd. kan leeg zijn (null) |
refunded_at |
string (date-time) | Wanneer er is terugbetaald. kan leeg zijn (null) |
items |
array<object> | De bestelde regels. |
items.object |
string | Altijd "order_item". |
items.type |
string | Soort regel, bijvoorbeeld product. |
items.name |
string | Naam van de regel. |
items.description |
string | Omschrijving. kan leeg zijn (null) |
items.quantity |
string | Aantal. |
items.unit |
string | Eenheid. kan leeg zijn (null) |
items.unit_price |
string | Prijs per eenheid, zonder btw. |
items.discount_percentage |
string | Korting op deze regel, in procenten. |
items.discount_amount |
string | Korting op deze regel, als bedrag. |
items.line_total |
string | Regeltotaal zonder btw, na korting. |
items.is_taxable |
boolean | Telt deze regel mee voor de btw. |
items.tax_rate |
string | Btw-tarief, in procenten. |
notes |
array<object> | De notities bij de bestelling, nieuwste eerst. |
notes.object |
string | Altijd "order_note". |
notes.type |
string | note (notitie), status_change (statuswijziging), tracking_update (track and trace) of email_sent (mail verstuurd). een van: note, status_change, tracking_update, email_sent |
notes.content |
string | De tekst. |
notes.is_internal |
boolean | Alleen zichtbaar voor je bedrijf. |
notes.created_at |
string (date-time) | Wanneer de notitie is geplaatst. |
created_at |
string (date-time) | Wanneer de bestelling is geplaatst. |
updated_at |
string (date-time) | Wanneer de bestelling voor het laatst is gewijzigd. |