curl --request POST \
--url https://api.kalixo.io/v2/orders \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"externalOrderCode": "O-12345",
"currency": "GBP",
"orderProducts": [
{
"productCode": "10020000213575",
"quantity": 1,
"price": 10000,
"currency": "GBP",
"sku": "GB-EN-10020000213575"
}
],
"price": 10000
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalOrderCode: 'O-12345',
currency: 'GBP',
orderProducts: [
{
productCode: '10020000213575',
quantity: 1,
price: 10000,
currency: 'GBP',
sku: 'GB-EN-10020000213575'
}
],
price: 10000
})
};
fetch('https://api.kalixo.io/v2/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kalixo.io/v2/orders"
payload = {
"externalOrderCode": "O-12345",
"currency": "GBP",
"orderProducts": [
{
"productCode": "10020000213575",
"quantity": 1,
"price": 10000,
"currency": "GBP",
"sku": "GB-EN-10020000213575"
}
],
"price": 10000
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kalixo.io/v2/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalOrderCode' => 'O-12345',
'currency' => 'GBP',
'orderProducts' => [
[
'productCode' => '10020000213575',
'quantity' => 1,
'price' => 10000,
'currency' => 'GBP',
'sku' => 'GB-EN-10020000213575'
]
],
'price' => 10000
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"orderId": "b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10",
"externalOrderCode": "O-12345",
"status": "processing",
"estimatedReadyAt": "2026-06-02T11:05:00Z",
"wallet": {
"balances": {
"GBP": 196.01,
"EUR": 1234.56
},
"lowBalance": false
}
}Place an order
Creates an order asynchronously. The response returns immediately with an orderId and a processing status, plus an estimatedReadyAt timestamp that indicates when to start polling for codes. Larger orders receive a later estimatedReadyAt.
Send the catalog productCode and the price you expect to pay (used to validate the order). For fixed-price products the price must match the current catalog price; for open-denomination products send the chosen amount within the allowed range.
The externalOrderCode is your idempotency key: re-posting the same code returns the existing order instead of creating a duplicate.
curl --request POST \
--url https://api.kalixo.io/v2/orders \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"externalOrderCode": "O-12345",
"currency": "GBP",
"orderProducts": [
{
"productCode": "10020000213575",
"quantity": 1,
"price": 10000,
"currency": "GBP",
"sku": "GB-EN-10020000213575"
}
],
"price": 10000
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalOrderCode: 'O-12345',
currency: 'GBP',
orderProducts: [
{
productCode: '10020000213575',
quantity: 1,
price: 10000,
currency: 'GBP',
sku: 'GB-EN-10020000213575'
}
],
price: 10000
})
};
fetch('https://api.kalixo.io/v2/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kalixo.io/v2/orders"
payload = {
"externalOrderCode": "O-12345",
"currency": "GBP",
"orderProducts": [
{
"productCode": "10020000213575",
"quantity": 1,
"price": 10000,
"currency": "GBP",
"sku": "GB-EN-10020000213575"
}
],
"price": 10000
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kalixo.io/v2/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalOrderCode' => 'O-12345',
'currency' => 'GBP',
'orderProducts' => [
[
'productCode' => '10020000213575',
'quantity' => 1,
'price' => 10000,
'currency' => 'GBP',
'sku' => 'GB-EN-10020000213575'
]
],
'price' => 10000
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"orderId": "b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10",
"externalOrderCode": "O-12345",
"status": "processing",
"estimatedReadyAt": "2026-06-02T11:05:00Z",
"wallet": {
"balances": {
"GBP": 196.01,
"EUR": 1234.56
},
"lowBalance": false
}
}Authorizations
Your Kalixo API key. Send it in the x-api-key header on every request.
Body
Your unique reference for this order. Acts as the idempotency key.
"O-12345"
"GBP"
1Show child attributes
Show child attributes
Optional expected order total in minor units. If sent, must equal the sum of (line unit price × quantity).
10000
Response
Order accepted and now processing.
"b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10"
"O-12345"
processing "processing"
Approximate time the codes should be ready. Poll the order after this time.
"2026-06-02T11:05:00Z"
Show child attributes
Show child attributes