Aiten
Dokümanlar/Entegrasyon API'si

Aiten Entegrasyon API'si — Sefer Yönetimi

Bu referans, ERP, WMS veya kurum içi sistemlerin Aiten üzerinde sefer oluşturması, sefer durumunu izlemesi ve teslimat kanıtlarına erişmesi için sunulan REST API'yi tanımlar.

Taban URL: https://api.aiten.io Veri biçimi: JSON (Content-Type: application/json) Sürümleme: Uç noktalar sürüm öneki taşımaz (/api/...). Geriye dönük uyumluluğu bozan değişiklikler bu sayfada duyurulur ve entegrasyon sahiplerine ayrıca bildirilir.

Sürüm notu — 25 Ağustos 2026: Servis anahtarı ile yapılan POST /api/trips/ isteklerinde company_id alanı zorunlu hale getirilmiştir. Alanın gönderilmediği istekler 400 ile reddedilir. Entegrasyonunuz bu alanı göndermiyorsa güncelleme yapmanız gerekir.

Hızlı Başlangıç

1. Kimlik bilgisi edinin. Entegrasyon için Aiten ekibinden şirketinize tanımlı bir servis anahtarı (X-WA-Service-Key) talep edin.

2. İlk isteğinizi gönderin. Aşağıdaki örnek, iki duraklı bir test seferi oluşturur:

curl -X POST https://api.aiten.io/api/trips/ \
  -H "X-WA-Service-Key: $AITEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": "<şirket-uuid>",
    "driver_phone": "905551234567",
    "driver_first_name": "Test",
    "driver_last_name": "Sürücü",
    "plate": "34 TEST 01",
    "source": "API",
    "yukleme_no": "TEST-0001",
    "stops": [
      { "order": 1, "stop_type": "PICKUP", "location_name": "Test Depo", "expected_document_count": 1 },
      { "order": 2, "stop_type": "DELIVERY", "location_name": "Test Müşteri", "expected_document_count": 1 }
    ]
  }'

3. Yanıtı doğrulayın. 201 Created ile birlikte bir trip_code (örn. DL-260701-001) dönmesi seferin oluşturulduğunu gösterir.

Önemli: Sefer oluşturma isteği, driver_phone alanındaki numaraya gerçek bir WhatsApp bildirimi gönderir. Test çalışmalarında gerçek sürücü numarası kullanmayın.

Sefer durumunu izlemek için GET /api/trips/{trip_code}/ uç noktasını kullanın; durum değişikliklerini anlık almak için webhook bildirimleri tanımlanabilir.


Kimlik Doğrulama

API iki kimlik doğrulama yöntemini destekler. Sunucular arası entegrasyonlar için önerilen yöntem servis anahtarıdır.

Servis anahtarı (önerilen)

Her isteğe aşağıdaki üst bilgi eklenir:

X-WA-Service-Key: <servis-anahtarınız>

Servis anahtarı statiktir; oturum açma veya token yenileme gerektirmez. Anahtar, Aiten ekibi tarafından şirketinize özel olarak tanımlanır.

Güvenlik: Servis anahtarı yalnızca sunucu tarafında saklanmalıdır. Tarayıcı veya mobil uygulama gibi istemci tarafı ortamlarda kullanılması güvenlik ihlali oluşturur; bu durumun tespiti halinde anahtar iptal edilerek yenisi düzenlenir.

JWT (kullanıcı hesabı üzerinden)

Kullanıcı bazlı izlenebilirlik gereken senaryolar için entegrasyona özel bir panel hesabı tanımlanır. Oturum akışı:

# 1. Oturum açın; access ve refresh token alın
curl -X POST https://api.aiten.io/api/token/ \
  -H "Content-Type: application/json" \
  -d '{"email": "entegrasyon@sirketiniz.com", "password": "..."}'
# → { "access": "eyJ...", "refresh": "eyJ..." }

# 2. Sonraki isteklerde access token kullanın
curl https://api.aiten.io/api/trips/ \
  -H "Authorization: Bearer eyJ..."

# 3. Access token süresi dolduğunda (60 dakika) yenileyin
curl -X POST https://api.aiten.io/api/token/refresh/ \
  -H "Content-Type: application/json" \
  -d '{"refresh": "eyJ..."}'

Refresh token 7 gün geçerlidir; süresi dolduğunda /api/token/ ile yeniden oturum açılması gerekir.

Yöntem seçimi

Senaryo Önerilen yöntem
Sunucular arası entegrasyon (ERP, WMS, zamanlanmış görevler) Servis anahtarı
Kullanıcı adına işlem; işlem sahibinin izlenmesi gereken akışlar JWT

Güvenlik garantileri

  • Kimlik doğrulama karşılaştırmaları zamanlama saldırılarına dayanıklı (timing-safe) yöntemlerle yapılır. Tanımsız veya boş anahtar hiçbir isteği doğrulamaz.
  • Kiracı (tenant) izolasyonu sunucu tarafında uygulanır. Bir hesap, yalnızca kendi şirketine ait sefer, sürücü ve mesaj kayıtlarına erişebilir; başka bir kiracıya ait kaynağa yapılan istekler, kaynağın varlığını açığa çıkarmamak için 404 ile yanıtlanır.
  • Belge anahtarı (s3_key) alanları sunucu tarafında biçim doğrulamasından geçirilir; izin verilen önek dışındaki değerler reddedilir.
  • Tüm trafik HTTPS üzerinden taşınır ve HSTS ile korunur.

Hız limitleri

Uç nokta Limit
POST /api/token/ IP başına 10 istek/dakika
POST /api/token/refresh/ IP başına 60 istek/dakika
POST /api/register/, POST /api/contact-requests/ IP başına 10 istek/saat
Servis anahtarlı entegrasyon uç noktaları Tanımlı limit yok

Limit aşımında 429 durum kodu ve Retry-After üst bilgisi döner. Servis anahtarlı uç noktalarda tanımlı limit bulunmamakla birlikte, toplu gönderimlerde saniyede birkaç istek düzeyinde ilerlenmesi önerilir.


Sefer Oluşturma

POST /api/trips/
Content-Type: application/json

İstek gövdesi

{
  "company_id": "<şirket-uuid>",
  "driver_phone": "905551234567",
  "driver_first_name": "Ahmet",
  "driver_last_name": "Yılmaz",
  "plate": "34 ABC 123",
  "trailer_plate": "34 XYZ 456",
  "notes": "",
  "yukleme_no": "ERP-2026-0001",
  "source": "API",
  "stops": [
    {
      "order": 1,
      "stop_type": "PICKUP",
      "location_name": "Fabrika - Adana",
      "location_code": "",
      "location_address": "...",
      "location_latitude": null,
      "location_longitude": null,
      "contact_name": "",
      "contact_phone": "",
      "expected_document_count": 1,
      "waybill_numbers": [],
      "planned_arrival": null,
      "notes": ""
    }
  ]
}

Alan referansı — sefer düzeyi

Alan Tip Zorunlu Varsayılan Açıklama
company_id UUID Servis anahtarıyla zorunlu — Seferin açılacağı şirket. Servis anahtarı ile yapılan isteklerde zorunludur; eksikse 400 döner. Panel oturumu ile yapılan isteklerde alan dikkate alınmaz; sefer her zaman oturumun bağlı olduğu şirkete açılır.
driver_phone string (≤20) ✓ — Sürücünün telefon numarası; platformda sürücü kimliği olarak kullanılır. Kayıtlı olmayan numara için sürücü kaydı otomatik oluşturulur.
driver_first_name string (≤150) — "" Sürücü kaydı ilk kez oluşturuluyorsa veya ad güncelleniyorsa kullanılır.
driver_last_name string (≤150) — "" Sürücü soyadı.
plate string (≤20) ✓ — Çekici plakası.
trailer_plate string (≤20) — "" Dorse plakası.
notes string — "" Sefere ilişkin serbest not.
yukleme_no string (≤100) — "" Kaynak sisteminizdeki sipariş veya yükleme numarası. Dolu gönderildiğinde mükerrer sefer denetimi devreye girer; bkz. Yeniden Gönderim Güvenliği.
source enum — "MANUAL" MANUAL, EXCEL veya API. Dış entegrasyonların "API" göndermesi beklenir; panel raporlarında seferler kaynağa göre ayrıştırılır.
stops array ✓ (en az 1) — Durak listesi. order değerleri sefer içinde benzersiz olmalıdır.

Alan referansı — durak düzeyi

Alan Tip Zorunlu Açıklama
order int ✓ Durak sırası; 1'den başlar ve sefer içinde benzersizdir.
stop_type enum ✓ PICKUP (yükleme), DELIVERY (teslimat) veya BOTH (aynı durakta yükleme ve teslimat).
location_name string ✓ Durak adı; panelde ve sürücüye gönderilen mesajlarda görüntülenir.
location_code string — Kaynak sisteminizdeki konum kodu. Aiten tarafından işlenmez; veri eşleştirme kolaylığı için saklanır ve yanıtlarda aynen döner.
location_address string — Açık adres; sürücüye WhatsApp üzerinden iletilir.
location_latitude, location_longitude float — Koordinat bilgisi; harita görünümünde ve mesafe hesaplarında kullanılır.
contact_name, contact_phone string — Durak yetkilisinin iletişim bilgisi.
expected_document_count int — Durakta beklenen irsaliye sayısı (varsayılan 1). Beklenen sayıya ulaşılmadan durak tamamlanamaz.
waybill_numbers array[string] — Önceden biliniyorsa irsaliye numaraları. Bilgi amaçlıdır; doğrulama sürücünün yüklediği belge üzerinden yapılır.
planned_arrival datetime (ISO 8601) — Planlanan varış zamanı; hatırlatma ve gecikme hesaplarında referans alınır.
notes string — Durağa özel not; sürücüye iletilir.

Sunucu tarafı işleyiş

Sefer oluşturma isteği sunucuda aşağıdaki sırayla işlenir:

  1. Şirket belirlenir. Panel oturumunda sefer, oturumun şirketine açılır. Servis anahtarında company_id alanı esas alınır; alan eksikse istek 400 ile reddedilir.
  2. Sürücü kaydı çözümlenir. driver_phone ile eşleşen sürücü bulunur; kayıt yoksa otomatik oluşturulur. Sürücü için ayrı bir ön kayıt adımı gerekmez.
  3. Bakiye denetimi uygulanır. Faturalandırması etkin şirketlerde, sürücünün ödenmemiş bakiyesi bulunması halinde istek 402 ile reddedilir ve sefer açılmaz.
  4. Mükerrer denetimi yapılır. yukleme_no dolu ise, aynı numara ile aktif veya son 3 gün içinde açılmış (iptal edilmişler hariç) bir sefer varsa istek 409 ile reddedilir.
  5. Aktif sefer kontrolü yapılır. Sürücünün devam eden başka bir seferi varsa istek engellenmez; yanıta bilgilendirme amaçlı bir warning alanı eklenir. Sürücünün başlatılmamış durumda bekleyen eski seferleri otomatik olarak iptal edilir.
  6. Sefer oluşturulur. DL-YYMMDD-XXX biçiminde bir trip_code üretilir, duraklar kaydedilir ve sürücüye WhatsApp bildirimi gönderilir. Bildirim gönderiminde oluşabilecek bir hata sefer kaydını etkilemez.

Başarılı yanıt — 201 Created

{
  "id": "8f3e2c10-4a9b-4e77-9c1a-2b6d5e8f0a11",
  "trip_code": "DL-260701-001",
  "share_token": "b7a1c9e0-...",
  "status": "CREATED",
  "last_action": null,
  "notes": "",
  "yukleme_no": "ERP-2026-0001",
  "created_via": "API",
  "company": { "id": "...", "name": "Örnek Üretici A.Ş." },
  "company_name": "Örnek Üretici A.Ş.",
  "driver": { "id": "...", "phone": "905551234567", "name": "Ahmet Yılmaz" },
  "driver_name": "Ahmet Yılmaz",
  "driver_phone": "905551234567",
  "plate": "34 ABC 123",
  "trailer_plate": "34 XYZ 456",
  "current_latitude": null,
  "current_longitude": null,
  "last_location_update": null,
  "last_eta_update": null,
  "created_at": "2026-07-01T09:15:32Z",
  "completed_at": null,
  "issues": [],
  "open_issue_count": 0,
  "stops": [
    {
      "id": "b1a2c3d4-...",
      "order": 1,
      "stop_type": "PICKUP",
      "location_name": "Fabrika - Adana",
      "status": "PENDING",
      "expected_document_count": 1,
      "waybill_numbers": [],
      "planned_arrival": null,
      "actual_arrival": null,
      "actual_departure": null,
      "documents": []
    },
    {
      "id": "c2b3d4e5-...",
      "order": 2,
      "stop_type": "DELIVERY",
      "location_name": "Depo - Ankara",
      "status": "PENDING",
      "expected_document_count": 1,
      "waybill_numbers": [],
      "planned_arrival": null,
      "actual_arrival": null,
      "actual_departure": null,
      "documents": []
    }
  ]
}

Sürücünün devam eden başka bir seferi varsa yanıta ek olarak şu alan döner:

{ "warning": "Bu sürücünün aktif seferi var: DL-260630-004" }

Hata yanıtları

Kod Koşul Örnek gövde
400 Gövde doğrulanamadı; servis anahtarıyla company_id gönderilmedi; s3_key biçimi geçersiz { "driver_phone": ["This field is required."] }
401 Kimlik bilgisi eksik veya geçersiz —
402 Sürücünün ödenmemiş bakiyesi mevcut (yalnızca faturalandırması etkin şirketlerde) { "error": "wallet_debt", "message": "...", "debt_amount": "50.00", "driver_phone": "905551234567" }
403 Kimlik doğrulandı ancak kaynak üzerinde yetki yok —
404 Kayıt bulunamadı veya erişim kapsamı dışında (company_id hatalı ya da şirket pasif dahil) { "error": "Şirket bulunamadı." }
409 Aynı yukleme_no ile mükerrer sefer { "error": "duplicate_yukleme_no", "message": "...", "existing_trip_code": "DL-260701-001", "yukleme_no": "ERP-2026-0001" }
429 Hız limiti aşıldı —

Not: Çok yüksek eşzamanlı istek hacminde sefer kodu üretiminde nadiren çakışma yaşanabilir ve istek 500 ile sonuçlanabilir. Bu durumda isteğin kısa bir bekleme sonrasında yinelenmesi yeterlidir; bkz. Hata Yönetimi.


Diğer Uç Noktalar

Aşağıdaki uç noktalar aynı taban URL ve kimlik doğrulama yöntemlerini kullanır. Tüm sonuçlar istek sahibinin şirket kapsamı ile sınırlıdır.

Sefer listeleme: GET /api/trips/

Parametre Açıklama
status CREATED, DRIVER_NOTIFIED, IN_PROGRESS, ALL_STOPS_DONE, COMPLETED, FAILED, CANCELLED
search Sefer kodu, plaka, sürücü adı veya telefonunda arama
source MANUAL, EXCEL veya API
waybill Belirtilen irsaliye numarası veya ETTN değerini içeren seferler
date_from, date_to YYYY-MM-DD; oluşturulma tarihine göre aralık
loading_point Yükleme noktası adına göre filtre
page Sayfa numarası; sayfa başına 20 kayıt
curl "https://api.aiten.io/api/trips/?status=IN_PROGRESS&page=1" \
  -H "X-WA-Service-Key: $AITEN_API_KEY"
{
  "count": 47,
  "next": "https://api.aiten.io/api/trips/?page=2",
  "previous": null,
  "results": [ { "trip_code": "DL-260701-001", "...": "..." } ],
  "stats": { "active": 12, "completed": 340, "total": 352 }
}

stats alanı, uygulanan filtrelerden bağımsız olarak şirket genelindeki toplamları içerir.

Sefer detayı: GET /api/trips/{trip_code}/

Tek seferin, durak ve belge listesi dahil tam gösterimini döndürür (yapı, sefer oluşturma yanıtı ile aynıdır). Sefer bulunamadığında veya erişim kapsamı dışında olduğunda 404 döner:

{ "error": "Sefer bulunamadı." }

Sefer güncelleme: PATCH /api/trips/{trip_code}/

Yalnızca gönderilen alanlar güncellenir: driver_phone, driver_first_name, driver_last_name, plate, trailer_plate, notes. Sürücü değişikliği için üç sürücü alanının birlikte gönderilmesi gerekir.

curl -X PATCH https://api.aiten.io/api/trips/DL-260701-001/ \
  -H "X-WA-Service-Key: $AITEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"notes": "Müşteri saat 14:00 sonrası teslim istiyor"}'

Sefer durakları: GET /api/trips/{trip_code}/stops/

Sefere ait durakların belge bilgileri dahil listesini, doğrudan bir dizi olarak döndürür.

Sefer tamamlama: POST /api/trips/{trip_code}/complete/

İstek gövdesi almaz. Sefer COMPLETED durumuna alınır ve completed_at alanı işlenir. Yanıt: 200 ve güncel sefer gösterimi.

Sefer iptali: POST /api/trips/{trip_code}/cancel/

İstek gövdesi almaz. Sefer CANCELLED durumuna alınır; bekleyen duraklar SKIPPED olarak işaretlenir. Tamamlanmış veya iptal edilmiş bir sefer için 400 döner.

Konum güncelleme: POST /api/trips/{trip_code}/location/

{ "latitude": 39.9208, "longitude": 32.8541 }

Yanıt: {"status": "ok", "last_location_update": "2026-07-01T10:22:00Z"}. Konum verisi normal akışta platform tarafından toplanır; kendi araç takip sisteminiz varsa bu uç nokta üzerinden de iletebilirsiniz.

Sorun bildirimi: POST /api/trips/{trip_code}/issue/

{ "issue_type": "DAMAGE", "description": "Palet hasarlı teslim alındı", "stop_id": "b1a2c3d4-..." }

Yanıt: 201 ve oluşturulan sorun kaydı.

Teslimat kanıtı: GET /api/trips/{trip_code}/proof/

Sefer tamamlandıktan sonra, doğrulanmış irsaliye görsellerini ve karşılaştırma sonuçlarını (POD) döndürür. Mutabakat ve arşivleme entegrasyonları için kullanılır.

Durak belgeleri: GET /api/stops/{stop_id}/documents/

Bir durağa ait irsaliye belgelerini listeler. Sefer detayı yanıtındaki documents alanı aynı veriyi içerdiğinden, bu uç noktaya çoğu senaryoda ayrıca ihtiyaç duyulmaz.

Belge kaydı ve s3_key kuralı

POST /api/stops/{stop_id}/documents/ isteklerindeki s3_key alanı en fazla 512 karakter olabilir ve documents/ öneki ile başlamak zorundadır; .., baştaki /, :// ve \\ içeren değerler 400 ile reddedilir. Bu anahtarlar normal akışta platformun belge yükleme servisi tarafından üretilir; entegrasyonların elle anahtar üretmesi önerilmez.


Dışa Olaylar (Webhook)

Şirketinize bir webhook adresi tanımlandığında, seferin önemli durum geçişleri gerçek zamanlı olarak bu adrese POST edilir. Webhook tanımlamayan entegrasyonlar aynı olayları GET /api/trips/{trip_code}/events/ uç noktasından sorgulayabilir. Webhook adresi ve imza anahtarı tanımı için Aiten ekibiyle iletişime geçin.

Olay tipleri

Olay Ne zaman
trip.started Sürücü sefere başladı
stop.arrived Sürücü durağa vardı
stop.completed Durak tamamlandı (kabul edilen belge sayısıyla)
document.accepted İrsaliye kabul edildi (irsaliye no, ETTN, imza/kaşe durumu)
trip.eta_updated Varış tahmini güncellendi
trip.delayed Tahmin, planlanan varışı 30 dakikadan fazla aştı
trip.issue Sorun bildirildi (hasar, adres, bekleme, red)
trip.flagged Operatör müdahalesi gerektiren durum işaretlendi
trip.completed Sefer tamamlandı (özet)

Gövde ve imza

{
  "event": "stop.arrived",
  "trip_code": "DL-260701-001",
  "occurred_at": "2026-07-01T14:30:00+00:00",
  "data": { "stop_id": "...", "order": 2, "location": "Depo - Ankara" }
}

Her istekte X-Aiten-Event üst bilgisi olay tipini taşır. İmza anahtarı tanımlıysa X-Aiten-Signature üst bilgisi, ham istek gövdesinin HMAC-SHA256 özetini (hex) içerir; doğrulama sunucu tarafında zorunlu tutulmalıdır. Teslimat 2xx dışı yanıtta artan aralıklarla üç kez yinelenir; üçüncü denemeden sonra olay failed işaretlenir ve olay geçmişinden okunabilir.

Olay geçmişi: GET /api/trips/{trip_code}/events/

Sefere ait olayları kronolojik döndürür (en fazla 500). Her satırda event, occurred_at, data ve webhook teslim durumu (delivery_status: boş = webhook tanımsız, sent, pending, failed) bulunur.


Hata Yönetimi

4xx yanıtları istekte düzeltilmesi gereken bir durumu, 5xx yanıtları sunucu tarafında geçici bir sorunu ifade eder. 5xx durumunda istek, üstel geri çekilme (exponential backoff) ile yinelenebilir; yineleme öncesinde aşağıdaki idempotency bölümü dikkate alınmalıdır.

Kod Anlamı Önerilen aksiyon
400 Eksik veya hatalı alan Yanıt gövdesindeki alan bazlı hata mesajlarına göre isteği düzeltin.
401 Kimlik doğrulanamadı Servis anahtarını kontrol edin; JWT kullanıyorsanız token'ı yenileyin, gerekirse yeniden oturum açın.
402 Sürücünün ödenmemiş bakiyesi Yineleme sonuç vermez; bakiye kapatılana kadar sefer açılamaz.
403 Yetki yok Kimlik bilgilerinin doğru şirkete tanımlı olduğunu doğrulayın.
404 Kayıt bulunamadı Tanımlayıcıyı (trip_code, id) kontrol edin; yineleme sonuç vermez.
409 Mükerrer kayıt Yanıttaki existing_trip_code değerini kullanın; isteği yinelemeyin.
429 Hız limiti aşıldı Retry-After üst bilgisinde belirtilen süre kadar bekleyin.
5xx Sunucu tarafı sorun Üstel geri çekilme ile sınırlı sayıda yineleyin; sorun sürerse destek ekibine bildirin.

Yeniden Gönderim Güvenliği (Idempotency)

API ayrı bir idempotency anahtarı mekanizması sunmaz; yeniden gönderim güvenliği yukleme_no alanı üzerinden sağlanır:

  1. Her siparişe, kaynak sisteminizde benzersiz bir yukleme_no atayın ve her sefer oluşturma isteğinde gönderin.
  2. 409 duplicate_yukleme_no yanıtını hata olarak değil, işlemin daha önce tamamlandığının teyidi olarak değerlendirin; yanıttaki existing_trip_code mevcut seferi gösterir.
  3. yukleme_no gönderilmeyen isteklerde mükerrer denetimi çalışmaz. Ağ zaman aşımı sonrasında yapılan bir yineleme, aynı seferin iki kez oluşturulmasına yol açabilir. Bu nedenle dış entegrasyonlarda yukleme_no kullanımı güçlü şekilde önerilir.

Sık Sorulan Sorular

API'ye internet üzerinden erişilebiliyor mu? Evet. api.aiten.io genel internete açıktır. Kimlik doğrulaması gerektiren tüm uç noktalar, geçerli kimlik bilgisi bulunmayan isteklere 401 döndürür.

Test veya sandbox ortamı sunuluyor mu? Ayrı bir test ortamı bulunmamaktadır; tek ortam api.aiten.io'dur. Test çalışmalarında gerçek olmayan bir telefon numarası ve test amaçlı bir şirket hesabı kullanılması önerilir.

Sefer durumu değiştiğinde otomatik bildirim (webhook) gönderiliyor mu? Evet. Şirketinize bir webhook adresi tanımlandığında durum geçişleri (trip.started, stop.arrived, document.accepted vb.) HMAC imzalı olarak adresinize iletilir; bkz. Dışa Olaylar. Webhook tanımlamayan entegrasyonlar aynı olayları GET /api/trips/{trip_code}/events/ üzerinden sorgulayabilir.

Sefer oluşturulduğunda sürücü nasıl bilgilendiriliyor? Sefer başarıyla oluşturulduğunda sürücüye, sefer özetini ve durak bilgilerini içeren bir WhatsApp bildirimi gönderilir. Sürücü tarafında uygulama kurulumu gerekmez; irsaliye fotoğrafları da WhatsApp üzerinden iletilir.

Aynı sipariş ikinci kez gönderilirse ne olur? yukleme_no gönderilmişse ikinci istek 409 ile reddedilir ve yanıt mevcut sefer kodunu içerir. yukleme_no gönderilmemişse mükerrer denetimi uygulanmaz ve iki ayrı sefer oluşur.

Entegrasyon sürecinde destek alınabiliyor mu? Evet. Entegrasyon süresince teknik sorularınız için merhaba@aiten.io adresinden Aiten ekibine ulaşabilirsiniz.