توثيق API
دليل تكامل API vitaRoute
البدء السريع
واجهة API vitaRoute قائمة على REST وتعمل مع JSON. يجب إرسال جميع الطلبات عبر HTTPS.
- أنشئ حساباً مجانياً
- أنشئ مفتاح API من لوحة التحكم
- أرسل أول طلب تحسين لك
المصادقة
تتطلب جميع طلبات API المصادقة عبر ترويسة X-Api-Key.
⚠️ ملاحظة أمنية
لا تضمّن مفاتيح API الخاصة بك في الكود المصدري. استخدم متغيرات البيئة.
نقاط النهاية
/api/optimization/optimizeتحسين مسارات متقدم. تُحسب المسارات الأكثر كفاءة عبر تقييم 20+ معلمة باستخدام خوارزمية vitaRoute الخاصة القائمة على التعلم المعزز.
/api/route/calculateحساب مسارات أساسي. خطة مسار بسيطة قائمة على التجميع.
/api/route/cluster-stopsيجمّع المحطات الحالية وفق سعة المركبة.
مخطط الطلب
| الحقل | النوع | الوصف |
|---|---|---|
facilityLat | float | إحداثية خط عرض المنشأة/المستودع |
facilityLng | float | إحداثية خط طول المنشأة/المستودع |
totalCapacity | int | الحد الأقصى للسعة لكل مركبة (الافتراضي: 14) |
vehicleCount | int | دائماً 0 — يتم تحديد عدد المركبات تلقائياً |
maxWalking | int? | أقصى مسافة مشي (بالأمتار، الافتراضي: 500) |
maxDuration | int? | أقصى مدة للمسار (بالدقائق، الافتراضي: 90) |
maxClusterDiameterKm | float | الحد الأقصى للقطر الجغرافي للمحطات في نفس المجموعة (كم، الافتراضي: 25) |
minSavingsKm | float | الحد الأدنى لتوفير المسافة المطلوب لدمج محطة (كم، الافتراضي: 0.3) |
maxDetourFactor | float | الحد الأقصى لنسبة الانحراف عند إضافة محطة إلى مسار موجود (الافتراضي: 0.6) |
minDistrictPassengers | int | الحد الأدنى للركاب لإنشاء مسار خاص بالمنطقة (الافتراضي: 8) |
tripDirection | string | اتجاه الرحلة: 'to_facility' (إلى المستودع) أو 'from_facility' (من المستودع) |
arrivalTimeAtDepot | string? | وقت وصول المركبات إلى المستودع (ISO 8601 UTC). عند توفيره يُحسب السرعة بناءً على ملف المرور؛ وإلا يُستخدم 28 كم/ساعة ثابتة. |
useDistanceMatrix | boolean | استخدام Google Maps Distance Matrix API للمسافات الدقيقة على الطريق (الافتراضي: false) |
nodes | NodeInput[] | قائمة الموظفين/المواقع المراد تحسينها |
NodeInput
| الحقل | النوع | الوصف |
|---|---|---|
id | string | معرّف فريد للموظف/الموقع |
name | string | اسم الموظف |
latitude | float | إحداثية خط العرض |
longitude | float | إحداثية خط الطول |
district | string? | اسم الحي (اختياري، لقواعد الأحياء) |
مخطط الاستجابة
{
"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 | الطلبات/شهر | أقصى عقد | متزامن |
|---|---|---|---|
| Free | 50 | 1 | |
| Starter | 1,000 | 100 | 5 |
| Growth | 5,000 | 500 | 20 |
| Enterprise | غير محدود | غير محدود | مخصص |
عند تجاوز حد المعدل، تُعاد استجابة 429 Too Many Requests. ترويسة Retry-After تحدد وقت الانتظار.
رموز الأخطاء
Bad Request
JSON غير صالح أو حقل مطلوب مفقود
Unauthorized
مفتاح API مفقود أو غير صالح
Forbidden
تم تجاوز حد خطتك
Too Many Requests
تم تجاوز حد المعدل
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>();