POST/api/demos/logistique/v1/shipments
إنشاء شحنة
تسجّل طردًا وتحسب سعره ونافذة توصيله وخطر رفضه، وتعيد رقم التتبّع والملصق.
| الحقل | النوع | إلزامي | الوصف |
|---|---|---|---|
reference | string≤ 40 | لا | رقم طلبيتك، يعود كما هو. |
recipient | object | نعم | المستلم. |
recipient.name | string2–80 | نعم | اسمه. يُستبدل باسم تجريبي في بيئة الاختبار. |
recipient.phone | string | نعم | هاتف نقّال جزائري. يُخفى ويُستبدل في بيئة الاختبار، ولا تُحفظ سوى بصمته. |
destination | object | نعم | مكان التوصيل. |
destination.wilaya | integer1–69 | نعم | رمز الولاية، من 1 إلى 69. |
destination.commune | string2–60 | نعم | بلدية من هذه الولاية: معرّفها أو اسمها بالعربية أو بالفرنسية أو بالحروف اللاتينية. |
destination.landmark | string≤ 160 | لا | معلم بدل العنوان: «مقابل المسجد»، «خلف مكتب البريد». |
mode | stringhomestop-desk | نعم | home (إلى المنزل) أو stop-desk (الاستلام من الوكالة). |
agency | string | لا | وكالة الاستلام في حالة نقطة الاستلام، وهي افتراضيًا وكالة الولاية. |
weight_kg | number0.05–70 | نعم | الوزن بالكيلوغرام. |
dimensions_cm | object | لا | الأبعاد بالسنتيمتر، لحساب الوزن الحجمي. |
dimensions_cm.length | integer1–300 | نعم | الطول. |
dimensions_cm.width | integer1–300 | نعم | العرض. |
dimensions_cm.height | integer1–300 | نعم | الارتفاع. |
cod_amount | integer0–1000000 | نعم | المبلغ المحصَّل عند الباب بالدينار، و0 لطرد مدفوع مسبقًا. |
declared_value | integer0–5000000 | لا | القيمة المصرَّح بها للتأمين، وهي افتراضيًا المبلغ المحصَّل. |
product | string2–120 | نعم | محتوى الطرد في كلمات قليلة. |
quantity | integer1–99 | لا | عدد القطع. |
options | array≤ 6insurancefragileexchangeconfirmationopen-on-deliveryexpress | لا | الخيارات: التأمين، قابل للكسر، الاستبدال، التأكيد، الفتح قبل الدفع، السريع. |
note | string≤ 200 | لا | تعليمة لعامل التوصيل. |
| الحقل | النوع | إلزامي | الوصف |
|---|---|---|---|
tracking_number | string | نعم | رقم التتبّع: KH وعشرة أرقام، آخرها رقم تحقّق. |
reference | string | لا | رقم طلبيتك، يعود كما هو. |
state | stringالقيم (19)pending-confirmationconfirmedawaiting-pickuppicked-upat-origin-hubin-line-haulat-destination-hubout-for-deliverydeliveredattempt-failedrescheduledat-stop-deskcollected-from-stop-deskrefusedreturn-in-transitreturnedexchangelostcancelled | نعم | وضع الطرد. |
price | object | نعم | سعر الإرسال. |
price.ht | integer | نعم | دون رسوم. |
price.tva | integer | نعم | الرسم على القيمة المضافة. |
price.ttc | integer | نعم | بكلّ الرسوم. |
price.lines[] | array | نعم | التفصيل سطرًا بسطر. |
price.lines[].key | string | نعم | طبيعة السطر: نقل، رسوم تحصيل، خيار… |
price.lines[].amount | integer | نعم | مبلغه بكلّ الرسوم. |
price.indicative | boolean | نعم | صحيح دائمًا: التعريفة إرشادية. |
sla | object | نعم | نافذة التوصيل الموعودة، بالساعات بعد الالتقاط. |
sla.min_hours | integer | نعم | في أقرب تقدير. |
sla.max_hours | integer | نعم | في أبعد تقدير. |
risk | object | نعم | خطر الرفض المقدَّر، مع أسبابه في فضاء البائع. |
risk.score | integer0–100 | نعم | من 0 إلى 100. |
risk.band | stringlowmediumhigh | نعم | منخفض أو متوسّط أو مرتفع. |
label_url | string | نعم | الملصق بمقاس 10 × 15 بصيغة PDF (نموذج في العرض التوضيحي). |
tracking_url | string | نعم | صفحة التتبّع التي تُرسل إلى الزبون. |
created_at | datetime | نعم | تاريخ الإنشاء. |
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"
}