POST/api/demos/logistique/v1/shipments
Créer une expédition
Enregistre un colis, calcule son prix, sa fenêtre de livraison et son risque de refus, et renvoie le numéro de suivi et l’étiquette.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
reference | string≤ 40 | non | Votre numéro de commande, rendu tel quel. |
recipient | object | oui | Le destinataire. |
recipient.name | string2–80 | oui | Son nom. Remplacé par un nom démo dans le bac à sable. |
recipient.phone | string | oui | Un mobile algérien. Masqué et remplacé dans le bac à sable ; seul un condensé est gardé. |
destination | object | oui | Où livrer. |
destination.wilaya | integer1–69 | oui | Code de la wilaya, de 1 à 69. |
destination.commune | string2–60 | oui | Commune de cette wilaya : son identifiant ou son nom, en arabe, en français ou en latin. |
destination.landmark | string≤ 160 | non | Un repère plutôt qu’une adresse : « en face de la mosquée », « derrière la poste ». |
mode | stringhomestop-desk | oui | home (à domicile) ou stop-desk (retrait en agence). |
agency | string | non | L’agence de retrait pour un stop-desk, par défaut celle de la wilaya. |
weight_kg | number0.05–70 | oui | Poids en kilogrammes. |
dimensions_cm | object | non | Dimensions en centimètres, pour le poids volumétrique. |
dimensions_cm.length | integer1–300 | oui | Longueur. |
dimensions_cm.width | integer1–300 | oui | Largeur. |
dimensions_cm.height | integer1–300 | oui | Hauteur. |
cod_amount | integer0–1000000 | oui | Montant à encaisser à la porte, en dinars ; 0 pour un colis prépayé. |
declared_value | integer0–5000000 | non | Valeur déclarée pour l’assurance ; par défaut le montant encaissé. |
product | string2–120 | oui | Ce que contient le colis, en quelques mots. |
quantity | integer1–99 | non | Nombre d’articles. |
options | array≤ 6insurancefragileexchangeconfirmationopen-on-deliveryexpress | non | Options : assurance, fragile, échange, confirmation, ouverture avant paiement, express. |
note | string≤ 200 | non | Une consigne pour le livreur. |
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
tracking_number | string | oui | Numéro de suivi : KH et dix chiffres, le dernier étant une clé de contrôle. |
reference | string | non | Votre numéro de commande, rendu tel quel. |
state | stringValeurs (19)pending-confirmationconfirmedawaiting-pickuppicked-upat-origin-hubin-line-haulat-destination-hubout-for-deliverydeliveredattempt-failedrescheduledat-stop-deskcollected-from-stop-deskrefusedreturn-in-transitreturnedexchangelostcancelled | oui | L’état du colis. |
price | object | oui | Le prix de l’envoi. |
price.ht | integer | oui | Hors taxes. |
price.tva | integer | oui | TVA. |
price.ttc | integer | oui | Toutes taxes comprises. |
price.lines[] | array | oui | Le détail, ligne par ligne. |
price.lines[].key | string | oui | La nature de la ligne : transport, frais d’encaissement, option… |
price.lines[].amount | integer | oui | Son montant TTC. |
price.indicative | boolean | oui | Toujours vrai : le tarif est indicatif. |
sla | object | oui | La fenêtre de livraison promise, en heures après le ramassage. |
sla.min_hours | integer | oui | Au plus tôt. |
sla.max_hours | integer | oui | Au plus tard. |
risk | object | oui | Le risque de refus estimé, avec ses raisons dans l’espace vendeur. |
risk.score | integer0–100 | oui | De 0 à 100. |
risk.band | stringlowmediumhigh | oui | Faible, moyen ou élevé. |
label_url | string | oui | L’étiquette 10 × 15 en PDF (spécimen dans la démonstration). |
tracking_url | string | oui | La page de suivi à envoyer au client. |
created_at | datetime | oui | Date de création. |
curl -X POST 'https://algeriaagency.com/api/demos/logistique/v1/shipments' \
-H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
-H 'Idempotency-Key: 6f1c2d0e-commande-0412' \
-H 'Content-Type: application/json' \
-d '{
"reference": "CMD-2026-0412",
"recipient": {
"name": "Destinataire démo n° 42",
"phone": "06 •• •• 48 17"
},
"destination": {
"wilaya": 16,
"commune": "Bab Ezzouar",
"landmark": "en face de la mosquée El Feth"
},
"mode": "home",
"weight_kg": 0.8,
"cod_amount": 2500,
"product": "Coffret soins visage",
"options": [
"confirmation"
]
}'const response = await fetch('https://algeriaagency.com/api/demos/logistique/v1/shipments', {
method: 'POST',
headers: {
'X-Api-Key': process.env.KHATT_API_KEY, // kh_test_••••••••••••••••••••7Q2m
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reference": "CMD-2026-0412",
"recipient": {
"name": "Destinataire démo n° 42",
"phone": "06 •• •• 48 17"
},
"destination": {
"wilaya": 16,
"commune": "Bab Ezzouar",
"landmark": "en face de la mosquée El Feth"
},
"mode": "home",
"weight_kg": 0.8,
"cod_amount": 2500,
"product": "Coffret soins visage",
"options": [
"confirmation"
]
}),
})
if (!response.ok) throw new Error((await response.json()).error.code)
const data = await response.json()<?php
$ch = curl_init('https://algeriaagency.com/api/demos/logistique/v1/shipments');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Api-Key: ' . getenv('KHATT_API_KEY'), // kh_test_••••••••••••••••••••7Q2m
'Idempotency-Key: ' . bin2hex(random_bytes(16)),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => '{
"reference": "CMD-2026-0412",
"recipient": {
"name": "Destinataire démo n° 42",
"phone": "06 •• •• 48 17"
},
"destination": {
"wilaya": 16,
"commune": "Bab Ezzouar",
"landmark": "en face de la mosquée El Feth"
},
"mode": "home",
"weight_kg": 0.8,
"cod_amount": 2500,
"product": "Coffret soins visage",
"options": [
"confirmation"
]
}',
]);
$data = json_decode(curl_exec($ch), true);{
"tracking_number": "KH4831200573",
"reference": "CMD-2026-0412",
"state": "pending-confirmation",
"price": {
"ht": 437,
"tva": 83,
"ttc": 520,
"lines": [
{
"key": "transport",
"amount": 400
},
{
"key": "cod-fee",
"amount": 50
},
{
"key": "confirmation",
"amount": 70
}
],
"indicative": true
},
"sla": {
"min_hours": 12,
"max_hours": 24
},
"risk": {
"score": 21,
"band": "low"
},
"label_url": "/api/demos/logistique/v1/shipments/KH4831200573/label.pdf",
"tracking_url": "/demos/logistique/suivi/KH4831200573",
"created_at": "2026-10-19T10:42:00+01:00"
}