Navvo
مرجع الواجهة البرمجية

الخطط والإعلانات والأساطيل والبيانات

كتالوج خطط الواجهة البرمجية، صلاحيات المستهلكين، المواضع الإعلانية المُروَّجة، مطالبات الأعمال وحملاتها، توصيل الميل الأخير للأساطيل، وترخيص البيانات.

الخطط والإعلانات والأساطيل والبيانات

بُنيت معظم منصات الخرائط لأمريكا الشمالية وأوروبا، وسُعِّرت بالدولار أو اليورو، وجرت فوترتها عبر بوابات بالكاد تعمل في الشرق الأوسط. أمّا Navvo فمبنيّة بالاتجاه المعاكس. إنها منصة مصمَّمة محلياً للمنطقة: بياناتها مُنسَّقة للأردن ومنطقة الخليج عموماً، وعملاتها محلية، وأسطُحها التجارية — خطط الواجهة البرمجية، اشتراكات المستهلكين، المواضع الإعلانية المُروَّجة، خدمات الأساطيل اللوجستية، وترخيص البيانات — مُصمَّمة للشركات التي تعمل وتُصدِر الفواتير وتتقاضى مدفوعاتها في المنطقة.

توثّق هذه الصفحة الطبقة التجارية التي تعلو واجهات الخرائط البرمجية:

  • خطط الواجهة البرمجية وقياس الاستخدام — كتالوج الخطط العام، التسعير الإقليمي، وكيف يُحتسَب كل طلب ويُوزَن.
  • صلاحيات المستهلكين — تقييد ميزات Navvo Plus للمستخدمين النهائيين (الخرائط دون اتصال، Atlas المتقدّم، تنبيهات المخاطر).
  • الإعلانات / المواضع المُروَّجة — الدبابيس المُموَّلة، نتائج البحث المُموَّلة، وبطاقة Atlas مُموَّلة، مع فوترة قائمة على النقر.
  • الأعمال — المطالبة بملكية مكان، وإدارة الحملات، وتوليد نصوص تسويقية بالذكاء الاصطناعي، وتنسيق المداخل، وعرض علامات الأعمال على الخريطة.
  • الأساطيل / الميل الأخير — الأساطيل والسائقون ومهام التوصيل مع الدفع عند الاستلام، وتحسين المسار، وإثبات التسليم.
  • ترخيص البيانات — تصدير GeoJSON منزوع الهوية للشركاء المرخَّصين، إضافةً إلى إعادة توجيه الإحالة.
المصادقة. تُصادِق نقاط النهاية التجارية العامة (كتالوج الخطط، المواضع الإعلانية، نقرات الإعلانات، إعادة توجيه الإحالة) عبر مفتاح الواجهة البرمجية بصيغة -H "x-api-key: nvvo_YOUR_KEY". أمّا نقاط النهاية التي تتصرّف على حساب شخص بعينه أو أصوله — صلاحيات المستهلك ومجموعة الأساطيل بأكملها — فتتطلّب رمز JWT للمستخدم بصيغة -H "Authorization: Bearer USER_JWT" بدلاً من ذلك، ويُشار إلى هذا في كل نقطة نهاية. أمّا نقاط نهاية ترخيص البيانات فهي محصورة بالمسؤول. عنوان القاعدة هو https://navvo.io/api/v1.
المبالغ المالية بالوحدات الصغرى. جميع الأسعار أعداد صحيحة بالوحدة الصغرى لإحدى عملات المنطقة — JOD أو SAR أو AED. ينقسم الدينار الأردني إلى 1000 فلس، لذا اقسِم monthlyPriceMinor (وأي حقل ينتهي بـ Minor) على 1000 للحصول على المبلغ بالدينار: 29000 بالوحدة الصغرى = 29.000 JOD. أمّا الريال السعودي والدرهم الإماراتي فينقسمان إلى 100، لذا اقسِم على 100 في حالة SAR/AED. اقرأ دائماً حقل currency قبل التنسيق.

GET /billing/plans

تُعيد كتالوج خطط الواجهة البرمجية العام — كل خطة يمكن للمطوّر الاشتراك فيها، مع سعرها الإقليمي وحصة الطلبات المُتضمَّنة ومعدّل التجاوز وحدود المعدّل وقائمة الميزات. هذه النقطة آمنة للعرض مباشرةً على صفحة تسعير.

curl -s "https://navvo.io/api/v1/billing/plans" \
  -H "x-api-key: nvvo_YOUR_KEY"

الاستجابة

{
  "provider": "navvo-billing",
  "currency": "JOD",
  "plans": [
    {
      "key": "free",
      "name": "Free",
      "tagline": "For prototypes and side projects",
      "currency": "JOD",
      "monthlyPriceMinor": 0,
      "includedRequests": 50000,
      "overagePerThousandMinor": 0,
      "rateLimitPerMin": 60,
      "rateLimitPerDay": 5000,
      "features": ["search", "geocoding", "places", "map-tiles"]
    },
    {
      "key": "starter",
      "name": "Starter",
      "tagline": "For early-stage products going live",
      "currency": "JOD",
      "monthlyPriceMinor": 29000,
      "includedRequests": 500000,
      "overagePerThousandMinor": 400,
      "rateLimitPerMin": 300,
      "rateLimitPerDay": 100000,
      "features": ["search", "geocoding", "places", "map-tiles", "routing", "traffic"]
    },
    {
      "key": "growth",
      "name": "Growth",
      "tagline": "For scaling teams with real traffic",
      "currency": "JOD",
      "monthlyPriceMinor": 149000,
      "includedRequests": 5000000,
      "overagePerThousandMinor": 250,
      "rateLimitPerMin": 1200,
      "rateLimitPerDay": 1000000,
      "features": ["search", "geocoding", "places", "map-tiles", "routing", "traffic", "matrix", "fleet", "imagery"]
    },
    {
      "key": "enterprise",
      "name": "Enterprise",
      "tagline": "Custom volume, SLA, and data licensing",
      "currency": "JOD",
      "monthlyPriceMinor": null,
      "includedRequests": null,
      "overagePerThousandMinor": null,
      "rateLimitPerMin": null,
      "rateLimitPerDay": null,
      "features": ["all", "data-licensing", "priority-support", "dedicated-tiles"]
    }
  ]
}
الحقلالنوعالوصف
providerstringدائماً "navvo-billing".
currencystringعملة الفوترة لكتالوج هذا الحساب — إحدى عملات المنطقة: "JOD" أو "SAR" أو "AED".
plans[].keystringمُعرِّف آلي ثابت للخطة (free، starter، growth، enterprise). استخدمه عند الاشتراك.
plans[].namestringالاسم المعروض.
plans[].taglinestringوصف تسويقي من سطر واحد.
plans[].currencystringعملة الخطة (تطابق عملة الكتالوج currency).
plans[].monthlyPriceMinornumber | nullالسعر الشهري بالوحدات الصغرى لعملة currency (اقسِم على 1000 للدينار؛ وعلى 100 للريال/الدرهم). 0 للخطط المجانية، وnull لخطط المؤسسات "تواصل معنا".
plans[].includedRequestsnumber | nullالطلبات المُوزَّنة المُتضمَّنة شهرياً قبل تطبيق التجاوز. null تعني مخصَّصة/غير محدودة.
plans[].overagePerThousandMinornumber | nullالسعر لكل 1,000 طلب مُوزَّن إضافي بعد includedRequests، بالوحدات الصغرى. 0 عند عدم فوترة التجاوز؛ وnull للخطط المخصَّصة.
plans[].rateLimitPerMinnumber | nullالحدّ الأقصى للطلبات المُوزَّنة في الدقيقة. null للحدود المخصَّصة.
plans[].rateLimitPerDaynumber | nullالحدّ الأقصى للطلبات المُوزَّنة في اليوم. null للحدود المخصَّصة.
plans[].featuresstringعائلات ميزات الواجهة البرمجية التي تفتحها الخطة (تتطابق مع نطاقات مثل routing، traffic، matrix، fleet).
كل طلب يُقاس ويُوزَن. لا تحتسب Navvo جميع الطلبات بالتساوي. فالاستعلام الخفيف (ترميز جغرافي واحد، تفاصيل مكان واحد) يُحتسَب طلباً مُوزَّناً واحداً، بينما الطلبات كثيفة الحوسبة أو المتخصّصة إقليمياً تُحتسَب بأكثر — فمثلاً التوجيه وواجهة المصفوفة مميَّزتان وتحملان وزناً أعلى، والترميز الجغرافي العربي (المطابقة المراعية للنقحرة واللهجات) يُحتسَب بأكثر من ترميز جغرافي لاتيني عادي. وتُقاس حصة includedRequests وأي تجاوز بهذه الطلبات المُوزَّنة، لذا قد يستهلك حسابان يرسلان العدد نفسه من طلبات HTTP حصتيهما بمعدّلين مختلفين تماماً تبعاً لنقاط النهاية التي يطلبانها.
لعرض سعر على صفحة تسعير، اقرأ currency وmonthlyPriceMinor المطابق، ثم اقسِم على عامل الوحدة الصغرى للعملة (1000 للدينار، و100 للريال/الدرهم). تعامَل مع الأسعار بقيمة null بوصفها دعوةً لـ "تواصل مع المبيعات" لا خطةً مجانية.

GET /me/entitlements

تُعيد صلاحيات المستهلك للمستخدم المُسجَّل دخوله في Navvo — أي الميزات المميَّزة التي فتحها، وما إذا كان يملك اشتراك Navvo Plus، وسجلّات اشتراكاته الفعّالة. استخدمها لتقييد ميزات المستخدم النهائي في تطبيقك: تنزيل الخرائط دون اتصال، Atlas الذكي المتقدّم، تنبيهات المخاطر، وما شابه.

يتطلّب رمز JWT للمستخدم (لا مفتاح واجهة برمجية). مرِّر رمز جلسة المستخدم بوصفه رمز Bearer.

curl -s "https://navvo.io/api/v1/me/entitlements" \
  -H "Authorization: Bearer USER_JWT"

الاستجابة

{
  "provider": "navvo-entitlements",
  "entitlements": [
    "navvo_plus",
    "offline_maps",
    "atlas_advanced",
    "hazard_alerts"
  ],
  "plus": true,
  "subscriptions": [
    {
      "id": "sub_9f3a21",
      "product": "navvo_plus",
      "status": "active",
      "currency": "JOD",
      "priceMinor": 3500,
      "interval": "month",
      "renewsAt": "2026-07-19T00:00:00Z"
    }
  ]
}
الحقلالنوعالوصف
providerstringدائماً "navvo-entitlements".
entitlementsstringمفاتيح الميزات التي فتحها المستخدم. تحقّق من العضوية قبل تفعيل ميزة مُقيَّدة. المفاتيح الشائعة: navvo_plus، offline_maps، atlas_advanced، hazard_alerts.
plusbooleanعلامة ميسّرة — true عندما يملك المستخدم اشتراك Navvo Plus فعّالاً (يعادل احتواء entitlements على navvo_plus).
subscriptions[]arrayسجلّات الاشتراكات الفعّالة: id، product، status، currency، priceMinor (وحدات صغرى)، interval (month | year)، وrenewsAt.
تقييد الميزات. صلاحية navvo_plus هي المفتاح الرئيس للميزات المميَّزة للمستهلك. عند وجودها، تفتح الخرائط دون اتصال (مناطق خرائط قابلة للتنزيل للاستخدام بلا اتصال)، وAtlas المتقدّم (مساعد Atlas الذكي الأعلى قدرةً)، وتنبيهات المخاطر (إشعارات استباقية بمخاطر الطريق والحوادث). قيِّد واجهتك على مفتاح الصلاحية المحدَّد لا على plus وحدها، كي تظل الميزات المُمنوحة فردياً (التجارب، حزم الشركاء) تعمل.
تعكس الصلاحيات حساب المستخدم وقت الطلب وقد تتغيّر عند تجديد اشتراك أو انقضائه أو ردّ قيمته. أعِد جلبها عند تشغيل التطبيق وبعد أي عملية شراء؛ ولا تخزِّن قرار صلاحية مؤقتاً إلى أجل غير مسمّى.

GET /ads/promoted

تُعيد دبابيس خريطة مُموَّلة داخل منطقة عرض — أماكن "مُروَّجة" يدفع مُعلِن لإبرازها. اعرضها إلى جانب نتائج البحث العضوية مع وسمها بصرياً بوصفها مُموَّلة. الفوترة بنظام CPC (التكلفة لكل نقرة): المشاهدات مجانية؛ وتُحاسَب عند نقر المستخدم (انظر POST /ads/{id}/click).

curl -s "https://navvo.io/api/v1/ads/promoted?bbox=35.85,31.90,36.00,32.00&categories=restaurant,cafe" \
  -H "x-api-key: nvvo_YOUR_KEY"

معاملات الاستعلام

bbox
string required
مربع إحاطة منطقة العرض بصيغة west,south,east,north (خط الطول/خط العرض بالدرجات العشرية). تُعاد فقط الدبابيس المُروَّجة داخل هذا المربع.
categories
string
تصفية فئات مفصولة بفواصل (مثل restaurant,cafe,fuel). عند تعيينها، تُعاد فقط الإعلانات ضمن هذه الفئات. اتركها لجميع الفئات.

الاستجابة

{
  "provider": "navvo-ads",
  "type": "promoted_pin",
  "count": 1,
  "ads": [
    {
      "id": "ad_promo_8821",
      "type": "promoted_pin",
      "placeId": "plc_amman_cafe_4410",
      "title": "Rumi Café — Abdali",
      "subtitle": "Specialty coffee · Open now",
      "imageUrl": "https://navvo.io/ads/img/ad_promo_8821.jpg",
      "ctaUrl": "https://navvo.io/go?ref=RUMI-ABDALI",
      "lat": 31.9568,
      "lng": 35.9098,
      "sponsored": true
    }
  ]
}
الحقلالنوعالوصف
providerstringدائماً "navvo-ads".
typestringدائماً "promoted_pin" لهذه النقطة.
countnumberعدد الإعلانات المُعادة.
ads[].idstringمُعرِّف الإعلان. مرِّره إلى POST /ads/{id}/click عندما ينقر المستخدم الدبّوس أو دعوته للإجراء.
ads[].typestring"promoted_pin".
ads[].placeIdstringالمكان في Navvo الذي يروِّج له الإعلان — استخرِجه عبر واجهة الأماكن للحصول على التفاصيل الكاملة.
ads[].title / subtitlestringنص العرض لبطاقة الدبّوس.
ads[].imageUrlstringرابط صورة التصميم/المصغّرة.
ads[].ctaUrlstringرابط الوجهة لدعوة الإجراء. افتحه فقط بعد تسجيل النقرة.
ads[].lat / lngnumberإحداثيات الدبّوس.
ads[].sponsoredbooleanدائماً true. يجب أن تسِمها بصرياً بوصفها مُموَّلة.

تُعيد نتائج مُموَّلة لدمجها في قائمة نتائج البحث لاستعلام معيّن. الشكل نفسه للدبابيس المُروَّجة لكن بنوع sponsored_search. اعرضها موسومةً بوضوح بوصفها مُموَّلة، عادةً في أعلى النتائج العضوية.

curl -s "https://navvo.io/api/v1/ads/sponsored-search?q=coffee" \
  -H "x-api-key: nvvo_YOUR_KEY"

معاملات الاستعلام

q
string required
استعلام بحث المستخدم. تُطابَق الإعلانات بهذا الاستعلام.

الاستجابة

{
  "provider": "navvo-ads",
  "type": "sponsored_search",
  "count": 1,
  "ads": [
    {
      "id": "ad_search_5530",
      "type": "sponsored_search",
      "placeId": "plc_amman_cafe_4410",
      "title": "Rumi Café",
      "subtitle": "Sponsored · Specialty coffee in Abdali",
      "imageUrl": "https://navvo.io/ads/img/ad_search_5530.jpg",
      "ctaUrl": "https://navvo.io/go?ref=RUMI-SEARCH",
      "lat": 31.9568,
      "lng": 35.9098,
      "sponsored": true
    }
  ]
}

تستخدم كائنات ads[] الحقول نفسها لـ GET /ads/promoted، مع تعيين type على "sponsored_search".


GET /ads/atlas-card

تُعيد بطاقة مُموَّلة واحدة على الأكثر لإبرازها داخل مساعد Atlas الذكي لاستعلام معيّن — ترويجاً واحداً وثيق الصلة بالسياق يُعرَض بطاقةً غنية ضمن نتيجة حوارية. النوع atlas_card. تُعيد ad: null عند عدم وجود راعٍ مناسب للاستعلام.

curl -s "https://navvo.io/api/v1/ads/atlas-card?q=where%20can%20I%20get%20coffee%20nearby" \
  -H "x-api-key: nvvo_YOUR_KEY"

معاملات الاستعلام

q
string required
استعلام/نيّة المستخدم في Atlas. تُعاد البطاقة المُموَّلة الأفضل مطابقةً، أو لا شيء.

الاستجابة

{
  "provider": "navvo-ads",
  "type": "atlas_card",
  "ad": {
    "id": "ad_atlas_2207",
    "type": "atlas_card",
    "placeId": "plc_amman_cafe_4410",
    "title": "Rumi Café",
    "subtitle": "Specialty coffee · 400 m away · Open now",
    "imageUrl": "https://navvo.io/ads/img/ad_atlas_2207.jpg",
    "ctaUrl": "https://navvo.io/go?ref=RUMI-ATLAS",
    "lat": 31.9568,
    "lng": 35.9098,
    "sponsored": true
  }
}
الحقلالنوعالوصف
providerstringدائماً "navvo-ads".
typestringدائماً "atlas_card".
adobject | nullكائن إعلان واحد (بالحقول نفسها لـ GET /ads/promoted)، أو null عند عدم وجود راعٍ مطابق.
بما أنّ Atlas حواري، اعرض البطاقة فقط عندما يكون ad غير فارغ، وأبقِ وسم المُموَّل ظاهراً. تعامَل مع بطاقة null بوصفها الحالة الطبيعية لا خطأً.

POST /ads/{id}/click

تُسجِّل نقرة قابلة للفوترة على إعلان وتُعيد رابط الوجهة للانتقال إليه. هذه هي اللحظة التي تُحاسَب فيها بنظام CPC — استدعِها مرة واحدة بالضبط عندما ينقر المستخدم فعلياً الإعلان أو دعوته للإجراء، ثم افتح الـ ctaUrl المُعاد.

curl -s -X POST "https://navvo.io/api/v1/ads/ad_promo_8821/click" \
  -H "x-api-key: nvvo_YOUR_KEY"

معاملات المسار

id
string required
حقل ads[].id من أي من نقاط نهاية الإعلانات أعلاه.

الاستجابة

{
  "ok": true,
  "ctaUrl": "https://navvo.io/go?ref=RUMI-ABDALI",
  "chargedMinor": 180
}
الحقلالنوعالوصف
okbooleantrue عند تسجيل النقرة.
ctaUrlstringالوجهة التي تُفتَح بعد تسجيل النقرة — عادةً إعادة توجيه إحالة من Navvo (/go?ref=…).
chargedMinornumberتكلفة النقرة (CPC) المُحاسَبة فعلياً (وحدات صغرى). لإعلان ذاتي المزايدة هذه هي المزايدة الفعّالة وقت النقر، لا الأساسية.
حدث فوترة. كل استدعاء ناجح لهذه النقطة هو نقرة CPC قابلة للفوترة. لا تستدعِها عند المشاهدة أو التحويم أو العرض — بل عند نقرة مستخدم حقيقية فقط — ولا تُعِد محاولتها على التفاعل نفسه، وإلّا حاسبتَ المُعلِن مرتين.

المزايدة الذكية التلقائية

افتراضياً يزايد الإعلان بتكلفة CPC ثابتة (bidMinor). فعِّل المزايدة التلقائية ليضبط Navvo المزايدة ديناميكياً لإنفاق الميزانية اليومية بالتساوي والفوز بالمشاهدات حيث تكون أعلى قيمة. فعِّلها بإضافة كائن autoBid إلى targeting الإعلان:

{ "targeting": { "categories": ["restaurant"], "autoBid": { "enabled": true, "maxBidMinor": 250 } } }
الحقلالنوعملاحظات
enabledbooleanتشغيل المزايدة التلقائية لهذا الإعلان
maxBidMinornumberسقف اختياري للمزايدة الفعّالة (الافتراضي 3× المزايدة الأساسية)

تحرّكها آليتان:

  • ضبط وتيرة الميزانية — تتدرّج المزايدة الفعّالة بحسب تأخّر الإنفاق أو تقدّمه عن وتيرة يومية متساوية. متأخّر → ترفع المزايدة (حتى 3×) للّحاق؛ متقدّم → تخفضها (حتى 0.25×) لتدوم الميزانية. ولا تزايد أبداً بأكثر من المتبقّي من الميزانية.
  • ترتيب eCPM — تتنافس الإعلانات على الإيراد المتوقّع لكل مشاهدة = المزايدة الفعّالة × نسبة النقر المتوقّعة (CTR مُنعَّمة بأسلوب لابلاس بأولوية 5%). الإعلان الجديد يُرتَّب بمزايدته؛ ومع تجميعه للنقرات يفوز الأداء المُثبَت بمكان أفضل عند المزايدة نفسها أو أقل.

ثم تحاسب POST /ads/{id}/click المزايدة الفعّالة (تُعاد كـ chargedMinor).

GET /admin/ads/{id}/bid · للمشرفين

شفافية لإعلان ذاتي المزايدة — تفصيل المزايدة الحيّة. للمشرفين فقط.

{
  "ok": true, "id": "ad_promo_8821",
  "autoBid": { "enabled": true, "maxBidMinor": 250 },
  "baseBidMinor": 100, "pacingMultiplier": 1.8, "pCtr": 0.05,
  "effectiveBidMinor": 180, "auctionScore": 9.0, "remainingBudgetMinor": 9000
}

الأعمال

واجهة الأعمال هي الطريقة التي تتولّى بها الشركة حضورها على خريطة Navvo: طالِب بملكية سجلّ المكان، ثم — بعد التحقّق من المطالبة — أدِر الحملات، وولِّد نصوصاً تسويقية بالذكاء الاصطناعي، ونسِّق مداخل المكان لذكاء الوصول. وتتوفّر أيضاً تغذية علامات عامة لعرض دبابيس الأعمال على أي سطح خريطة.

المصادقة. تتطلّب جميع إجراءات المالك (/business/claims و/business/campaigns و/business/ai-copy وإضافة المداخل) رمز JWT للمستخدم-H "Authorization: Bearer USER_JWT". أمّا القراءتان المخصّصتان لعرض الخريطة — GET /business/markers وGET /places/{slug}/entrances — فعامّتان وتُصادِقان بمفتاح الواجهة البرمجية كأي قراءة أخرى.

POST /business/claims

قدِّم مطالبة بملكية مكان. يمكن لأي مستخدم مُسجَّل الدخول تقديم مطالبة؛ يراجع مشرف Navvo الأدلة، وبعد الموافقة يصبح حسابك المالك المتحقَّق منه للمكان، ما يفتح نقاط النهاية المحصورة بالمالك أدناه.

curl -s -X POST "https://navvo.io/api/v1/business/claims" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "placeId": "plc_amman_cafe_4410",
    "evidence": "رخصة مهن رقم 445871 مسجَّلة باسم شركة مقهى الرومي",
    "evidenceType": "trade_license",
    "evidenceUrls": { "license": "https://example.com/license.pdf" }
  }'

الجسم

الحقلالنوعالوصف
placeIdنص، مطلوبالمكان المُطالَب به (الحقل id من واجهة الأماكن أو GET /business/markers).
evidenceنصبيان داعم بنصّ حرّ.
evidenceTypeنصأحد trade_license أو domain_email أو phone أو document أو other (الافتراضي other).
evidenceUrlsكائنروابط لمستندات الأدلة المرفوعة، بأي مفاتيح تشاء.

الاستجابة

{
  "id": "clm_1f2e3d",
  "placeId": "plc_amman_cafe_4410",
  "status": "pending",
  "evidenceType": "trade_license",
  "createdAt": "2026-07-02T09:30:00Z"
}

تبدأ المطالبات بالحالة pending ويُوسَم المكان على الخريطة بأن مطالبته قيد المراجعة. تابع التقدّم عبر GET /business/claims.

GET /business/claims

مطالباتك أنت، الأحدث أولاً (رمز JWT للمستخدم). تُعيد { total, items[] }؛ ويحمل كل عنصر حالته status (‏pendingapproved / rejected) إضافةً إلى reviewedAt وreviewNotes بعد بتّ المشرف.

curl -s "https://navvo.io/api/v1/business/claims" \
  -H "Authorization: Bearer USER_JWT"

ذو صلة: تُعيد GET /business/owned-places (رمز JWT للمستخدم) سجلّات الأماكن الكاملة لكل مكان ملكيتك فيه متحقَّق منها — أي مجموعة الأماكن التي يمكن لنقاط النهاية أدناه التصرّف عليها.

POST /business/campaigns

أنشئ حملة ترويجية لمكان تملكه (مالك متحقَّق منه أو مسؤول). تُنشأ الحملات بالحالة draft؛ وتتحوّل المسودّة إلى موضع إعلاني حيّ (دبوس مُروَّج، بحث مُموَّل، بطاقة Atlas) بعد تفعيلها وتمويلها.

curl -s -X POST "https://navvo.io/api/v1/business/campaigns" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "placeId": "plc_amman_cafe_4410",
    "name": "حملة القهوة المثلّجة الصيفية",
    "targeting": { "categories": ["cafe"], "autoBid": { "enabled": true, "maxBidMinor": 250 } }
  }'

الاستجابة

{
  "id": "cmp_77aa",
  "placeId": "plc_amman_cafe_4410",
  "name": "حملة القهوة المثلّجة الصيفية",
  "status": "draft",
  "targeting": { "categories": ["cafe"], "autoBid": { "enabled": true, "maxBidMinor": 250 } },
  "createdAt": "2026-07-02T09:31:00Z"
}
الحقلالنوعالوصف
placeIdنص، مطلوبمكان تملكه. يحصل غير المالكين على 403.
nameنص، مطلوباسم العرض للحملة.
targetingكائناستهداف الإعلان — بالشكل نفسه لكائن targeting في الإعلانات (categories وautoBid وغيرهما).

GET /business/campaigns

اعرض الحملات (رمز JWT للمستخدم، محصورة بالأماكن التي تملكها؛ يرى المسؤولون الجميع). رشِّح عبر ?placeId=.

curl -s "https://navvo.io/api/v1/business/campaigns?placeId=plc_amman_cafe_4410" \
  -H "Authorization: Bearer USER_JWT"

تُعيد { total, items[] } من كائنات الحملات (كما في POST /business/campaigns)، الأحدث أولاً.

POST /business/ai-copy

ولِّد نصوصاً تسويقية ووسوماً موجزة بالعربية والإنجليزية آمنة للإنتاج لمكان تملكه (مالك متحقَّق منه أو مسؤول). مرِّر كائن context بصيغة حرّة يصف ما تريد الكتابة عنه — المزايا، العروض، النبرة، الجمهور.

curl -s -X POST "https://navvo.io/api/v1/business/ai-copy" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "placeId": "plc_amman_cafe_4410",
    "context": { "highlights": ["قهوة مختصة", "جلسة على السطح"], "tone": "ودّي", "offer": "خصم 10% قبل العاشرة صباحاً" }
  }'

الاستجابة

{
  "model": "navvo-copywriter",
  "unavailable": false,
  "purpose": "business_copy",
  "content": "AR: قهوة مختصة على السطح في قلب العبدلي — خصم ١٠٪ قبل العاشرة صباحًا.\nEN: Rooftop specialty coffee in the heart of Abdali — 10% off before 10am."
}
هذه نقطة نهاية من نمط الوسيط: تُعيد 201 حتى عندما تكون خلفية الذكاء الاصطناعي معطّلة. تحقّق دائماً من unavailable قبل استخدام content — عندما تكون true يكون content فارغاً وعليك المحاولة لاحقاً.

GET /business/markers

تغذية دبابيس أعمال عامة متكيّفة مع مستوى التقريب لعرض الخريطة — الأماكن المُموَّلة أولاً ثم حسب التقييم. تُعيد التصنيف القانوني لكل مكان إضافةً إلى نمطه categoryStyle المُهيَّأ من لوحة الإدارة (اللون والأيقونة وشكل الدبوس) لتُعرَض الدبابيس متّسقةً مع خريطة Navvo.

curl -s "https://navvo.io/api/v1/business/markers?bbox=35.85,31.90,36.00,32.00&zoom=14&category=restaurants" \
  -H "x-api-key: nvvo_YOUR_KEY"

معاملات الاستعلام

bbox
string
منطقة العرض بصيغة west,south,east,north. احذفه لإلغاء الترشيح المكاني.
zoom
number
تقريب الخريطة الحالي. يتحكّم بسقف النتائج على الخادم (دبابيس أقل عند الإبعاد، حتى 260 عند التقريب) وبنطاق ظهور التصنيفات حسب التقريب.
category
string
اسم تصنيف واحد (مثل restaurants أو fuel). تُوحَّد الأسماء البديلة تلقائياً.
status
string
رشِّح حسب حالة المطالبة، مثلاً verified للأعمال المُطالَب بها فقط.
limit
number
أقصى نتائج مطلوب — يُقيَّد دائماً بسقف الخادم المبني على التقريب.

الاستجابة

{
  "limit": 60,
  "zoom": 14,
  "category": "restaurants",
  "categoryFiltered": true,
  "performance": {
    "requestedLimit": null, "limit": 60, "zoom": 14,
    "candidateCount": 118, "returnedCount": 60,
    "serverCapped": false, "resultCapped": true, "capReason": "zoom-limit"
  },
  "items": [
    {
      "id": "745cd311-887e-40ed-989d-94f7cb4d8f51",
      "slug": "rumi-cafe-abdali-4410",
      "nameEn": "Rumi Café",
      "nameAr": "مقهى الرومي",
      "canonicalCategorySlug": "restaurants",
      "categories": ["restaurants"],
      "rawCategories": ["Coffee shop"],
      "categoryStyle": {
        "source": "admin_map_categories",
        "slug": "restaurants",
        "color": "#F97316",
        "iconName": "pin",
        "pinStyle": "circle",
        "zoomRange": { "min": 12, "max": 20 },
        "visibility": { "map": true, "nearby": true, "searchFilters": true }
      },
      "claimStatus": "verified",
      "sponsored": true,
      "rating": 4.6,
      "lng": 35.9098,
      "lat": 31.9568
    }
  ]
}
الحقلالنوعالوصف
performanceكائنتشخيص السقف — candidateCount مقابل returnedCount، وهل قُيِّدت النتيجة (serverCapped/resultCapped) ولماذا (capReason).
items[].canonicalCategorySlugنصتصنيف Navvo القانوني للمكان (تُطابَق تصنيفات الاستيراد الخام مع تصنيفات لوحة الإدارة أو تُستنتَج).
items[].categoryStyleكائن | nullتنسيق الدبوس المُهيَّأ للتصنيف: color وiconName وpinStyle ونطاق التقريب الصالح zoomRange وظهور الأسطح visibility.
items[].claimStatusنصunclaimed أو pending أو verified.
items[].sponsoredمنطقيتُرتَّب الأماكن المُموَّلة أولاً — اعرضها بوسم واضح إن كنت تُميّز الدبابيس.

GET /places/{slug}/entrances

عامة — اعرض مداخل المكان المعتمدة (السجلّات نفسها التي تُغذّي arrivalIntelligence في GET /places/{slug}).

curl -s "https://navvo.io/api/v1/places/rumi-cafe-abdali-4410/entrances" \
  -H "x-api-key: nvvo_YOUR_KEY"
[
  {
    "id": "ent_9a01",
    "type": "main",
    "label": "الباب الرئيسي — جهة شارع الرينبو",
    "notes": "دون درجات. مدخل المواقف بعد 40 متراً شرقاً.",
    "location": "POINT(35.9099 31.9569)"
  }
]

POST /places/{slug}/entrances

أضِف مدخلاً لمكان — المالك المتحقَّق منه للمكان، أو المسؤول. تمرّ المداخل المُقدَّمة عبر مراجعة إشراف قبل ظهورها للعموم وفي ذكاء الوصول، لذا لا يظهر المدخل الجديد في القراءات العامة فوراً. (كان تقديم المداخل متاحاً سابقاً لأي مستخدم مُسجَّل الدخول؛ وصار الآن محصوراً بالمالك/المسؤول مع الإشراف.)

curl -s -X POST "https://navvo.io/api/v1/places/rumi-cafe-abdali-4410/entrances" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "parking",
    "label": "مدخل مواقف السيارات",
    "notes": "الحد الأقصى للارتفاع 2.1 متر",
    "lat": 31.9571,
    "lng": 35.9103
  }'
الحقلالنوعالوصف
typeنص، مطلوبنوع المدخل — مثل main أو parking أو delivery أو accessible.
labelنصتسمية عرض قصيرة.
notesنصإرشاد الأمتار الأخيرة المعروض للمستخدمين عند الوصول.
lat / lngرقم، مطلوبإحداثيات المدخل.
المداخل المُنسَّقة جيداً تُحسِّن وصول عملائك مباشرةً: تُرتِّبها GET /places/{slug} ضمن arrivalIntelligence.candidates[]، والتوجيه إلى candidates[0].routeTarget أفضل من التوجيه إلى دبوس الخريطة.

الأساطيل / الميل الأخير

تُحوِّل واجهة الأساطيل Navvo إلى منصة توصيل للميل الأخير: نظِّم الأساطيل، وعيِّن السائقين، وأرسِل مهام التوصيل (مع الدفع عند الاستلام)، وحسِّن ترتيب توقّفات اليوم، والتقِط إثبات التسليم. وهي مصمَّمة لشركات التوصيل والخدمات اللوجستية عند الطلب في المنطقة، بما في ذلك تدفّقات الدفع النقدي عند الاستلام الشائعة في الشرق الأوسط.

تتطلّب جميع نقاط نهاية الأساطيل رمز JWT للمستخدم (المالك/المُرسِل المُصادَق، أو — لنقاط النهاية الموجَّهة للسائق — السائق المُصادَق). مرِّره بصيغة -H "Authorization: Bearer USER_JWT".

هذا القسم نظرة عامة على المجموعة لا مرجعاً حقلاً بحقل لكل نقطة نهاية.

الأساطيل والسائقون

# عرض أساطيلك
curl -s "https://navvo.io/api/v1/fleet" \
  -H "Authorization: Bearer USER_JWT"

# إنشاء أسطول
curl -s -X POST "https://navvo.io/api/v1/fleet" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Amman City Couriers", "city": "Amman" }'
نقطة النهايةالغرض
GET /fleetعرض الأساطيل التي تملكها.
POST /fleetإنشاء أسطول ({ name, city? }).
GET /fleet/{id}/driversعرض سائقي أسطول.
POST /fleet/{id}/driversإضافة سائق إلى أسطول ({ name, phone?, vehicle? }).

مهام التوصيل (مع الدفع عند الاستلام)

# إنشاء مهمة توصيل مع دفع نقدي عند الاستلام
curl -s -X POST "https://navvo.io/api/v1/fleet/flt_amman_01/tasks" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "Rainbow Street, Amman",
    "lat": 31.9515,
    "lng": 35.9239,
    "recipient": "Layla H.",
    "phone": "+962790000000",
    "codAmountMinor": 12500,
    "codCurrency": "JOD"
  }'
نقطة النهايةالغرض
GET /fleet/{id}/tasksعرض مهام التوصيل لأسطول.
POST /fleet/{id}/tasksإنشاء مهمة توصيل. تدعم حقول الدفع عند الاستلام (أدناه).

تحمل كل مهمة تفاصيل التوصيل (إحداثيات الوجهة، المُستلِم، جهة الاتصال) إضافةً إلى حقول الدفع عند الاستلام الاختيارية:

الحقلالنوعالوصف
codAmountMinornumberالمبلغ المطلوب تحصيله عند التسليم، بالوحدات الصغرى (مثل 12500 = 12.500 JOD). اتركه أو 0 للطلبات المدفوعة مسبقاً.
codCurrencystringعملة مبلغ الدفع عند الاستلام — إحدى عملات المنطقة (JOD / SAR / AED).
codCollectedbooleanما إذا كان السائق قد حصّل النقد (يُضبَط عند تحديث الحالة).
proofUrlstringرابط دليل إثبات التسليم (توقيع/صورة) المُلتقَط عند الإتمام.

تحسين المسار

# ترتيب توقّفات سائق المعلَّقة بأقرب جار من نقطة بداية
curl -s -X POST "https://navvo.io/api/v1/fleet/flt_amman_01/optimize" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{ "start": { "lat": 31.9539, "lng": 35.9106 }, "driverId": "drv_77" }'

تأخذ POST /fleet/{id}/optimize نقطة start وdriverId اختيارياً، وتُعيد المهام المعلَّقة للأسطول مُعاد ترتيبها في مسار أقرب جار فعّال (كل توقّف تالٍ هو الأقرب من بين المتبقّي). اترك driverId لتحسين جميع المهام غير المُسنَدة في الأسطول.

نقاط النهاية الموجَّهة للسائق

تستدعيها تطبيق السائق، مُصادَقاً بوصفه السائق:

نقطة النهايةالغرض
GET /fleet/me/tasksمهام اليوم المُسنَدة للسائق المُسجَّل دخوله.
PATCH /fleet/tasks/{taskId}/statusتحديث حالة مهمة ({ status, codCollected?, proofUrl? }) — مثل وسمها delivered، وتسجيل تحصيل النقد، وإرفاق إثبات التسليم.
POST /fleet/drivers/{driverId}/pingالإبلاغ عن موقع السائق الحيّ ({ lat, lng }) للتتبّع وحساب الوقت المتوقَّع للوصول.
# السائق يَسِم مهمة بأنها مُسلَّمة، والنقد محصَّل، مع دليل
curl -s -X PATCH "https://navvo.io/api/v1/fleet/tasks/tsk_5521/status" \
  -H "Authorization: Bearer USER_JWT" \
  -H "Content-Type: application/json" \
  -d '{ "status": "delivered", "codCollected": true, "proofUrl": "https://navvo.io/pod/tsk_5521.jpg" }'
الدفع عند الاستلام وإثبات التسليم. الدفع النقدي عند الاستلام عنصر أساسي في واجهة الأساطيل لأنه يبقى وسيلة الدفع المهيمنة للتجارة الإلكترونية في كثير من أنحاء المنطقة. سجِّل المبلغ على المهمة (codAmountMinor / codCurrency)، وعند الإتمام اضبط codCollected: true وأرفِق proofUrl كي يُسوَّى النقد المحصَّل والتسليم معاً.

تسوية الدفع عند الاستلام

نقطة النهايةالغرض
GET /fleet/{id}/cod-reconciliationمحاسبة نقدية لكل سائق في الأسطول (المالك).
GET /admin/fleet/cod-reconciliation?fleetId=التقرير نفسه، محصور بالمسؤول.

تقرير النقد في نهاية اليوم الذي تحتاجه كل عملية دفع عند الاستلام — يجمّع مهام COD حسب السائق ويخبرك، لكل سائق وإجمالاً، كم نقداً حُصِّل، وكم لا يزال مستحقّاً (خارج للتوصيل)، والأهم — أي تباين (discrepancy): طرود مُعلَّمة delivered دون ضبط codCollected، أي نقد كان يجب تسليمه ولم يُسجَّل. وتُتعقَّب الطرود الفاشلة/المرتجَعة منفصلةً (لا نقد متوقَّع).

curl -s "https://navvo.io/api/v1/fleet/flt_amman_01/cod-reconciliation" \
  -H "Authorization: Bearer USER_JWT"
{
  "provider": "navvo-fleet", "fleetId": "flt_amman_01", "currency": "JOD",
  "totals": { "collectedMinor": 142500, "outstandingMinor": 38000, "discrepancyMinor": 5000, "failedMinor": 9000, "codTasks": 37 },
  "drivers": [
    { "driverId": "drv_12", "name": "Sami",
      "collectedMinor": 100000, "outstandingMinor": 7000, "discrepancyMinor": 5000, "failedMinor": 0,
      "collectedCount": 8, "outstandingCount": 1, "discrepancyCount": 1 }
  ]
}

قيمة discrepancyMinor غير الصفرية هي الرقم الذي يجب التحقيق فيه — فهو نقد مُسلَّم لم يُسوَّ مع سائق. كل المبالغ بالوحدات الصغرى للعملة currency.

لوحة أداء السائقين

نقطة النهايةالغرض
GET /fleet/{id}/driver-performanceترتيب سائقي الأسطول (المالك).
GET /admin/fleet/driver-performance?fleetId=نفسه، محصور بالمسؤول.

يرتّب السائقين بمقياس مركّب من حجم التوصيل × موثوقية الإكمال (score = delivered × successRate × 100)، مع متوسط زمن التوصيل وموثوقية الدفع عند الاستلام — فيتفوّق سائق عالي الحجم بموثوقية جيدة (لا مثالية) على سائق منخفض الحجم مثالي.

{
  "provider": "navvo-fleet", "fleetId": "flt_amman_01", "driverCount": 3,
  "drivers": [
    { "rank": 1, "driverId": "drv_2", "name": "Lina", "status": "online",
      "delivered": 6, "failed": 2, "canceled": 0, "active": 1,
      "successRate": 0.75, "avgDeliveryMinutes": 30, "codReliability": 1, "score": 450 },
    { "rank": 2, "driverId": "drv_1", "name": "Sami",
      "delivered": 4, "failed": 0, "successRate": 1, "avgDeliveryMinutes": 20, "score": 400 }
  ]
}
الحقلملاحظات
successRatedelivered / (delivered + failed + canceled)
avgDeliveryMinutesمتوسط assignedAt → deliveredAt، بحدّ أقصى 24 ساعة (null إن كان مجهولاً)
codReliabilityنسبة طرود COD للسائق التي سُجِّل نقدها بشكل صحيح (null إن لا COD)
scoreمقياس الترتيب — حجم التوصيل موزوناً بموثوقية الإكمال

ترخيص البيانات (شريك / مسؤول)

يمكن للشركاء المرخَّصين سحب GeoJSON منزوع الهوية ومُجمَّع من مجموعات بيانات Navvo الإقليمية — للتحليلات أو البحث أو لإثراء منتجاتهم — بموجب اتفاقية ترخيص بيانات. هذه النقاط محصورة بالمسؤول: فهي غير متاحة بمفتاح مطوّر قياسي وتُوفَّر لحسابات الشركاء المرخَّصين.

نقطة النهايةالغرض
GET /admin/data-licensing/datasetsعرض مجموعات البيانات المتاحة للترخيص (لكلٍّ مفتاح واسم وعدد صفوف) إضافةً إلى صيغ التصدير المدعومة formats.
GET /admin/data-licensing/export?dataset=…&format=…&bbox=…تصدير مجموعة بيانات بالصيغة المختارة لمنطقة عرض اختيارية.

مجموعات البيانات (dataset=): signs (إشارات الطرق / النقاط)، incidents (حوادث نشطة منزوعة الهوية)، places (دليل النقاط العامة — الاسم، التصنيف، الإحداثيات).

الصيغ (format=، الافتراضي geojson):

الصيغةContent-Typeالاستخدام
geojsonapplication/geo+jsonFeatureCollection قياسية (الافتراضي؛ تُعاد ضمنياً)
ndjsonapplication/x-ndjsonFeature واحد في كل سطر — مناسب للبثّ والبيانات الضخمة
csvtext/csvأعمدة مسطّحة lng,lat,… للجداول / pandas
sqlapplication/sqlتفريغ محمول CREATE TABLE + INSERT للتحميل مباشرةً في مستودع بيانات

تُنزَّل صيغ ndjson/csv/sql كملف (Content-Disposition)؛ والقيم مُهرَّبة بشكل صحيح (اقتباس CSV، ومضاعفة الاقتباس المفرد في SQL).

# عرض مجموعات البيانات والصيغ القابلة للترخيص (محصورة بالمسؤول)
curl -s "https://navvo.io/api/v1/admin/data-licensing/datasets" \
  -H "x-api-key: nvvo_YOUR_KEY"

# تصدير نقاط إشارات الطرق بصيغة SQL لمنطقة عرض
curl -s "https://navvo.io/api/v1/admin/data-licensing/export?dataset=signs&format=sql&bbox=35.85,31.90,36.00,32.00" \
  -H "x-api-key: nvvo_YOUR_KEY"

جميع التصديرات منزوعة الهوية — فبلاغات الحوادث مُجمَّعة ومجهولة الهوية، ولا تُضمَّن هوية المُبلِّغ أبداً.

GET /admin/privacy/density · خصوصية تفاضلية

خريطة كثافة آمنة للخصوصية — أين يتجمّع النشاط، مُطلَقة بموجب خصوصية تفاضلية رسمية (ضوضاء لابلاس مُعايَرة) مع كبت k-anonymity (تُسقَط الخلايا دون الحدّ ولا تُنشَر أبداً) ومحاذاة شبكية (تُحاذى النقاط إلى خلية شبكة بلاطات، لا إحداثيات دقيقة أبداً). تُسجَّل كل عملية إطلاق في سجلّ إنفاق epsilon. محصورة بالمسؤول.

الاستعلامالنوعملاحظات
sourcestringfeedback (بلاغات المستخدمين الحسّاسة) أو signs (نقاط عامة)
epsilonnumberميزانية الخصوصية — أقل = ضوضاء أكثر / خصوصية أعلى (افتراضي 1.0)
minCountnumberحدّ k-anonymity؛ تُكبَت الخلايا ذات النقاط الأقل (افتراضي 5)
zoomnumberدقّة الشبكة 8–16 (افتراضي 13)
bboxstringاختياري west,south,east,north
curl -s "https://navvo.io/api/v1/admin/privacy/density?source=signs&epsilon=1&minCount=5&zoom=13" \
  -H "x-api-key: nvvo_YOUR_KEY"
{
  "provider": "navvo-privacy", "type": "FeatureCollection", "source": "signs",
  "epsilon": 1, "minCount": 5, "gridZoom": 13, "pointsSampled": 412, "cells": 23,
  "features": [
    { "type": "Feature", "geometry": { "type": "Point", "coordinates": [35.925, 31.933] }, "properties": { "count": 19 } }
  ]
}

الأعداد مُضاف إليها ضوضاء، فهي تقريبية بحكم التصميم؛ والخلايا التي لا تراها كُبِتت للخصوصية. هذه هي الطريقة الآمنة لنشر "المناطق المزدحمة" دون كشف موقع أي فرد.

إعادة توجيه الإحالة

curl -s -i "https://navvo.io/api/v1/go?ref=RUMI-ABDALI"

GET /go?ref=CODE هي إعادة توجيه الإحالة / النسب المستخدمة في روابط ctaUrl للإعلانات وروابط الشركاء. تُسجِّل الإحالة مقابل رمز ref وتُصدِر إعادة توجيه HTTP إلى الوجهة، كي يُمكن نسب النقرات و(للإعلانات) فوترتها. عادةً لا تبني هذه الروابط يدوياً — افتح الـ ctaUrl المُعاد من POST /ads/{id}/click.


الأخطاء

الحالةمتى
400التحقّق — مثل bbox غير صحيح، أو غياب q، أو dataset غير معروف، أو جسم أسطول/مهمة غير صالح.
401بيانات اعتماد مفقودة أو غير صالحة — لا مفتاح واجهة برمجية على نقطة محصورة بالمفتاح، أو لا/منتهٍ رمز JWT للمستخدم على نقطة محصورة بالـ JWT (الصلاحيات، الأساطيل).
403مُصادَق لكن غير مسموح — مثل افتقار المفتاح للخطة/النطاق، أو غير المالك يتصرّف على أسطول، أو مستخدم دون ملكية أعمال متحقَّق منها يُنشئ حملة / نصاً بالذكاء الاصطناعي / مدخلاً، أو غير المسؤول يطلب نقطة ترخيص بيانات.
404id إعلان أو id أسطول أو taskId غير معروف.

الملخّص

نقطة النهايةالمصادقةتُعيد
GET /billing/plansمفتاح واجهة برمجية{ provider, currency, plans[] }
GET /me/entitlementsرمز JWT للمستخدم{ provider, entitlements[], plus, subscriptions[] }
GET /ads/promotedمفتاح واجهة برمجية{ provider, type:"promoted_pin", count, ads[] }
GET /ads/sponsored-searchمفتاح واجهة برمجية{ provider, type:"sponsored_search", count, ads[] }
GET /ads/atlas-cardمفتاح واجهة برمجية{ provider, type:"atlas_card", ad }
POST /ads/{id}/clickمفتاح واجهة برمجية{ ok, ctaUrl }
POST /business/claimsرمز JWT للمستخدمالمطالبة المُنشأة (status: "pending")
GET /business/claimsرمز JWT للمستخدم{ total, items[] } — مطالباتك
GET /business/owned-placesرمز JWT للمستخدم (مالك){ total, items[] } — أماكنك المتحقَّق منها
POST /business/campaignsرمز JWT للمستخدم (مالك/مسؤول)الحملة المُنشأة (status: "draft")
GET /business/campaignsرمز JWT للمستخدم (محصورة بالمالك){ total, items[] }
POST /business/ai-copyرمز JWT للمستخدم (مالك/مسؤول){ model, unavailable, purpose, content }
GET /business/markersمفتاح واجهة برمجية{ limit, zoom, category, performance, items[] }
GET /places/{slug}/entrancesمفتاح واجهة برمجيةالمداخل المعتمدة []
POST /places/{slug}/entrancesرمز JWT للمستخدم (مالك/مسؤول)المدخل المُنشأ (يخضع للإشراف قبل النشر)
GET /fleet · POST /fleetرمز JWT للمستخدمأساطيلك / الأسطول المُنشأ
GET·POST /fleet/{id}/driversرمز JWT للمستخدمالسائقون / السائق المُضاف
GET·POST /fleet/{id}/tasksرمز JWT للمستخدمالمهام / المهمة المُنشأة (حقول الدفع عند الاستلام)
POST /fleet/{id}/optimizeرمز JWT للمستخدممسار مُرتَّب بأقرب جار
GET /fleet/me/tasksرمز JWT للمستخدم (سائق)مهام السائق
PATCH /fleet/tasks/{taskId}/statusرمز JWT للمستخدم (سائق)المهمة المُحدَّثة (codCollected?، proofUrl?)
POST /fleet/drivers/{driverId}/pingرمز JWT للمستخدم (سائق)الموقع الحيّ المُسجَّل
GET /admin/data-licensing/datasetsمسؤولمجموعات البيانات القابلة للترخيص
GET /admin/data-licensing/exportمسؤولFeatureCollection من GeoJSON منزوع الهوية
GET /go?ref=CODEمفتاح واجهة برمجيةإعادة توجيه HTTP إلى الوجهة (تُسجِّل الإحالة)
Copyright © 2026