Kurye firmaları
Paket sipariş hazır olunca bildirim alır, kuryeyi atar, yolda ve teslim edildi bilgisini kasaya geri yazar.
delivery:readdelivery:writeGeliştiriciler
Kurye, sipariş platformu, muhasebe, tedarikçi ve rezervasyon yazılımları Ristivo kullanan işletmelere bu API ile bağlanır. İşletmeler de kendi yazılımları için anahtar alır.
https://ristivo.com/api/v1Ristivo; kasa, QR menü, stok, rezervasyon ve misafir mesajlarını tek sistemde tutar. API bu verinin işletmenin izin verdiği kısmını dışarı açar ve dışarıdan gelen bilgiyi kasaya, menüye ya da stoğa yazar.
API v1 iş ortaklarıyla birlikte açılıyor. İlk açılan bölüm teslimat (kurye); "Yakında" işaretli uçlar sırayla açılacak. İş ortağı uygulamasını ekibimiz açar, başvuru bölümüne bakın.
Her iş ortağı yalnız işine yarayan kapsamı ister. Kurye firması satış raporunu, muhasebe yazılımı misafir telefonunu göremez.
Paket sipariş hazır olunca bildirim alır, kuryeyi atar, yolda ve teslim edildi bilgisini kasaya geri yazar.
delivery:readdelivery:writeMenüyü ve fiyatları çeker, gelen siparişi doğrudan kasaya düşürür, biten ürünü platformda kapatır.
menu:readorders:writeGünlük satışı, KDV kırılımını, ödeme tiplerini, gün sonunu ve kesilen e-belgeleri okur. Misafir bilgisi görmez.
sales:readinvoices:readpurchases:readSiparişi alır ve onaylar, alış faturasını gönderir. Fatura işletme onaylayınca stoğa işlenir.
purchases:readpurchases:writeBoş masayı sorgular, rezervasyon açar ve iptal eder. Otel programı misafirin restoran harcamasını görebilir.
reservations:readreservations:writeMasadaki hesabı okur, alınan ödemeyi adisyona işler. Yazarkasa fişi kasada kesilir.
orders:readpayments:writeKapanan adisyonu ve misafir kartını alır, puan yükler. Kişisel veri için işletmeden ayrıca onay istenir.
orders:readcustomers:readKendi web siteniz, uygulamanız, zincir merkez raporunuz ya da n8n akışınız. Anahtarı işletme kendisi alır.
Paketinizdeki her kapsamHer istek Authorization: Bearer başlığıyla gelir. Anahtar tek bir işletmeye bağlıdır; işletme kimliğini ayrıca göndermezsiniz.
İşletmenin kendi web sitesi, uygulaması ya da otomasyonu için. İşletme sahibi panelde Entegrasyonlar › API bağlantıları'ndan oluşturur; paketindeki kapsamlarla sınırlıdır, 2 yıl geçerlidir, istediği an siler. Test ortamında rsk_test_ ile başlar.
rsk_live_4fJ2…Kurye, muhasebe, platform gibi birden çok işletmeye hizmet veren firmalar için. Uygulamanızı başvurunuz üzerine ekibimiz açar; kendiniz kayıt olamazsınız. OAuth 2.0 yetki kodu akışı (PKCE), her işletme ayrı onay verir.
client_id · client_secrethttps://ristivo.com/entegrasyon/baglan adresine yönlendirin: response_type=code, client_id, redirect_uri (uygulamanıza kayıtlı olan), scope (boşlukla ayrılmış), state, code_challenge, code_challenge_method=S256.code'u 10 dakika içinde sunucunuzdan POST https://ristivo.com/api/v1/oauth/token ile erişim anahtarına çevirin. client_secret tarayıcıya ya da mobil uygulamaya konmaz. Erişim anahtarı 1 saat, yenileme anahtarı 90 gün geçerlidir; her yenilemede yeni yenileme anahtarı döner. Yanıttaki scope işletmenin gerçekten verdiği kapsamlardır.curl -X POST https://ristivo.com/api/v1/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=authorization_code \
-d code=$CODE \
-d redirect_uri=https://kurye.example.com/ristivo/donus \
-d code_verifier=$VERIFIER
# Yanıt
# {"access_token":"rsk_at_…","token_type":"Bearer","expires_in":3600,
# "refresh_token":"rsk_rt_…","scope":"business:read delivery:read delivery:write",
# "business_id":"biz_3f9a1c07d2e4b658"}
# Yenileme
curl -X POST https://ristivo.com/api/v1/oauth/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=refresh_token \
-d refresh_token=$REFRESH_TOKENOnay ekranında işletme sahibi bu listeyi düz Türkçeyle görür. Kişisel veri içeren kapsamlar ayrı onay kutusuyla istenir.
| Kapsam | Ne verir |
|---|---|
business:read | İşletme adı, adres, çalışma saatleri, şubeler |
menu:read | Kategoriler, ürünler, fiyatlar, seçenekler |
menu:write | Fiyat ve satışta olma durumu |
orders:read | Adisyon ve siparişler, kalemler |
orders:write | Dış kanaldan sipariş açma ve iptal |
payments:write | Adisyona ödeme işleme |
delivery:read | Teslimata hazır paket siparişlerKişisel veri |
delivery:write | Kurye atama, durum ve konum |
sales:read | Günlük satış, ödeme tipleri, gün sonu |
invoices:read | E-fatura, e-arşiv ve e-adisyon kayıtları |
purchases:read | Alış faturaları, tedarikçi siparişleri |
purchases:write | Alış faturası gönderme, sipariş onayı |
stock:read | Stok kartları ve depo miktarları |
reservations:read | Rezervasyonlar ve boş masa |
reservations:write | Rezervasyon açma, değiştirme, iptalKişisel veri |
customers:read | Misafir kartı; telefon ve e-posta maskeliKişisel veri |
webhooks:manage | Webhook adresi ekleme ve silme |
Misafir verisinin sahibi işletmedir; Ristivo onu işletmenin talimatıyla işler. API bu ilişkiyi bozmaz.
İş ortağı Ristivo kullanan işletmeleri listeleyemez. Yalnız kendisini bağlayan işletmenin verisini görür.
İşletme bağlantıyı panelden (Entegrasyonlar › API bağlantıları) kaldırır; anahtar o anda geçersiz olur.
Alıcının adı, telefonu ve adresi yalnız üstlenilen teslimatta açılır; teslimden 24 saat sonra maskelenir.
Satış, gün sonu ve e-belge yanıtlarında misafir adı, telefonu ya da adresi dönmez.
Hangi uygulamanın neyi okuyup yazdığı işletmenin bağlantı günlüğünde görünür.
İş ortağı KVKK kapsamında veri işleme sözleşmesi imzalar; veriyi yalnız sunduğu hizmet için kullanır.
"1250.00". Para birimi TRY, tutarlar KDV dahildir.2026-10-26T12:32:00+03:00.ord_, prd_, dlv_, rsv_.POST isteğinde Idempotency-Key gönderin. Aynı anahtarla gelen ikinci istek ilk yanıtı döner, ikinci kayıt açmaz. Anahtar 24 saat saklanır.Request-Id başlığını destek isterken iletin.Liste uçları en fazla limit kadar kayıt ve next_cursor döner. Sonraki sayfa için cursor parametresine bu değeri verin; null geldiyse liste bitmiştir. Eşitleme yaparken updated_since ile yalnız değişenleri çekin.
{
"data": [
"…"
],
"next_cursor": "eyJpZCI6MTA0Mn0"
}Hata yanıtı her zaman aynı biçimdedir. Programınız error.code'a bakmalı; message Türkçe ve insan içindir.
{
"error": {
"code": "validation_failed",
"message": "Ürün bulunamadı.",
"errors": {
"items.0.product_id": [
"prd_9999 bu işletmede yok."
]
},
"request_id": "req_6b1f0e2a"
}
}| HTTP | Kod | Anlamı |
|---|---|---|
| 400 | invalid_request | İstek biçimi hatalı |
| 401 | unauthenticated | Anahtar yok, geçersiz ya da işletme bağlantıyı kaldırmış |
| 402 | module_required | İşletmenin paketinde bu bölüm yok |
| 403 | insufficient_scope | Anahtara bu kapsam verilmemiş |
| 404 | not_found | Kayıt yok ya da bu işletmeye ait değil |
| 409 | conflict | Kayıt başka biri tarafından değiştirildi ya da üstlenildi |
| 422 | validation_failed | Alan hatası; errors içinde alan adıyla döner |
| 429 | rate_limited | Dakikalık sınır aşıldı; Retry-After kadar bekleyin |
| 500 | server_error | Bizdeki hata; request_id ile bildirin |
Her anahtar dakikada 120 istek yapabilir. Kalan hak X-RateLimit-Limit ve X-RateLimit-Remaining başlıklarında döner. Sınır aşılınca 429 ve Retry-After (saniye) gelir. Sık değişen veriyi sorgulamak yerine webhook kullanın.
Anahtarın bağlı olduğu işletme. Bir iş ortağı yalnız kendisini bağlayan işletmeyi görür; Ristivo müşteri listesine erişim yoktur.
/businessKapsam business:read
curl -X GET https://ristivo.com/api/v1/business \
-H "Authorization: Bearer $RISTIVO_KEY"{
"id": "biz_3f9a1c07d2e4b658",
"name": "Örnek Lokanta",
"address": "Kemalpaşa Mah. Çarşı Cad. No:12, Çanakkale",
"phone": "+90 286 000 00 00",
"timezone": "Europe/Istanbul",
"currency": "TRY",
"modules": [
"pos",
"reservation",
"customers"
],
"connection": {
"type": "partner",
"scopes": [
"business:read",
"delivery:read",
"delivery:write"
],
"created_at": "2026-10-26T14:05:00+03:00"
}
}Masa, gel-al ve paket siparişleri. Dış kanaldan açılan sipariş kasaya düşer, mutfak fişi basılır; yazarkasa fişi kasada kesilir.
/ordersYakındaKapsam orders:read
statusmetinchannelmetincreated_sincetarihcursormetincurl -X GET https://ristivo.com/api/v1/orders \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "ord_58213",
"channel": "delivery",
"status": "open",
"table": null,
"items": [
{
"product_id": "prd_1042",
"name": "Lahmacun",
"quantity": 3,
"unit_price": "120.00",
"total": "360.00"
}
],
"total": "360.00",
"created_at": "2026-10-26T12:10:02+03:00"
}
],
"next_cursor": null
}/orders/{id}YakındaKapsam orders:read
curl -X GET https://ristivo.com/api/v1/orders/ord_58213 \
-H "Authorization: Bearer $RISTIVO_KEY"{
"id": "ord_58213",
"channel": "delivery",
"status": "closed",
"total": "360.00",
"payments": [
{
"method": "card",
"amount": "360.00"
}
],
"closed_at": "2026-10-26T12:41:19+03:00"
}/ordersYakındaSipariş kasada ilgili kanalın listesine düşer. Aynı Idempotency-Key ile tekrar gönderilen istek ikinci sipariş açmaz.
Kapsam orders:write
external_idmetinzorunluchannelmetinzorunluitemsdizizorunlucustomernesnepaidmantıksalnotemetincurl -X POST https://ristivo.com/api/v1/orders \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"external_id": "WEB-20931",
"channel": "delivery",
"items": [
{
"product_id": "prd_1042",
"quantity": 3,
"note": "Acısız"
}
],
"customer": {
"name": "Elif K.",
"phone": "+905321112233",
"address": "Barbaros Mah. 1. Sok. No:4 D:2"
},
"paid": true
}'{
"id": "ord_58214",
"status": "open",
"total": "360.00",
"created_at": "2026-10-26T12:14:40+03:00"
}/orders/{id}/paymentsYakındaYemek kartı ya da banka POS ödemesini adisyona yazar. Tutar kalan bakiyeyi aşamaz.
Kapsam payments:write
methodmetinzorunluamountparazorunlureferencemetincurl -X POST https://ristivo.com/api/v1/orders/ord_58213/payments \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"method": "meal_card",
"amount": "360.00",
"reference": "MLT-88120"
}'{
"order_id": "ord_58213",
"paid": "360.00",
"remaining": "0.00"
}Yemeksepeti ya da Trendyol Go siparişini işletme kendi kuryesiyle gönderiyorsa kasa "Hazır" deyince teslimat açılır ve delivery.ready gönderilir. İşletme panelden "Kurye çağır" ile ya da kendi sisteminden POST /deliveries ile de açabilir. Kurye firması teslimatı üstlenir, durumu ve konumu geri yazar; işletme panelde izler. Üstlenmeden önce alıcının adı, telefonu ve adresi görünmez; yalnız bölge ve yaklaşık konum.
/deliveriesKimsenin üstlenmediği hazır teslimatlar ile sizin üstlendikleriniz. Başka firmanın üstlendiği teslimat listede ve tek kayıt ucunda görünmez.
Kapsam delivery:read
statusmetinlimitsayıcursormetincurl -X GET https://ristivo.com/api/v1/deliveries \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "dlv_k2m8q4x1v7n3p9r5",
"status": "ready",
"source": "yemeksepeti",
"order_ref": "1042",
"pickup": {
"name": "Örnek Lokanta",
"address": "Çarşı Cad. No:12, Çanakkale",
"phone": "+90 286 000 00 00"
},
"dropoff": {
"area": "Barbaros, Merkez",
"lat": 40.14,
"lng": 26.41
},
"order_total": "360.00",
"collect_on_delivery": "0.00",
"payment_method": "online",
"assigned_to_you": false,
"ready_at": "2026-10-26T12:32:00+03:00"
}
],
"next_cursor": null
}/deliveries/{id}Kapsam delivery:read
curl -X GET https://ristivo.com/api/v1/deliveries/dlv_k2m8q4x1v7n3p9r5 \
-H "Authorization: Bearer $RISTIVO_KEY"{
"id": "dlv_k2m8q4x1v7n3p9r5",
"status": "on_the_way",
"courier": {
"name": "Mert Y.",
"company": "Hızlı Kurye"
},
"eta_minutes": 6
}/deliveries/{id}/acceptİlk üstlenen firma alır, ikinci istek 409 döner. Üstlenince alıcının adı, telefonu ve adresi yalnız size açılır.
Kapsam delivery:write
couriernesnezorunlueta_minutessayıtracking_urlmetincurl -X POST https://ristivo.com/api/v1/deliveries/dlv_k2m8q4x1v7n3p9r5/accept \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"courier": {
"name": "Mert Y.",
"phone": "+905339998877",
"plate": "17 ABC 123"
},
"eta_minutes": 6
}'{
"id": "dlv_k2m8q4x1v7n3p9r5",
"status": "assigned",
"assigned_to_you": true,
"dropoff": {
"name": "Elif K.",
"phone": "+905321112233",
"address": "Barbaros Mah. 1. Sok. No:4 D:2",
"note": "Zili çalmayın",
"area": "Barbaros, Merkez",
"lat": 40.139123,
"lng": 26.412234
},
"courier": {
"name": "Mert Y.",
"phone": "+905339998877",
"plate": "17 ABC 123",
"company": "Hızlı Kurye"
},
"accepted_at": "2026-10-26T12:33:10+03:00"
}/deliveries/{id}/statusYalnız üstlenen firma yazar; durum geri gitmez. Aynı durumu konumla tekrar göndermek yalnız konumu günceller.
Kapsam delivery:write
statusmetinzorunlulatsayılngsayıreasonmetincurl -X POST https://ristivo.com/api/v1/deliveries/dlv_k2m8q4x1v7n3p9r5/status \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"status": "delivered",
"lat": 40.1391,
"lng": 26.4122
}'{
"id": "dlv_k2m8q4x1v7n3p9r5",
"status": "delivered",
"delivered_at": "2026-10-26T12:51:47+03:00"
}/deliveriesİşletmenin kendi sitesinden ya da telefondan aldığı paket siparişi bağlı kurye firmalarına açar. Aynı external_id ikinci teslimat açmaz.
Kapsam orders:write
external_idmetinzorunlurecipientnesnezorunluorder_totalparacollect_on_deliveryparapayment_methodmetinorder_refmetincurl -X POST https://ristivo.com/api/v1/deliveries \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"external_id": "WEB-20931",
"recipient": {
"name": "Elif K.",
"phone": "+905321112233",
"address": "Barbaros Mah. 1. Sok. No:4 D:2",
"area": "Barbaros, Merkez"
},
"order_total": "360.00",
"collect_on_delivery": "0.00",
"payment_method": "online"
}'{
"id": "dlv_a7c3e9g1k5m2p8s4",
"status": "ready",
"external_id": "WEB-20931"
}/deliveries/{id}/cancelYalnız teslimatı açan taraf. Üstlenen kurye firmasına delivery.cancelled gider.
Kapsam orders:write
reasonmetincurl -X POST https://ristivo.com/api/v1/deliveries/dlv_a7c3e9g1k5m2p8s4/cancel \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"reason": "Müşteri vazgeçti"
}'{
"id": "dlv_a7c3e9g1k5m2p8s4",
"status": "cancelled"
}Mali müşavir ve ön muhasebe yazılımları için. Yanıtlarda misafir adı, telefonu ya da adresi yer almaz.
/sales/dailyYakındaİş günü, gün sonu saatine göre hesaplanır (gece 03:00 kapanan işletmede satış önceki güne yazılır).
Kapsam sales:read
fromtarihzorunlutotarihzorunlucurl -X GET https://ristivo.com/api/v1/sales/daily \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"date": "2026-10-25",
"gross": "48250.00",
"discounts": "1200.00",
"complimentary": "350.00",
"cancelled": "180.00",
"net": "46520.00",
"vat": [
{
"rate": 10,
"base": "38654.55",
"amount": "3865.45"
},
{
"rate": 20,
"base": "3333.33",
"amount": "666.67"
}
],
"payments": [
{
"method": "cash",
"amount": "9820.00"
},
{
"method": "card",
"amount": "33100.00"
},
{
"method": "meal_card",
"amount": "3600.00"
}
],
"covers": 214
}
]
}/sales/end-of-day/{date}YakındaKasa ve yazarkasa bazında gün sonu: Z numarası, fiş adedi, kasa farkı.
Kapsam sales:read
curl -X GET https://ristivo.com/api/v1/sales/end-of-day/2026-10-25 \
-H "Authorization: Bearer $RISTIVO_KEY"{
"date": "2026-10-25",
"registers": [
{
"name": "Kasa 1",
"okc_serial": "PAV0000123",
"z_number": 412,
"receipts": 186,
"total": "41210.00",
"cash_difference": "0.00"
}
]
}/invoicesYakındaKapsam invoices:read
typemetinfromtarihtotarihcurl -X GET https://ristivo.com/api/v1/invoices \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "inv_3301",
"type": "e_invoice",
"number": "RST2026000000412",
"uuid": "5f0c2e7a-1d4b-4c8e-9a51-7c2b1e0d9f33",
"buyer_tax_id": "1234567890",
"total": "6000.00",
"vat": "1000.00",
"status": "accepted",
"pdf_url": "https://ristivo.com/api/v1/invoices/inv_3301/pdf",
"issued_at": "2026-10-25T21:14:00+03:00"
}
]
}Tedarikçi ve muhasebe yazılımları için. Gönderilen alış faturası doğrudan stoğa yazılmaz; işletmenin onayına düşer, onaylanınca stoğa ve tedarikçi carisine işlenir.
/purchasesYakındaKapsam purchases:read
fromtarihsupplier_tax_idmetincurl -X GET https://ristivo.com/api/v1/purchases \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "pur_771",
"supplier": {
"name": "Ege Gıda",
"tax_id": "9876543210"
},
"number": "EGE2026000001187",
"total": "14400.00",
"status": "approved",
"date": "2026-10-24"
}
]
}/purchasesYakındaKapsam purchases:write
supplier_tax_idmetinzorunlunumbermetinzorunludatetarihzorunlulinesdizizorunluuuidmetincurl -X POST https://ristivo.com/api/v1/purchases \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"supplier_tax_id": "9876543210",
"number": "EGE2026000001190",
"date": "2026-10-26",
"lines": [
{
"name": "Kıyma (dana)",
"quantity": 10,
"unit": "kg",
"unit_price": "640.00",
"vat_rate": 1
}
]
}'{
"id": "pur_772",
"status": "pending_approval",
"total": "6464.00"
}/stock/levelsYakındaKapsam stock:read
below_minimummantıksalcurl -X GET https://ristivo.com/api/v1/stock/levels \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"item_id": "stk_208",
"name": "Kıyma (dana)",
"unit": "kg",
"quantity": "3.200",
"minimum": "5.000",
"warehouse": "Mutfak"
}
]
}Rezervasyon platformları ve otel programları için. Açılan rezervasyon işletmenin kurallarına (kapasite, saat aralığı, onay gereksinimi) uyar.
/availabilityYakındaKapsam reservations:read
datetarihzorunluparty_sizesayızorunlucurl -X GET https://ristivo.com/api/v1/availability \
-H "Authorization: Bearer $RISTIVO_KEY"{
"date": "2026-10-31",
"party_size": 4,
"slots": [
"19:00",
"19:30",
"21:30"
]
}/reservationsYakındaKapsam reservations:write
datetarihzorunlutimemetinzorunluparty_sizesayızorunluguestnesnezorunlunotemetinexternal_idmetincurl -X POST https://ristivo.com/api/v1/reservations \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"date": "2026-10-31",
"time": "19:30",
"party_size": 4,
"guest": {
"name": "Can D.",
"phone": "+905441234567"
},
"note": "Cam kenarı"
}'{
"id": "rsv_4410",
"status": "pending",
"date": "2026-10-31",
"time": "19:30",
"party_size": 4
}/reservations/{id}/cancelYakındaKapsam reservations:write
curl -X POST https://ristivo.com/api/v1/reservations/rsv_4410/cancel \
-H "Authorization: Bearer $RISTIVO_KEY"{
"id": "rsv_4410",
"status": "cancelled"
}Misafir kartı kişisel veridir. İşletme bu kapsamı ayrı bir onayla verir; telefon ve e-posta maskeli döner. Tam hâli yalnız işletmenin kendi anahtarıyla alınır.
/customersYakındaKapsam customers:read
updated_sincetarihcurl -X GET https://ristivo.com/api/v1/customers \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "cus_1209",
"name": "Can D.",
"phone": "+90 544 *** ** 67",
"email": "c***@gmail.com",
"visits": 7,
"last_visit": "2026-10-18",
"marketing_consent": true
}
]
}Kayıtlı adresinize POST ile gönderilir. 10 saniye içinde 2xx dönmezseniz 1 dk, 5 dk, 30 dk, 2 sa, 6 sa ve 24 sa sonra tekrar denenir. Aynı olay birden fazla gelebilir; id ile tekrarı ayıklayın.
| Olay | Ne zaman |
|---|---|
order.created | Yeni adisyon ya da sipariş açıldıYakında |
order.updated | Kalem eklendi, çıkarıldı ya da masa değiştiYakında |
order.closed | Hesap kapandı, ödeme tamamYakında |
order.cancelled | Sipariş iptal edildiYakında |
delivery.ready | Paket yola hazır, kurye bekleniyor (alıcı bilgisi yok, yalnız bölge) |
delivery.updated | Teslimat üstlenildi ya da kurye durumu değişti |
delivery.cancelled | Teslimat iptal edildi |
product.updated | Fiyat ya da satış durumu değiştiYakında |
menu.updated | Kategori ya da ürün eklendi, silindiYakında |
day.closed | Gün sonu alındıYakında |
invoice.issued | E-fatura, e-arşiv ya da e-adisyon kesildiYakında |
purchase.approved | Gönderilen alış faturası onaylandıYakında |
reservation.created | Yeni rezervasyonYakında |
reservation.updated | Onaylandı, değişti, iptal edildi ya da gelmediYakında |
{
"id": "evt_q1w2e3r4t5y6u7i8",
"type": "delivery.ready",
"created_at": "2026-10-26T12:32:00+03:00",
"business_id": "biz_3f9a1c07d2e4b658",
"data": {
"delivery_id": "dlv_k2m8q4x1v7n3p9r5",
"area": "Barbaros, Merkez",
"ready_at": "2026-10-26T12:32:00+03:00",
"collect_on_delivery": "0.00"
}
}Olayları almak istediğiniz adresi kaydedin (bağlantı başına en fazla 5). Yanıttaki secret yalnız bir kez gösterilir; imzayı doğrulamak için saklayın. Adres https olmalı ve herkese açık bir sunucuya gitmeli.
/webhooksKapsam webhooks:manage
curl -X GET https://ristivo.com/api/v1/webhooks \
-H "Authorization: Bearer $RISTIVO_KEY"{
"data": [
{
"id": "whk_r4t8y2u6i0o3p7a1",
"url": "https://kurye.example.com/ristivo",
"events": [
"delivery.ready"
],
"status": "active",
"last_success_at": "2026-10-26T12:32:01+03:00",
"last_error": null
}
]
}/webhooksKapsam webhooks:manage
urlmetinzorunlueventsdizizorunlucurl -X POST https://ristivo.com/api/v1/webhooks \
-H "Authorization: Bearer $RISTIVO_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"url": "https://kurye.example.com/ristivo",
"events": [
"delivery.ready",
"delivery.cancelled"
]
}'{
"id": "whk_r4t8y2u6i0o3p7a1",
"url": "https://kurye.example.com/ristivo",
"events": [
"delivery.ready",
"delivery.cancelled"
],
"status": "active",
"secret": "whsec_3Jx9…"
}/webhooks/{id}Kapsam webhooks:manage
curl -X DELETE https://ristivo.com/api/v1/webhooks/whk_r4t8y2u6i0o3p7a1 \
-H "Authorization: Bearer $RISTIVO_KEY"{
"id": "whk_r4t8y2u6i0o3p7a1",
"deleted": true
}Her olayda Ristivo-Signature: t=…,v1=… başlığı gelir. v1, t + "." + ham gövde metninin webhook secret'ıyla alınmış HMAC-SHA256 özetidir. Gövdeyi JSON olarak çözmeden önce doğrulayın; 5 dakikadan eski zaman damgasını reddedin.
import crypto from 'node:crypto'
// Express: app.post('/ristivo', express.raw({ type: 'application/json' }), dogrula)
function dogrula(req, res) {
const baslik = req.get('Ristivo-Signature') // t=1761471120,v1=5f2b…
const { t, v1 } = Object.fromEntries(baslik.split(',').map((p) => p.split('=')))
const beklenen = crypto
.createHmac('sha256', process.env.RISTIVO_WEBHOOK_SECRET)
.update(`${t}.${req.body}`)
.digest('hex')
const gecerli = crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(beklenen))
const taze = Math.abs(Date.now() / 1000 - Number(t)) < 300
if (!gecerli || !taze) return res.sendStatus(400)
const olay = JSON.parse(req.body)
// olay.id ile daha önce işlenip işlenmediğine bakın
res.sendStatus(200)
}Geliştirmeyi https://dev.ristivo.com/api/v1 üzerinde yapın. Test ortamının veritabanı canlıdan ayrıdır; size örnek menü, masa ve siparişleri olan bir deneme işletmesi açarız. Canlıya geçerken yalnız taban adres ve anahtar değişir.
Firmanızı, hangi işletmelere hizmet verdiğinizi ve ihtiyacınız olan kapsamları yazın. Test anahtarını ve deneme işletmesini aynı hafta açarız. İşletmeyseniz panel kullanıcı adınızı ekleyin.