Kurye API
İşletmenin bağladığı kurye firması bu API ile kendisine gelen siparişleri okur, kuryesini ve kuryenin konumunu bildirir, siparişi teslim alır ve teslim eder. Kuryelerinizin Söyle Gelir'de kayıtlı olması gerekmez: kurye kendi yazılımınızdadır, siparişe yalnız adı, telefonu ve konumu yazılır.
- Taban adres:
https://soylegelir.com/api/v1/courier - Kimlik: işletmenin verdiği iki anahtar,
X-Api-Key+X-Api-Secret(Kimlik doğrulama). - Hız sınırı: bağlantı başına dakikada 240 istek.
Akış
- Sipariş gelir. İşletme bir teslimat siparişini onayladığı anda sipariş firmanıza geçer ve bildirim adresinize
order.assignedgider. Bildirim adresiniz yoksaGET /ordersile düzenli çekin. - Kuryeyi bildirin.
POST /orders/{number}/courier: müşteri kuryesinin adını, işletme adını ve telefonunu görür. - Teslim alın.
POST /orders/{number}/status{"action": "pick_up"}. Sipariş yola çıkar. - Konum gönderin.
POST /locations(toplu): müşteri kuryeyi haritada izler. - Teslim edin.
{"action": "deliver", "pin": "<teslim kodu>"}. Teslim kodunu müşteri verir; kodsuz teslim yapılamaz. Teslim edilemezse{"action": "fail", "note": "<gerekçe>"}.
Kurye bulamazsanız siparişi teslim almadan önce POST /orders/{number}/release ile işletmeye geri verin; işletme kendi kuryesini atar.
Uçlar
| Yöntem | Yol | Ne yapar |
|---|---|---|
GET |
/store |
Bağlantının işletmesi (alış noktası) |
GET |
/orders |
Firmanıza gelen siparişler |
GET |
/orders/{number} |
Tek sipariş |
POST |
/orders/{number}/courier |
Kurye adı ve telefonu |
POST |
/orders/{number}/status |
Teslim alındı / teslim edildi / teslim edilemedi |
POST |
/orders/{number}/release |
Siparişi işletmeye geri ver |
POST |
/locations |
Kurye konumları (toplu) |
Sipariş nesnesi
{
"number": "SG261114GCCE",
"status": "accepted",
"assigned": true,
"store": {
"id": 1, "name": "Pamukkale Kebap", "phone": "+902580000000",
"address": "Sırakapılar Mah., Saltak Cad. No: 24", "district": "Merkezefendi", "city": "Denizli",
"lat": 37.778556, "lng": 29.082223
},
"dropoff": {
"title": "Ev", "city": "Denizli", "district": "Merkezefendi", "neighborhood": "Sırakapılar",
"street": "Saltak Cad.", "building": "12", "floor": "3", "apartment": "7", "directions": "Yeşil kapı",
"line": "Sırakapılar Mah., Saltak Cad., No: 12, Kat: 3, Daire: 7 — Merkezefendi/Denizli",
"lat": 37.779539, "lng": 29.079447
},
"customer": { "name": "Ayşe Yılmaz", "phone": "+905321234567" },
"note": "Zili çalmayın",
"items": [{ "name": "Karışık Pide", "quantity": 1, "unit": "adet" }],
"payment": { "method": "cash", "collect_on_delivery": true, "amount_to_collect": 25000 },
"delivery_fee": 1500,
"total": 25000,
"courier": { "name": "Ali Demir", "phone": "+905321112233" },
"scheduled_for": null,
"accepted_at": "2026-11-14T12:01:00+00:00",
"ready_at": null,
"picked_up_at": null,
"delivered_at": null,
"created_at": "2026-11-14T12:00:00+00:00",
"updated_at": "2026-11-14T12:02:00+00:00",
"currency": "TRY",
"amounts_in": "kurus"
}
| Alan | Açıklama |
|---|---|
status |
accepted, preparing, ready (işletmede), picked_up (yolda), delivered, delivery_failed, cancelled |
assigned |
Sipariş hâlâ firmanızda mı (false: işletme geri aldı ya da siz geri verdiniz) |
store |
Alış noktası |
dropoff |
Teslimat adresi ve konumu; directions müşterinin adres tarifi |
items[] |
Ad, miktar ve birim; fiyat yoktur |
payment.amount_to_collect |
Kuryenin kapıda müşteriden alacağı tutar (kuruş); online ödemede 0 |
courier |
Sizin bildirdiğiniz kurye; bildirmediyseniz alanlar null |
scheduled_for |
İleri saatli siparişin teslim zamanı |
İşletme
GET /api/v1/courier/store
Yanıt: {"data": {"id", "name", "phone", "address", "district", "city", "lat", "lng", "status"}}. status: open, busy ya da closed.
Siparişler
GET /api/v1/courier/orders?since=2026-11-14T12:00:00Z
Firmanıza gönderilen siparişler (geçmiş dahil), en yeni başta, en çok 100 kayıt. status ve since süzgeçleri işletme API'sindeki gibidir. Tek sipariş: GET /orders/{number}; firmanızda olmayan sipariş 404.
Kurye bilgisi
POST /api/v1/courier/orders/{number}/courier
Content-Type: application/json
{ "courier_name": "Ali Demir", "courier_phone": "+905321112233" }
En az biri gönderilir; yalnız gönderilen alan değişir, null gönderilen silinir. Kapanmış siparişte 422 (errors.order).
Taşıma adımları
POST /api/v1/courier/orders/{number}/status
Content-Type: application/json
{ "action": "pick_up", "lat": 37.7790, "lng": 29.0810 }
action |
Hangi durumdan | Yeni durum | Ek alan |
|---|---|---|---|
pick_up |
accepted, preparing, ready |
picked_up |
— |
deliver |
picked_up |
delivered |
pin zorunlu: müşterinin teslim kodu |
fail |
picked_up |
delivery_failed |
note zorunlu: gerekçe (en çok 200 karakter) |
lat ve lng isteğe bağlıdır (ikisi birlikte); verilirse kuryenin konumu da güncellenir.
| Durum | Anahtar | Ne zaman |
|---|---|---|
404 |
Sipariş firmanızda değil | |
422 |
errors.action |
Geçiş adı eksik ya da tanımsız |
422 |
errors.pin |
Teslim kodu yok ya da hatalı ("Teslim kodu hatalı."). Sipariş başına yanlış deneme sınırlıdır; aşılınca bir süre kilitlenir |
422 |
errors.note |
fail için gerekçe yok |
422 |
errors.status |
Geçiş siparişin şu anki durumunda yapılamaz |
Siparişi geri verme
POST /api/v1/courier/orders/{number}/release
Content-Type: application/json
{ "note": "Bölgede kurye yok" }
Yalnız teslim alınmadan. Sipariş firmanızdan çıkar, işletme kendi kuryesini atar; note sipariş geçmişine yazılır. Yanıt: {"data": {"number": "…", "released": true}}. Yoldaki sipariş geri verilemez (422); bu arada işletme geri aldıysa 409.
Kurye konumları
POST /api/v1/courier/locations
Content-Type: application/json
{
"items": [
{ "number": "SG261114GCCE", "lat": 37.7793, "lng": 29.0801 },
{ "number": "SG261114HXQA", "lat": 37.7651, "lng": 29.0912 }
]
}
Tek istekte en çok 100 sipariş. Yalnız firmanızdaki açık siparişler güncellenir; öbür numaralar skipped içinde döner (hata değildir: sipariş bu arada teslim edilmiş olabilir).
{ "data": { "updated": 1, "skipped": ["SG261114HXQA"] } }
Konumu 10–30 saniyede bir göndermeniz yeterlidir; müşterinin haritası birkaç saniyede bir yenilenir ve gönderdiğiniz son konumu gösterir.
Bilmeniz gerekenler
- Ne zaman gelir: Yalnız teslimat siparişleri, işletme onayladığı anda, bir kez. Gel al ve restoranda siparişler gelmez.
- İşletme geri alabilir: İşletme kendi kuryesini atarsa sipariş firmanızdan çıkar; size
order.releasedgider ve siparişGET /orders/{number}ile artık görünmez. - İptal: İşletme siparişi iptal ederse size
order.status.changed(to: "cancelled") gider. - Bağlantı kaldırılırsa: anahtarlarınız hemen çalışmaz; firmanızdaki, henüz teslim alınmamış siparişler işletmeye döner.