API Dokümantasyonu

vitaRoute API entegrasyon rehberi

Hızlı Başlangıç

vitaRoute API'si REST tabanlıdır ve JSON ile çalışır. Tüm istekler HTTPS üzerinden gönderilmelidir.

Base URL: https://api.vitaroute.ai
  1. Ücretsiz hesap oluşturun
  2. Dashboard'dan API key oluşturun
  3. İlk optimizasyon isteğinizi gönderin

Kimlik Doğrulama

Tüm API istekleri X-Api-Key header'ı ile kimlik doğrulaması gerektirir.

X-Api-Key: vtr_live_xxxxxxxxxxxxxxxxxxxx

⚠️ Güvenlik Notu

API key'lerinizi kaynak kodunuza dahil etmeyin. Ortam değişkenleri kullanın.

Endpoint'ler

POST/api/optimization/optimize

Gelişmiş rota optimizasyonu. RL destekli tescilli vitaRoute algoritması ile 20+ parametre değerlendirilerek en verimli rotalar hesaplanır.

POST/api/route/calculate

Temel rota hesaplama. Kümeleme tabanlı basit rota planı.

POST/api/route/cluster-stops

Mevcut duraksları araç kapasitesine göre kümelere ayırır.

İstek Şeması

AlanTipAçıklama
facilityLatfloatTesis/depo enlem koordinatı
facilityLngfloatTesis/depo boylam koordinatı
totalCapacityintAraç başına maksimum kapasite (varsayılan: 14)
vehicleCountintHer zaman 0 — araç sayısı otomatik belirlenir
maxWalkingint?Maksimum yürüme mesafesi (metre, varsayılan: 500)
maxDurationint?Maksimum rota süresi (dakika, varsayılan: 90)
maxClusterDiameterKmfloatAynı kümedeki durakların maksimum coğrafi çapı (km, varsayılan: 25)
minSavingsKmfloatBir durak birleştirme için minimum mesafe kazancı (km, varsayılan: 0.3)
maxDetourFactorfloatMevcut rotaya eklenen durağın maksimum sapma oranı (varsayılan: 0.6)
minDistrictPassengersintİlçeye özel rota oluşturmak için minimum yolcu sayısı (varsayılan: 8)
tripDirectionstringYolculuk yönü: 'to_facility' (tesise gidiş) veya 'from_facility' (tesisten dönüş)
arrivalTimeAtDepotstring?Araçların tesise varış saati (ISO 8601 UTC). Verilirse trafik profiline göre hız hesaplanır; verilmezse sabit 28 km/sa kullanılır.
useDistanceMatrixbooleanGoogle Maps Distance Matrix API kullanılsın mı? (varsayılan: false)
nodesNodeInput[]Optimize edilecek personel/konum listesi

NodeInput

AlanTipAçıklama
idstringBenzersiz personel/lokasyon kimliği
namestringPersonel adı
latitudefloatEnlem koordinatı
longitudefloatBoylam koordinatı
districtstring?İlçe adı (isteğe bağlı, district kuralları için)

Yanıt Şeması

{
  "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
      }
    }
  ]
}

İstek Limitleri

PlanAylık İstekMaks. NodeEş Zamanlı
Free5011
Starter1,0001005
Growth5,00050020
EnterpriseSınırsızSınırsızÖzel

Rate limit aşıldığında 429 Too Many Requests yanıtı döner. Retry-After header'ı bekleme süresini belirtir.

Hata Kodları

400

Bad Request

Geçersiz JSON veya eksik zorunlu alan

401

Unauthorized

API key eksik veya geçersiz

403

Forbidden

Plan limitiniz aşıldı

429

Too Many Requests

Rate limit aşıldı

500

Internal Server Error

Sunucu hatası, destek ekibine bildirin

Kod Örnekleri

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>();

Entegrasyon API'si (ERP Entegrasyonu)

Kendi arayüzünüzden (ör. bir ERP sisteminden) vitaRoute'u uçtan uca yönetmek için tasarlanmış bir API. Proje, vardiya ve yolcu kayıtlarını oluşturup güncelleyebilir, kesinleşmiş güzergah planlarını okuyabilir ve düzenlediğiniz planı geri yazabilirsiniz — extranet arayüzüne hiç girmeden.

Base URL: https://api.vitaroute.ai/api/integration

Aynı kimlik doğrulama (X-Api-Key) kullanılır; tüm uçlar https://api.vitaroute.ai/api/integration altında yer alır.

Tüm PUT (güncelleme) istekleri KISMİDİR — yalnızca gövdede gönderdiğiniz alanlar değişir, atladığınız alanlar mevcut değerini korur.

Plan güncellemesinde yol geometrisi (savedPolyline) ve mesafe/süre bilgisi (savedStats) GÖNDERİLMEZ — vitaRoute, verdiğiniz durak sırasından Google Directions ile bunları kendisi hesaplar. Böylece harita her zaman geçerli, gerçek bir yol gösterir.

Projeler

Proje oluşturma, listeleme, güncelleme ve silme. Bir ERP, kendi müşteri kaydına karşılık gelen vitaRoute projesinin kimliğini (id) burada saklamalıdır.

GET/api/integration/projects

API anahtarının sahip olduğu tüm projeleri listeler.

POST/api/integration/projects

Yeni bir proje oluşturur (tesis konumu, optimizasyon modeli, sefer bilgileri).

PUT/api/integration/projects/{projectId}

Bir projeyi kısmen günceller — yalnızca gönderilen alanlar değişir.

DELETE/api/integration/projects/{projectId}

Bir projeyi ve ona bağlı tüm veriyi (yolcu, vardiya, koşu, plan) kalıcı olarak siler. Geri alınamaz.

AlanTipAçıklama
namestringProje adı
facilityLatfloatTesis enlem koordinatı
facilityLngfloatTesis boylam koordinatı
descriptionstring?Açıklama (opsiyonel)
countryCodestring?Ülke kodu, örn. "TR" (opsiyonel)
iconstring?Tesis ikonu anahtarı (opsiyonel)
optimizationModelstring"personnel" (personel taşımacılığı) | "school" (okul servisi)
passengerModestring"fixed" (sabit sefer) | "shift" (vardiyalı) — yalnızca personnel modelinde anlamlı
tripsTrip[]Sefer listesi (saat+yön). Sabit modelde en az bir sefer zorunlu; vardiyalı modelde yok sayılır.

Vardiyalar

Vardiyalı projelerde tesise giriş/çıkış saatlerini tanımlayan vardiya kayıtlarının tam CRUD'u.

GET/api/integration/shifts?projectId=

Bir projenin tüm vardiyalarını listeler.

POST/api/integration/shifts

Yeni bir vardiya ekler (giriş/çıkış saatlerinden en az biri zorunludur).

PUT/api/integration/shifts/{shiftId}

Bir vardiyayı kısmen günceller.

DELETE/api/integration/shifts/{shiftId}

Bir vardiyayı siler.

AlanTipAçıklama
projectIdstringVardiyanın ekleneceği proje kimliği
namestringVardiya adı, örn. "Sabah"
entryTimestring?Tesise giriş saati, "HH:mm" (opsiyonel)
exitTimestring?Tesisten çıkış saati, "HH:mm" (opsiyonel)
nextDayExitbooleantrue = çıkış ertesi gün (yalnızca exitTime verilmişse anlamlı)

Yolcular

Yolcu/öğrenci/personel kayıtlarının tam CRUD'u. employee_no alanı, ERP'nizin kendi sicil/öğrenci numarasıyla hızlı eşleştirme yapabilmeniz için opsiyonel bir doğal anahtardır.

GET/api/integration/passengers?projectId=

Bir projenin tüm yolcularını listeler.

POST/api/integration/passengers

Yeni bir yolcu ekler (ad ve konum zorunludur).

PUT/api/integration/passengers/{nodeId}

Bir yolcuyu kısmen günceller.

DELETE/api/integration/passengers/{nodeId}

Bir yolcuyu siler.

AlanTipAçıklama
projectIdstringYolcunun ekleneceği proje kimliği
namestringYolcu adı
latitudefloatEnlem koordinatı
longitudefloatBoylam koordinatı
employeeNostring?Sicil/öğrenci no — kendi kaydınızla eşleştirme için doğal anahtar (opsiyonel)
departmentstring?Departman (opsiyonel)
genderstring?"male" | "female" (opsiyonel)
specialNeedsbooleanÖzel ihtiyaç durumu (varsayılan: false)
addressstring?Adres metni (opsiyonel)
citystring?Şehir (opsiyonel)
districtstring?İlçe (opsiyonel)

Plan Aktarımı

Kesinleşmiş güzergah planlarını proje/tarih/vardiya/yön filtreleriyle okuma; düzenlediğiniz durak sırası ve yolcu atamasını geri yazma.

GET/api/integration/plan?projectId=&dateFrom=&dateTo=&shiftName=&direction=

Proje, tarih aralığı, vardiya ve yön filtreleriyle geçmişe yönelik kesinleşmiş plan(lar)ı — güzergah, durak, yolcu, mesafe ve süre dahil — tam veriyle döner.

PUT/api/integration/plan/{runId}

Bir koşunun güzergah/durak/yolcu verisini, ERP tarafında yapılan düzenlemeyle baştan yazar. Yol geometrisi vitaRoute tarafından yeniden hesaplanır.

result[] — Route

AlanTipAçıklama
routeNamestring?Güzergah adı, örn. "Hat 1"
colorstring?Haritada gösterim rengi, hex (opsiyonel)
stopsStop[]Duraklar, güzergahtaki SIRAYLA

stops[] — Stop

AlanTipAçıklama
latfloatDurak enlem koordinatı
lngfloatDurak boylam koordinatı
stopNamestring?Durak adı (opsiyonel)
passengersPassenger[]Bu durakta güzergaha dahil olan yolcular

passengers[] — Passenger

AlanTipAçıklama
idstringMevcut yolcu kimliği (GET yanıtındakiyle birebir aynı olmalı) — ZORUNLU
namestring?Yolcu adı (görüntüleme amaçlı)

Entegrasyon API'si Örnekleri

GET /projects

curl https://api.vitaroute.ai/api/integration/projects \
  -H "X-Api-Key: vtr_live_your_key_here"

POST /passengers

curl -X POST https://api.vitaroute.ai/api/integration/passengers \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: vtr_live_your_key_here" \
  -d '{
    "projectId": "b3f1c2a4-...",
    "name": "Ali Yilmaz",
    "latitude": 40.8962,
    "longitude": 29.1882,
    "employeeNo": "EMP-00123"
  }'

GET /plan

curl "https://api.vitaroute.ai/api/integration/plan?projectId=b3f1c2a4-...&shiftName=Sabah&direction=to_facility" \
  -H "X-Api-Key: vtr_live_your_key_here"

PUT /plan/{runId}

curl -X PUT https://api.vitaroute.ai/api/integration/plan/9e7d0f21-... \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: vtr_live_your_key_here" \
  -d '{
    "result": [
      {
        "routeName": "Hat 1",
        "color": "#1E40AF",
        "stops": [
          {
            "lat": 40.8962, "lng": 29.1882, "stopName": "Kadikoy Iskele",
            "passengers": [{ "id": "3f9a...", "name": "Ali Yilmaz" }]
          }
        ]
      }
    ]
  }'
# Not: savedPolyline / savedStats göndermezsiniz — vitaRoute rota
# geometrisini durak sırasından kendisi hesaplar.