توثيق MapEx Cargo API V1
يمكنكم إنشاء الشحنات وقراءة التتبع وتنزيل الملصقات من نظام ERP أو التجارة الإلكترونية أو CRM أو WMS الخاص بكم.
طلبات API محمية عبر HTTPS و Client ID و API Key وقائمة IP المسموح بها وحدود الاستخدام. لا تشاركوا كلمة مرور لوحة التحكم مع أنظمة التكامل.
الرابط الأساسي
https://api.mapcargo.com.tr
V1خدمات الشحن والتتبع
JSONصيغة بيانات قياسية
PDFتنزيل الملصق
بداية سريعة
أنشئوا وصول API من صفحة API Entegrasyonu في لوحة العميل. يتم عرض API Key مرة واحدة فقط، لذلك يجب حفظه بأمان وإضافة عنوان IP الخاص بالخادم إلى القائمة البيضاء.
curl -X GET "https://api.mapcargo.com.tr/v1/ping"
التوثيق
| Header | الشرح |
|---|---|
X-Mapex-Client-Id | Client ID الذي يتم إنشاؤه في صفحة API Entegrasyonu. |
X-Mapex-Api-Key | مفتاح API السري الذي يظهر مرة واحدة فقط عند الإنشاء أو التجديد. |
Idempotency-Key | إجباري فقط مع POST /v1/shipments. يمنع إنشاء شحنة مكررة عند إرسال نفس بيانات الشحن مرة أخرى. |
النقاط
| Method | Path | الشرح |
|---|---|---|
| GET | /v1/ping | فحص حالة الخدمة. |
| POST | /v1/shipments | ينشئ شحنة في حسابكم. يختار النظام الناقل تلقائياً حسب بلد الوجهة وأبعاد الطرود ومستوى السعر في الحساب. |
| GET | /v1/shipments | يعرض الشحنات التابعة لحسابكم. |
| GET | /v1/shipments/{shipment_no} | يعرض تفاصيل الشحنة. |
| GET | /v1/shipments/{shipment_no}/tracking | يعرض حركات التتبع وصور الطرود إن وجدت. نصوص التتبع العامة تستخدم عبارة الناقل بدلاً من اسم العلامة التشغيلية. |
| GET | /v1/shipments/{shipment_no}/images/{image_id} | يعرض صورة طرد. يجب طلب روابط الصور بنفس API headers. |
| GET | /v1/shipments/{shipment_no}/label | يعرض ملصق الناقل إن وجد، وإلا يعرض ملصق PDF الافتراضي. ظهور الشعار في الملصق الافتراضي يتبع إعداد QR Etikette Logo في حساب العميل. |
| DELETE | /v1/shipments/{shipment_no} | يلغي فقط الشحنات التي حالتها created. |
إنشاء شحنة
لا تحتاجون إلى إرسال كود الناقل. يختار النظام الناقل المناسب تلقائياً حسب بلد الوجهة وأبعاد الطرود والوزن الحجمي ومستوى السعر في حسابكم. يتم تسجيل الشحنة في النظام وتستمر عمليات AWB والملصق ضمن سير العمل التشغيلي.
مثال Payload
{
"external_reference": "CARGO-10001",
"origin_country": "TR",
"destination_country": "AE",
"shipment_type": "SALE",
"valuation_currency": "USD",
"sender": {
"entity_type": "COMPANY",
"company_name": "Sender Company",
"contact_name": "Sender Name",
"phone_country_code": "+90",
"phone": "5551112233",
"address_line1": "Istanbul warehouse",
"country_code": "TR",
"city": "Istanbul",
"postal_code": "34000"
},
"recipient": {
"entity_type": "PERSON",
"full_name": "Receiver Name",
"phone_country_code": "+971",
"phone": "501112233",
"email": "receiver@example.com",
"address_line1": "Business Bay",
"country_code": "AE",
"city": "Dubai",
"postal_code": "00000"
},
"packages": [
{
"quantity": 1,
"length_cm": 30,
"width_cm": 20,
"height_cm": 10,
"weight_kg": 2.5
}
],
"products": [
{
"product_name_en": "Cotton T-Shirt",
"product_name_tr": "Pamuk Tişört",
"hs_code": "610910",
"origin_country": "TR",
"quantity": 2,
"unit_price": 12.5,
"currency": "USD"
}
],
"note": "Test gönderisi"
}
حقول الطلب
| اسم الحقل / النوع | الشرح | إجباري | القيود |
|---|---|---|---|
external_reference (string) | مرجع فريد في نظامكم لربط الشحنة بسجلاتكم. | نعم | حتى 120 حرفاً. يجب أن يكون فريداً لكل عميل. |
origin_country (string) | كود بلد الإرسال ISO-2. | لا | القيمة الافتراضية في V1 هي TR. |
destination_country (string) | كود بلد الوصول ISO-2. | نعم | حرفان. مثال: AE, CA, US. |
shipment_type (string) | نوع الشحنة. | لا | الافتراضي SALE. القيم المقبولة: SALE, SAMPLE, GIFT, MICRO_EXPORT. |
valuation_currency (string) | عملة قيم المنتجات. | لا | الافتراضي USD. الأكواد المقبولة: USD - دولار أمريكي، EUR - يورو، GBP - جنيه إسترليني، CAD - دولار كندي، SAR - ريال سعودي. |
note (string) | ملاحظة تشغيلية. | لا | يفضل ألا تتجاوز 500 حرف. |
sender (object) | بيانات المرسل. | نعم | يتضمن حقول sender.*. |
sender.entity_type (string) | نوع المرسل. | نعم | إجباري. PERSON أو COMPANY. |
sender.full_name (string) | اسم المرسل الشخصي. | حسب الحالة | إجباري عندما يكون sender.entity_type هو PERSON. حتى 160 حرفاً. |
sender.company_name (string) | اسم شركة المرسل. | حسب الحالة | إجباري عندما يكون sender.entity_type هو COMPANY. حتى 180 حرفاً. |
sender.contact_name (string) | شخص الاتصال في الشركة. | لا | حتى 160 حرفاً. |
sender.phone_country_code (string) | كود دولة هاتف المرسل. | لا | مثال: +90. حتى 10 أحرف. |
sender.phone (string) | رقم هاتف المرسل. | نعم | حتى 30 حرفاً. |
sender.email (string) | بريد المرسل. | لا | يفضل صيغة بريد صحيحة. |
sender.address_line1 (string) | عنوان المرسل، السطر الأول. | نعم | حتى 190 حرفاً. |
sender.address_line2/3 (string) | أسطر عنوان إضافية. | لا | حتى 190 حرفاً لكل سطر. |
sender.country_code (string) | كود بلد المرسل. | نعم | يجب أن يكون TR في V1. |
sender.city (string) | مدينة المرسل. | نعم | حتى 120 حرفاً. |
sender.postal_code (string) | الرمز البريدي للمرسل. | لا | حتى 20 حرفاً. |
recipient (object) | بيانات المستلم. | نعم | يتضمن حقول recipient.*. |
recipient.entity_type (string) | نوع المستلم. | نعم | إجباري. PERSON أو COMPANY. |
recipient.full_name (string) | اسم المستلم الشخصي. | حسب الحالة | إجباري عندما يكون recipient.entity_type هو PERSON. حتى 160 حرفاً. |
recipient.company_name (string) | اسم شركة المستلم. | حسب الحالة | إجباري عندما يكون recipient.entity_type هو COMPANY. حتى 180 حرفاً. |
recipient.contact_name (string) | شخص الاتصال في الشركة. | لا | حتى 160 حرفاً. |
recipient.phone_country_code (string) | كود دولة هاتف المستلم. | لا | مثال: +971 أو +1. |
recipient.phone (string) | رقم هاتف المستلم. | نعم | حتى 30 حرفاً. |
recipient.email (string) | بريد المستلم. | لا | ليس إجبارياً لكل عميل. |
recipient.address_line1 (string) | عنوان المستلم، السطر الأول. | نعم | حتى 190 حرفاً. |
recipient.address_line2/3 (string) | أسطر عنوان إضافية. | لا | حتى 190 حرفاً لكل سطر. |
recipient.country_code (string) | كود بلد المستلم. | نعم | يجب أن يطابق destination_country. |
recipient.state_code/state_name (string) | الولاية أو المنطقة. | حسب الحالة | يفضل في دول مثل US/CA. |
recipient.city (string) | مدينة المستلم. | نعم | حتى 120 حرفاً. |
recipient.postal_code (string) | الرمز البريدي للمستلم. | لا | قد يكون إجبارياً حسب بلد الوصول. |
packages (array) | قائمة الطرود/القطع. | نعم | حد أدنى 1 وحد أقصى 100 صف. |
packages[].quantity (integer) | عدد القطع بنفس الأبعاد والوزن. | لا | الافتراضي 1. الحد الأقصى 100. |
packages[].length_cm / width_cm / height_cm (integer) | أبعاد الطرد. | نعم | عدد صحيح موجب بالسنتيمتر. |
packages[].weight_kg (decimal) | وزن الطرد. | نعم | قيمة موجبة بالكيلوغرام. حتى 3 منازل عشرية. |
products (array) | قائمة المنتجات/المحتويات. | نعم | حد أدنى صف واحد. |
products[].product_name_en / product_name_tr (string) | اسم المنتج. | نعم | product_name_en إجباري. إذا لم يتم إرسال product_name_tr يتم استخدام product_name_en. |
products[].hs_code (string) | كود HS. | نعم | يجب أن يحتوي على 4-20 رقماً. يفضل 6-12 رقماً. |
products[].origin_country (string) | بلد منشأ المنتج. | لا | الافتراضي TR. كود ISO-2. |
products[].quantity (integer) | كمية المنتج. | نعم | عدد صحيح موجب. |
products[].unit_price (decimal) | قيمة الوحدة. | نعم | لا يتم قبول صفر. يجب أن تكون قيمة موجبة؛ يتم قبول 0.01. |
products[].currency (string) | عملة المنتج. | نعم | إجباري. الأكواد المقبولة: USD - دولار أمريكي، EUR - يورو، GBP - جنيه إسترليني، CAD - دولار كندي، SAR - ريال سعودي. |
التتبع وصور الطرود
استجابة /v1/shipments/{shipment_no}/tracking ترجع ملخصاً آمناً في summary وحركات التتبع في events وصور الطرود في package_images عند توفرها. يجب تنزيل روابط الصور بنفس X-Mapex-Client-Id و X-Mapex-Api-Key.
{
"ok": true,
"shipment_no": "123456",
"status": "in_transit",
"tracking_number": "TRK123456789",
"carrier_tracking_code": "TRK123456789",
"summary": {
"package_count": 2,
"weight_kg": "47.00",
"origin_country": "TR",
"origin_country_name": "Turkey",
"destination_country": "CA",
"destination_country_name": "Canada",
"recipient_name": "Ja*** AT*****"
},
"events": [
{
"event_time": "2026-07-06 14:20:00",
"title": "Kayıt oluşturuldu",
"title_tr": "Kayıt oluşturuldu",
"title_en": "Shipment created",
"subtitle": "Gönderi bilgileri taşıyıcıya API üzerinden iletildi.",
"subtitle_tr": "Gönderi bilgileri taşıyıcıya API üzerinden iletildi.",
"subtitle_en": "Shipment details were sent to the carrier through the API.",
"location_text": "ISTANBUL TR",
"location_country_code": "TR",
"source": "SYSTEM",
"carrier_tracking_no": "TRK123456789"
}
],
"package_images": [
{
"image_id": 127,
"pack_no": 1,
"image_type": "PACKAGE",
"capture_method": "UPLOAD",
"file_name": "123456-1-example.jpg",
"file_ext": "jpg",
"mime_type": "image/jpeg",
"file_size_bytes": 424634,
"image_width": 2200,
"image_height": 1650,
"is_primary": true,
"url": "https://api.mapcargo.com.tr/v1/shipments/123456/images/127",
"thumbnail_url": "https://api.mapcargo.com.tr/v1/shipments/123456/images/127?size=thumb",
"created_at": "2026-07-06 14:25:00"
}
],
"request_id": "req_..."
}
صيغة الخطأ
{
"ok": false,
"error": {
"code": "validation_failed",
"message": "products.0.currency zorunludur ve şu kodlardan biri olmalıdır: USD, EUR, GBP, CAD, SAR.",
"details": {
"field": "products.0.currency",
"message_tr": "products.0.currency zorunludur ve şu kodlardan biri olmalıdır: USD, EUR, GBP, CAD, SAR.",
"message_en": "products.0.currency is required and must be one of these codes: USD, EUR, GBP, CAD, SAR.",
"allowed_values": ["USD", "EUR", "GBP", "CAD", "SAR"],
"allowed_currencies": {
"USD": {"tr": "Amerikan Doları", "en": "US Dollar"},
"EUR": {"tr": "Euro", "en": "Euro"},
"GBP": {"tr": "İngiliz Sterlini", "en": "British Pound Sterling"},
"CAD": {"tr": "Kanada Doları", "en": "Canadian Dollar"},
"SAR": {"tr": "Suudi Arabistan Riyali", "en": "Saudi Riyal"}
},
"received": null
}
},
"request_id": "req_..."
}
| Status | المعنى |
|---|---|
| 400 | JSON فارغ أو غير صحيح. |
| 401 | بيانات API ناقصة أو غير صحيحة. |
| 403 | خطأ في قائمة IP المسموح بها أو وصول API غير نشط. |
| 409 | تعارض في Idempotency أو حالة الشحنة. |
| 422 | خطأ في التحقق من Payload. |
| 429 | تم تجاوز حد الاستخدام. |
أمثلة الكود
$payload = array (
'external_reference' => 'CARGO-10001',
'origin_country' => 'TR',
'destination_country' => 'AE',
'shipment_type' => 'SALE',
'valuation_currency' => 'USD',
'sender' =>
array (
'entity_type' => 'COMPANY',
'company_name' => 'Sender Company',
'contact_name' => 'Sender Name',
'phone_country_code' => '+90',
'phone' => '5551112233',
'address_line1' => 'Istanbul warehouse',
'country_code' => 'TR',
'city' => 'Istanbul',
'postal_code' => '34000',
),
'recipient' =>
array (
'entity_type' => 'PERSON',
'full_name' => 'Receiver Name',
'phone_country_code' => '+971',
'phone' => '501112233',
'email' => 'receiver@example.com',
'address_line1' => 'Business Bay',
'country_code' => 'AE',
'city' => 'Dubai',
'postal_code' => '00000',
),
'packages' =>
array (
0 =>
array (
'quantity' => 1,
'length_cm' => 30,
'width_cm' => 20,
'height_cm' => 10,
'weight_kg' => 2.5,
),
),
'products' =>
array (
0 =>
array (
'product_name_en' => 'Cotton T-Shirt',
'product_name_tr' => 'Pamuk Tişört',
'hs_code' => '610910',
'origin_country' => 'TR',
'quantity' => 2,
'unit_price' => 12.5,
'currency' => 'USD',
),
),
'note' => 'Test gönderisi',
);
$ch = curl_init("https://api.mapcargo.com.tr/v1/shipments");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Mapex-Client-Id: mxcl_xxxxxxxxxxxxxxxx",
"X-Mapex-Api-Key: mxsk_xxxxxxxxxxxxxxxx",
"Idempotency-Key: cargo-10001",
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
]);
$response = curl_exec($ch);
$data = json_decode((string)$response, true);import requests
payload = {
"external_reference": "CARGO-10001",
"origin_country": "TR",
"destination_country": "AE",
"shipment_type": "SALE",
"valuation_currency": "USD",
"sender": {
"entity_type": "COMPANY",
"company_name": "Sender Company",
"contact_name": "Sender Name",
"phone_country_code": "+90",
"phone": "5551112233",
"address_line1": "Istanbul warehouse",
"country_code": "TR",
"city": "Istanbul",
"postal_code": "34000"
},
"recipient": {
"entity_type": "PERSON",
"full_name": "Receiver Name",
"phone_country_code": "+971",
"phone": "501112233",
"email": "receiver@example.com",
"address_line1": "Business Bay",
"country_code": "AE",
"city": "Dubai",
"postal_code": "00000"
},
"packages": [
{
"quantity": 1,
"length_cm": 30,
"width_cm": 20,
"height_cm": 10,
"weight_kg": 2.5
}
],
"products": [
{
"product_name_en": "Cotton T-Shirt",
"product_name_tr": "Pamuk Tişört",
"hs_code": "610910",
"origin_country": "TR",
"quantity": 2,
"unit_price": 12.5,
"currency": "USD"
}
],
"note": "Test gönderisi"
}
res = requests.post(
"https://api.mapcargo.com.tr/v1/shipments",
json=payload,
headers={
"X-Mapex-Client-Id": "mxcl_xxxxxxxxxxxxxxxx",
"X-Mapex-Api-Key": "mxsk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "cargo-10001",
},
timeout=20,
)
print(res.json())using System.Net.Http;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Mapex-Client-Id", "mxcl_xxxxxxxxxxxxxxxx");
client.DefaultRequestHeaders.Add("X-Mapex-Api-Key", "mxsk_xxxxxxxxxxxxxxxx");
client.DefaultRequestHeaders.Add("Idempotency-Key", "cargo-10001");
var json = """
{
"external_reference": "CARGO-10001",
"origin_country": "TR",
"destination_country": "AE",
"shipment_type": "SALE",
"valuation_currency": "USD",
"sender": {
"entity_type": "COMPANY",
"company_name": "Sender Company",
"contact_name": "Sender Name",
"phone_country_code": "+90",
"phone": "5551112233",
"address_line1": "Istanbul warehouse",
"country_code": "TR",
"city": "Istanbul",
"postal_code": "34000"
},
"recipient": {
"entity_type": "PERSON",
"full_name": "Receiver Name",
"phone_country_code": "+971",
"phone": "501112233",
"email": "receiver@example.com",
"address_line1": "Business Bay",
"country_code": "AE",
"city": "Dubai",
"postal_code": "00000"
},
"packages": [
{
"quantity": 1,
"length_cm": 30,
"width_cm": 20,
"height_cm": 10,
"weight_kg": 2.5
}
],
"products": [
{
"product_name_en": "Cotton T-Shirt",
"product_name_tr": "Pamuk Tişört",
"hs_code": "610910",
"origin_country": "TR",
"quantity": 2,
"unit_price": 12.5,
"currency": "USD"
}
],
"note": "Test gönderisi"
}
""";
var response = await client.PostAsync(
"https://api.mapcargo.com.tr/v1/shipments",
new StringContent(json, Encoding.UTF8, "application/json")
);
var body = await response.Content.ReadAsStringAsync();const payload = {
"external_reference": "CARGO-10001",
"origin_country": "TR",
"destination_country": "AE",
"shipment_type": "SALE",
"valuation_currency": "USD",
"sender": {
"entity_type": "COMPANY",
"company_name": "Sender Company",
"contact_name": "Sender Name",
"phone_country_code": "+90",
"phone": "5551112233",
"address_line1": "Istanbul warehouse",
"country_code": "TR",
"city": "Istanbul",
"postal_code": "34000"
},
"recipient": {
"entity_type": "PERSON",
"full_name": "Receiver Name",
"phone_country_code": "+971",
"phone": "501112233",
"email": "receiver@example.com",
"address_line1": "Business Bay",
"country_code": "AE",
"city": "Dubai",
"postal_code": "00000"
},
"packages": [
{
"quantity": 1,
"length_cm": 30,
"width_cm": 20,
"height_cm": 10,
"weight_kg": 2.5
}
],
"products": [
{
"product_name_en": "Cotton T-Shirt",
"product_name_tr": "Pamuk Tişört",
"hs_code": "610910",
"origin_country": "TR",
"quantity": 2,
"unit_price": 12.5,
"currency": "USD"
}
],
"note": "Test gönderisi"
};
const response = await fetch("https://api.mapcargo.com.tr/v1/shipments", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Mapex-Client-Id": "mxcl_xxxxxxxxxxxxxxxx",
"X-Mapex-Api-Key": "mxsk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "cargo-10001"
},
body: JSON.stringify(payload)
});
const data = await response.json();
OpenAPI
المخطط المقروء آلياً: https://api.mapcargo.com.tr/openapi.json