توثيق API

دليل تكامل API vitaRoute

البدء السريع

واجهة API vitaRoute قائمة على REST وتعمل مع JSON. يجب إرسال جميع الطلبات عبر HTTPS.

Base URL: https://api.vitaroute.ai
  1. أنشئ حساباً مجانياً
  2. أنشئ مفتاح API من لوحة التحكم
  3. أرسل أول طلب تحسين لك

المصادقة

تتطلب جميع طلبات API المصادقة عبر ترويسة X-Api-Key.

X-Api-Key: vtr_live_xxxxxxxxxxxxxxxxxxxx

⚠️ ملاحظة أمنية

لا تضمّن مفاتيح API الخاصة بك في الكود المصدري. استخدم متغيرات البيئة.

نقاط النهاية

POST/api/optimization/optimize

تحسين مسارات متقدم. تُحسب المسارات الأكثر كفاءة عبر تقييم 20+ معلمة باستخدام خوارزمية vitaRoute الخاصة القائمة على التعلم المعزز.

POST/api/route/calculate

حساب مسارات أساسي. خطة مسار بسيطة قائمة على التجميع.

POST/api/route/cluster-stops

يجمّع المحطات الحالية وفق سعة المركبة.

مخطط الطلب

الحقلالنوعالوصف
facilityLatfloatإحداثية خط عرض المنشأة/المستودع
facilityLngfloatإحداثية خط طول المنشأة/المستودع
totalCapacityintالحد الأقصى للسعة لكل مركبة (الافتراضي: 14)
vehicleCountintدائماً 0 — يتم تحديد عدد المركبات تلقائياً
maxWalkingint?أقصى مسافة مشي (بالأمتار، الافتراضي: 500)
maxDurationint?أقصى مدة للمسار (بالدقائق، الافتراضي: 90)
maxClusterDiameterKmfloatالحد الأقصى للقطر الجغرافي للمحطات في نفس المجموعة (كم، الافتراضي: 25)
minSavingsKmfloatالحد الأدنى لتوفير المسافة المطلوب لدمج محطة (كم، الافتراضي: 0.3)
maxDetourFactorfloatالحد الأقصى لنسبة الانحراف عند إضافة محطة إلى مسار موجود (الافتراضي: 0.6)
minDistrictPassengersintالحد الأدنى للركاب لإنشاء مسار خاص بالمنطقة (الافتراضي: 8)
tripDirectionstringاتجاه الرحلة: 'to_facility' (إلى المستودع) أو 'from_facility' (من المستودع)
arrivalTimeAtDepotstring?وقت وصول المركبات إلى المستودع (ISO 8601 UTC). عند توفيره يُحسب السرعة بناءً على ملف المرور؛ وإلا يُستخدم 28 كم/ساعة ثابتة.
useDistanceMatrixbooleanاستخدام Google Maps Distance Matrix API للمسافات الدقيقة على الطريق (الافتراضي: false)
nodesNodeInput[]قائمة الموظفين/المواقع المراد تحسينها

NodeInput

الحقلالنوعالوصف
idstringمعرّف فريد للموظف/الموقع
namestringاسم الموظف
latitudefloatإحداثية خط العرض
longitudefloatإحداثية خط الطول
districtstring?اسم الحي (اختياري، لقواعد الأحياء)

مخطط الاستجابة

{
  "routes": [
    {
      "routeId": "uuid",
      "routeName": "GEBZE 1",
      "totalDuration": 45,
      "totalDistance": 28500,
      "nodeCount": 14,
      "totalLoad": 14,
      "stops": [
        {
          "stopIndex": 0,
          "latitude": 40.8962,
          "longitude": 29.1882,
          "nodes": [
            { "id": "1", "name": "Ali Yilmaz" }
          ]
        }
      ],
      "routeCenter": {
        "latitude": 40.9,
        "longitude": 29.2
      }
    }
  ]
}

حدود الطلبات

Planالطلبات/شهرأقصى عقدمتزامن
Free50 1
Starter1,0001005
Growth5,00050020
Enterpriseغير محدودغير محدودمخصص

عند تجاوز حد المعدل، تُعاد استجابة 429 Too Many Requests. ترويسة Retry-After تحدد وقت الانتظار.

رموز الأخطاء

400

Bad Request

JSON غير صالح أو حقل مطلوب مفقود

401

Unauthorized

مفتاح API مفقود أو غير صالح

403

Forbidden

تم تجاوز حد خطتك

429

Too Many Requests

تم تجاوز حد المعدل

500

Internal Server Error

خطأ في الخادم، يرجى التواصل مع الدعم

أمثلة على الكود

curl

curl -X POST https://api.vitaroute.ai/api/optimization/optimize \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: vtr_live_your_key_here" \
  -d '{
    "facilityLat": 40.9139,
    "facilityLng": 29.1167,
    "totalCapacity": 16,
    "vehicleCount": 0,
    "maxWalking": 500,
    "maxDuration": 90,
    "maxClusterDiameterKm": 25,
    "minSavingsKm": 0.3,
    "maxDetourFactor": 0.6,
    "minDistrictPassengers": 8,
    "tripDirection": "to_facility",
    "arrivalTimeAtDepot": "2025-01-15T05:00:00Z",
    "useDistanceMatrix": false,
    "nodes": [
      { "id": "1", "name": "Ali Yilmaz", "latitude": 40.8962, "longitude": 29.1882, "district": "Kadikoy" },
      { "id": "2", "name": "Ayse Demir", "latitude": 40.9278, "longitude": 29.3125, "district": "Gebze" }
    ]
  }'

python

import requests

response = requests.post(
    "https://api.vitaroute.ai/api/optimization/optimize",
    headers={
        "Content-Type": "application/json",
        "X-Api-Key": "vtr_live_your_key_here"
    },
    json={
        "facilityLat": 40.9139,
        "facilityLng": 29.1167,
        "totalCapacity": 16,
        "vehicleCount": 0,
        "maxWalking": 500,
        "maxDuration": 90,
        "maxClusterDiameterKm": 25,
        "minSavingsKm": 0.3,
        "maxDetourFactor": 0.6,
        "minDistrictPassengers": 8,
        "tripDirection": "to_facility",
        "arrivalTimeAtDepot": "2025-01-15T05:00:00Z",
        "useDistanceMatrix": False,
        "nodes": [
            {"id": "1", "name": "Ali Yilmaz", "latitude": 40.8962, "longitude": 29.1882}
        ]
    }
)

data = response.json()
for route in data["routes"]:
    print(f"{route['routeName']}: {route['nodeCount']} stops, {route['totalDuration']} min")

javascript

const response = await fetch(
  "https://api.vitaroute.ai/api/optimization/optimize",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Api-Key": "vtr_live_your_key_here",
    },
    body: JSON.stringify({
      facilityLat: 40.9139,
      facilityLng: 29.1167,
      totalCapacity: 16,
      vehicleCount: 0,
      maxWalking: 500,
      maxDuration: 90,
      maxClusterDiameterKm: 25,
      minSavingsKm: 0.3,
      maxDetourFactor: 0.6,
      minDistrictPassengers: 8,
      tripDirection: "to_facility",
      arrivalTimeAtDepot: "2025-01-15T05:00:00Z",
      useDistanceMatrix: false,
      nodes: [
        { id: "1", name: "Ali Yilmaz", latitude: 40.8962, longitude: 29.1882 },
      ],
    }),
  }
);

const { routes } = await response.json();
routes.forEach(route => {
  console.log(`${route.routeName}: ${route.nodeCount} stops`);
});

C#

using System.Net.Http.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Api-Key", "vtr_live_your_key_here");

var payload = new {
    facilityLat = 40.9139,
    facilityLng = 29.1167,
    totalCapacity = 16,
    vehicleCount = 0,
    maxWalking = 500,
    maxDuration = 90,
    maxClusterDiameterKm = 25,
    minSavingsKm = 0.3,
    maxDetourFactor = 0.6,
    minDistrictPassengers = 8,
    tripDirection = "to_facility",
    arrivalTimeAtDepot = "2025-01-15T05:00:00Z",
    useDistanceMatrix = false,
    nodes = new[] {
        new { id = "1", name = "Ali Yilmaz", latitude = 40.8962, longitude = 29.1882 }
    }
};

var response = await client.PostAsJsonAsync(
    "https://api.vitaroute.ai/api/optimization/optimize",
    payload
);

var result = await response.Content.ReadFromJsonAsync<RouteResponse>();