Klantly Developers

API reference

Webshop orders

Follow up on orders from your webshop or configurator: update the status, fill in track and trace and post notes.

Endpoints

List orders

GET /api/v1/orders

A list of webshop orders, newest first, with their lines and notes. Filter by status, customer or change date. Use filter[status]=paid to fetch what is ready to be processed.

Scope
orders.read — Read webshop orders, with their lines, addresses and the customer's contact details
Required feature
webshop

Query parameters

NameTypeDescription
limit integer Number of results per page. from 1 to 100 · default: 50
cursor string The next_cursor or prev_cursor from meta of the previous response.
sort string Sort by created_at or updated_at; a leading minus sign sorts descending. one of: -created_at, created_at, -updated_at, updated_at · default: -created_at
filter[status] string Only orders with this status, for example paid or shipped. one of: pending_payment, paid, processing, shipped, delivered, cancelled, refunded
filter[customer_id] string (uuid) Only what belongs to this customer.
filter[updated_since] string (date-time) Only what changed since this moment: ISO 8601 with a time zone, for example 2026-09-14T10:15:00Z. Useful for synchronising.

Example request

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

Response 200

The response is a list with cursor pagination: data contains the objects, meta the pagination.

Example response
{
  "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
  }
}

Possible errors

In addition, every endpoint can return the general errors, such as an invalid key or a reached limit. See all error codes.

Get an order

GET /api/v1/orders/{order}

One order by id, with its lines, addresses and notes.

Scope
orders.read — Read webshop orders, with their lines, addresses and the customer's contact details
Required feature
webshop

Path parameters

NameTypeDescription
order required string (uuid) The id (UUID) of the order.

Example request

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

Response 200

Example response
{
  "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"
  }
}

Possible errors

In addition, every endpoint can return the general errors, such as an invalid key or a reached limit. See all error codes.

Change the status of an order

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

Sets the order to processing, shipped, delivered or cancelled, just like in the app: the time is recorded, an internal note is added and the customer gets the email that goes with that status. Refunds are not possible here: they move money and are done in Klantly.

Scope
orders.write — Change the status of webshop orders (the customer then gets an email), fill in track and trace and post notes
Required feature
webshop

Send an Idempotency-Key and a retry after a timeout will never create a duplicate record.

Path parameters

NameTypeDescription
order required string (uuid) The id (UUID) of the order.

Body (JSON)

FieldTypeDescription
status required string pending_payment, paid, processing, shipped, delivered, cancelled or refunded. When sending, only processing, shipped, delivered or cancelled. one of: processing, shipped, delivered, cancelled

Example request

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

Response 200

Example response
{
  "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"
  }
}

Possible errors

In addition, every endpoint can return the general errors, such as an invalid key or a reached limit. See all error codes.

Fill in track and trace

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

Stores the tracking code and optionally the tracking link, for example from your shipping system. Send only a code and the existing link stays; null clears the code.

Scope
orders.write — Change the status of webshop orders (the customer then gets an email), fill in track and trace and post notes
Required feature
webshop

Send an Idempotency-Key and a retry after a timeout will never create a duplicate record.

Path parameters

NameTypeDescription
order required string (uuid) The id (UUID) of the order.

Body (JSON)

FieldTypeDescription
tracking_code required string The tracking code of the shipment. Required when filling in track and trace; null clears it. can be empty (null) · at most 255 characters
tracking_url optional string (uri) The link to the tracking page (http or https). Leave it out and the existing link stays. can be empty (null) · at most 500 characters

Example request

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

Response 200

Example response
{
  "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"
  }
}

Possible errors

In addition, every endpoint can return the general errors, such as an invalid key or a reached limit. See all error codes.

Post a note

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

Posts an internal note on the order. The customer never sees it. A note through the API has no author.

Scope
orders.write — Change the status of webshop orders (the customer then gets an email), fill in track and trace and post notes
Required feature
webshop

Send an Idempotency-Key and a retry after a timeout will never create a duplicate record.

Path parameters

NameTypeDescription
order required string (uuid) The id (UUID) of the order.

Body (JSON)

FieldTypeDescription
content required string The text of the note (up to 5,000 characters). at most 5000 characters

Example request

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

Response 201

Example response
{
  "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"
  }
}

Possible errors

In addition, every endpoint can return the general errors, such as an invalid key or a reached limit. See all error codes.

The object

All fields are always present; a field without a value is null.

FieldTypeDescription
object string Always "order".
id string (uuid) Unique id (UUID).
number string Order number, for example ORD-00042.
status string pending_payment, paid, processing, shipped, delivered, cancelled or refunded. When sending, only processing, shipped, delivered or cancelled. one of: pending_payment, paid, processing, shipped, delivered, cancelled, refunded
customer_id string (uuid) The customer in Klantly, or null. can be empty (null)
customer object The customer details as given with the order.
customer.name string Name. can be empty (null)
customer.email string Email address. can be empty (null)
customer.phone string Phone number. can be empty (null)
customer.company_name string Company name. can be empty (null)
customer.vat_number string VAT number. can be empty (null)
billing_address object The billing address.
billing_address.address string Street and house number. can be empty (null)
billing_address.postal_code string Postal code. can be empty (null)
billing_address.city string City. can be empty (null)
billing_address.country string Country. can be empty (null)
shipping_address object The delivery address.
shipping_address.address string Street and house number. can be empty (null)
shipping_address.postal_code string Postal code. can be empty (null)
shipping_address.city string City. can be empty (null)
shipping_address.country string Country. can be empty (null)
form_title string The webshop or configurator the order came from. can be empty (null)
language string Language of the order. can be empty (null)
currency string Always "EUR".
subtotal string Total excluding VAT, as a string with two decimals.
discount_amount string Discount.
shipping_cost string Shipping costs.
tax_amount string VAT amount.
total string Total including VAT.
payment_method string How it was paid, for example ideal. can be empty (null)
tracking_code string The tracking code of the shipment. Required when filling in track and trace; null clears it. can be empty (null)
tracking_url string The link to the tracking page (http or https). Leave it out and the existing link stays. can be empty (null)
invoice_id string (uuid) The invoice for this order, or null. can be empty (null)
quote_id string (uuid) The quote the order came from, or null. can be empty (null)
paid_at string (date-time) When it was paid. can be empty (null)
shipped_at string (date-time) When the order was shipped. can be empty (null)
delivered_at string (date-time) When the order was delivered. can be empty (null)
cancelled_at string (date-time) When the order was cancelled. can be empty (null)
refunded_at string (date-time) When it was refunded. can be empty (null)
items array<object> The ordered lines.
items.object string Always "order_item".
items.type string Kind of line, for example product.
items.name string Name of the line.
items.description string Description. can be empty (null)
items.quantity string Quantity.
items.unit string Unit. can be empty (null)
items.unit_price string Price per unit, excluding VAT.
items.discount_percentage string Discount on this line, as a percentage.
items.discount_amount string Discount on this line, as an amount.
items.line_total string Line total excluding VAT, after discount.
items.is_taxable boolean Whether this line counts towards VAT.
items.tax_rate string VAT rate, as a percentage.
notes array<object> The notes on the order, newest first.
notes.object string Always "order_note".
notes.type string note, status_change, tracking_update or email_sent. one of: note, status_change, tracking_update, email_sent
notes.content string The text.
notes.is_internal boolean Only visible to your company.
notes.created_at string (date-time) When the note was posted.
created_at string (date-time) When the order was placed.
updated_at string (date-time) When the order was last changed.