Bu sözleşme online sipariş platformları, kurye/taşıyıcı firmalar ve gelecekte eklenecek iş ortakları için ortak, iki yönlü geçidi tanımlar. Gelen akışta partner adisyonun.com'a sipariş/durum bildirir; giden akışta adisyonun.com atanmış paketi taşıyıcının HTTPS callback adresine iletir. Her platform hesabı veya taşıyıcı firma ayrı endpoint, olay listesi ve anahtar alır.
İşletme, Webhook Merkezi'nden size olay başına bir URL ve yalnız bir kez gösterilen erişim anahtarı verir:
https://stage.adisyonun.com/entegrasyon/partner/<opak-kod>/<olay>
POST, gövde application/json; charset=utf-8 olmalıdır.stage.adisyonun.com kullanımı için
ayrı DNS kaydı, geçerli TLS sertifikası, reverse-proxy yönlendirmesi ve sunucuda
ADISYONUN_PUBLIC_ORIGIN=https://stage.adisyonun.com yapılandırması gerekir.
Panelde gösterilen URL her zaman ilgili ortamın gerçek, HTTPS public origin değeridir.İşletme, taşıyıcı firma kartına sizin herkese açık HTTPS callback adresinizi kaydeder ve hangi teslimat olaylarını almak istediğinizi seçer. Bir kez gösterilen imza anahtarı taşıyıcının güvenli secret kasasına alınır. Bu ayar başka taşıyıcı firmasına veya başka işletmeye yetki vermez.
Webhook Merkezi kartında yazan başlık biçimini kullanın. Endpoint aşağıdakilerden birini veya ikisini kabul edebilir:
x-api-key: <kısa-anahtar>
Authorization: Bearer <kısa-anahtar>
Aynı istekte iki kimlik başlığını birlikte göndermeyin. Getir uyumluluk endpoint'leri
x-api-key kullanır; genel taşıyıcı endpoint'i kartta aksi yazmıyorsa Bearer veya
x-api-key kabul eder.
| Alan | Gereklilik | Açıklama |
|---|---|---|
eventId | zorunlu kabul edin | Sağlayıcı tarafında benzersiz, değişmeyen olay kimliği. Güvenli retry ve idempotensi için aynı olayda aynı değer gönderilir. |
orderId | sipariş olaylarında zorunlu | İki taraf arasında paylaşılan harici sipariş/teslimat kimliği. foodOrderId veya packageId gibi sağlayıcı eşdeğerleri de desteklenebilir. |
status | olaya göre | status olayında sağlayıcının durum kodu. Terminal olaylarda URL'deki olay adı esas alınır. |
reason | opsiyonel | İptal veya hata nedeni; erişim anahtarı ve kişisel veri içermemelidir. |
paymentType, amount | payment için | Yalnız gözlem bilgisidir. Webhook para tahsil etmez, ödeme veya ciro kaydı oluşturmaz. |
{
"eventId": "evt_20260727_00042",
"orderId": "delivery_8741",
"status": "ON_WAY"
}
eventId tekrar gönderildiğinde
ikinci iş etkisi oluşturulmaz ve {"ok":true,"duplicate":true} dönebilir. Retry sırasında
yeni eventId üretmeyin.Yalnız Webhook Merkezi'nde ilgili endpoint için gösterilen URL'lere istek gönderin. Tanımsız olay reddedilir.
| Olay | Kullanım | Temel veri |
|---|---|---|
created | Yeni platform siparişi | eventId, sipariş kimliği, ürünler ve sağlayıcının sipariş şeması |
cancelled | Platform veya taşıyıcı iptali | eventId, orderId, isteğe bağlı reason |
courier_nearby | Kurye restorana ulaştı/yaklaştı | eventId, orderId |
store_changed | Restoran açık/kapalı durumu | eventId, status |
status | Taşıyıcı durum değişimi | eventId, orderId, status |
picked_up | Kurye paketi teslim aldı | eventId, orderId |
delivered | Paket müşteriye teslim edildi | eventId, orderId |
payment | Kapıda ödeme gözlemi | eventId, orderId, ödeme türü/tutar |
Taşıyıcı status değerlerinde yaygın kodlar:
DRIVER_ACCEPTED, ON_WAY, PICKED_UP,
DELIVERED, CANCELLED, DELIVERY_FAILED, WAITING.
GetirYemek için aynı x-api-key ile dört ayrı URL üretilir:
createdcancelledcourier_nearbystore_changedMaxijett, manuel eklenen yerel taşıyıcı ve gelecekte tanımlanacak her taşıyıcı aynı Webhook Merkezi'nde firma kaydı oluşturulunca otomatik olarak kendine bağlı ayrı endpoint alır. Bir firmanın anahtarı başka firmanın paketini güncelleyemez.
# Genel taşıyıcı: kurye yolda curl -X POST 'https://stage.adisyonun.com/entegrasyon/partner/<opak-kod>/status' \ -H 'Authorization: Bearer <kısa-anahtar>' \ -H 'Content-Type: application/json' \ -d '{"eventId":"evt_42","orderId":"delivery_8741","status":"ON_WAY"}'
Bu akış yalnız taşıyıcı firma kaydına atanmış siparişi, o firmanın yapılandırdığı callback adresine gönderir. Aynı tenant içindeki iki taşıyıcı dahi URL, imza anahtarı, sıra ve teslimat günlüğü paylaşmaz.
| Olay | Ne zaman gönderilir? |
|---|---|
delivery.assigned | Paket taşıyıcı firmaya atandığında |
delivery.updated | Atanmış paketin aktarılması gereken bilgisi değiştiğinde |
delivery.cancelled | Sipariş/paket iptal edildiğinde |
delivery.unassigned | Taşıyıcı firma ataması kaldırıldığında |
Her denemede aşağıdaki Standard Webhooks başlıkları yeniden üretilir:
webhook-id: msg_01J... webhook-timestamp: 1785218700 webhook-signature: v1,<base64-hmac> content-type: application/json
Doğrulanacak mesaj, ayırıcı noktalar korunarak id.timestamp.rawBody biçimindedir.
Panelde gösterilen anahtar whsec_<base64> biçimindedir: önce tam olarak
whsec_ önekini çıkarın, kalan bölümü Base64 decode edin ve çıkan 24 baytı
HMAC-SHA256 anahtarı olarak kullanın. whsec_... metnini doğrudan HMAC anahtarı
yapmak geçersiz imza üretir. JSON'u yeniden serialize etmeyin; imzayı HTTP isteğinin ham
gövdesiyle, sabit-zamanlı karşılaştırmayla doğrulayın.
Tekrar saldırılarını azaltmak için timestamp toleransı uygulayın ve daha önce işlenen
webhook-id değerini idempotent kabul edin.
{
"id": "msg_01J...",
"type": "delivery.assigned",
"timestamp": "2026-07-28T09:15:00.000Z",
"data": {
"eventType": "delivery.assigned",
"order": { "id": "ord_...", "number": "184", "status": "hazir", "total": 420, "currency": "TRY" },
"customer": { "name": "Müşteri", "phone": "05..." },
"delivery": { "status": "hazir", "address": "...", "courier": null },
"collection": { "prepaid": false, "collectedBy": "carrier", "amount": 420, "currency": "TRY" },
"restaurant": { "id": "rest_...", "name": "İşletme" },
"carrierCompany": { "id": "cc_...", "name": "Taşıyıcı", "provider": "custom_carrier" }
}
}
2xx yanıt başarılı teslimattır. Taşıyıcı iş etkisini
webhook-id ile idempotent tamamlamalıdır.Retry-After daha geç bir zamanı gösterebilir.410 Gone callback'in kalıcı olarak kaldırıldığı anlamına gelir ve ilgili giden
webhook otomatik devre dışı bırakılır.v1 imzası taşıyabilir; taşıyıcı
en az birini doğrulayıp yeni anahtara geçmelidir.| HTTP | Anlamı | İstemci davranışı |
|---|---|---|
200 | İşlendi veya mükerrer olay güvenle kabul edildi. | Tekrar göndermeyin. |
401 | Endpoint/anahtar geçersiz ya da yanlış başlık biçimi. | Retry yapmayın; yapılandırmayı düzeltin. |
409 | Bağlı sipariş henüz sisteme ulaşmadı. | Retry-After varsa uyun ve yeniden deneyin. |
410 | İşletme veya endpoint sahibi pasif/silinmiş. | Retry yapmayın; işletmeyle görüşün. |
422 | Olay türü veya payload geçersiz. | Payload'ı düzeltmeden retry yapmayın. |
429 | Hız sınırı aşıldı. | Retry-After veya üstel gecikme kullanın. |
5xx | Geçici sunucu/işleme hatası. | Aynı eventId ile retry yapın. |
409, 429 ve 5xx için,
jitter eklenmiş exponential backoff (üstel gecikme) kullanın; örneğin 5, 15, 30 ve 60 saniye.
Retry-After başlığı varsa önceliklidir. Sonsuz retry yapmayın; son hatayı operasyona bildirin.eventId ile retry yapın; sonucu tahmin ederek başarılı saymayın.