Süper GelsinPartner APIv1.0.0
API Referansı
TREN
Başlangıç
  • Hemen Başla
  • Test Ortamı (Sandbox)
  • Yetkilendirme
  • Servis Limitleri
  • Test hesabı başvurusu
Ortak uçlar
  • İşletme
  • Sipariş Yaşam Döngüsü
  • Sipariş Durumları
  • Mali Belge
  • Kurye Firması Entegrasyonu
  • Müşteri Talepleri
  • Değerlendirmeler
  • Webhook
Yemek
  • Menü ve Ürün Eşleme
Çarşı
  • Çarşı'ya genel bakış
  • Katalog
  • Toplama ve Dönüş
Referans
  • Sürümleme ve Hız Sınırı
  • Hata Kodları ve Sorun Giderme
  • Changelog
  • Sıkça Sorulan Sorular
  • API Referansı
Geliştirici Portalı/Ortak uçlar

Sipariş Yaşam Döngüsü

Sipariş listeleme ve okuma, ödeme, durum eylemleri, iptal ve otomatik iptal.

Restoran ve Çarşı işletmeleri aynı sipariş uçlarını kullanır. Gövde ortak alanlar taşır; ürün satırları vertical alanına göre ayrışır: restaurant için RestoranSiparisi, store için DukkanSiparisi. Çarşı'ya özgü toplama ve dönüş adımları Toplama ve Dönüş sayfasındadır.

Bu sayfadaki uçlar

Her satır API referansındaki tam tanıma gider — alanlar, yanıt kodları ve deneme konsolu orada.

  • GET/orders
  • GET/orders/{id}
  • POST/orders/{id}/status
  • GET/cancel-reasons

Durum akışı

Restoran
pending→preparing→ready→on_the_way→delivered(çoğu durumdan cancelled)
Çarşı
pending→confirmed→preparing→on_the_way→delivered(çoğu durumdan cancelled)

Durumu yazan eylemler iki dikeyde aynıdır: accept, ready, dispatch, deliver, cancel. Hedef durum dikeye göre değişir (aşağıdaki Durum yazma tablosu). Durum adları ve anlamları için Sipariş Durumları.

Sipariş listeleme ve okuma

Değişen siparişleri çek
curl "https://api.supergelsin.com/api/partner/v1/orders?updatedSince=2026-01-31T10:00:00Z&limit=50" \
  -H "Authorization: Basic $(printf '%s:%s' "$API_KEY" "$API_SECRET" | base64)" \
  -H "X-Integrator: Ornek POS" \
  -H "X-Operator: kasiyer_01"

GET /orders sayfalı listedir ve { items, nextCursor } döner. Sıralama updatedAt artan, ardından id artandır; liste en eski değişiklikten başlar ve imleçle ilerler. nextCursor doluysa sonraki istekte cursor olarak gönderilir, null ise akışın sonuna gelinmiştir. Ödeme tamamlanmamış siparişler hiçbir zaman listelenmez.

AlanTipAçıklama
limitintegerSayfa boyutu, 1–50; varsayılan 50.
statusstringVirgülle ayrılmış durum listesi. Restoranda pending, preparing, ready, on_the_way, delivered, cancelled; Çarşı'da pending, confirmed, preparing, on_the_way, delivered, cancelled ve return_pending. Tanınmayan değer 400 invalid_query döner; allowed izin verilenleri listeler.
updatedSinceISO 8601Saat dilimi zorunlu (2026-01-31T10:00:00Z). Bu an ve sonrasında değişen siparişleri getirir (sınır dahildir). Saniyesiz ya da saat dilimsiz değer 400 invalid_query döner.
cursorstringÖnceki yanıttaki nextCursor değeri. Bozuk bir değer akışı baştan başlatır.
  • Varsayılan: status ve updatedSince verilmezse yalnız aktif siparişler gelir (restoranda pending, preparing, ready, on_the_way; Çarşı'da pending, confirmed, preparing, on_the_way).
  • updatedSince verilirse teslim ve iptal değişiklikleri dahil bütün durumlar gelir; kasa kendi kaydını böyle uzlaştırır.
  • Bir sonraki çekimde son görülen updatedAt değerinden birkaç saniye geri verin ve tekrarları id ile updatedAt çiftiyle ayıklayın: kayıt değişikliğinin zamanı işlem tamamlanmadan önce yazıldığından, yeni değişen bir sipariş çok yakın bir zamanla görünmeyebilir.
  • Çarşı'da status=return_pending, teslim edilemedi olarak iptal edilmiş ve dönüşü onay bekleyen siparişleri getirir; bu siparişlerde returnLines dolu gelir.

GET /orders/{id} tek siparişin tam gövdesini döner. Ödeme tamamlanmamış sipariş ve başka işletmenin siparişi aynı 404 not_found yanıtını alır. Webhook gövdesi (order alanı) bu gövdeyle aynıdır; webhook düşük gecikme sağlar, bu uçlar doğruluk kaynağıdır (Webhook).

Sipariş gövdesi

Her iki dikeyde ortak alanlar
AlanTipAçıklama
id · refstringref, siparişin görünür numarasıdır: id değerinin son 8 karakteri, büyük harf. Panel, fiş ve bildirimlerdeki numarayla aynıdır.
merchantId · verticalstringİşletme kimliği ve dikey (restaurant ya da store).
isTestbooleantrue ise POST /orders/test ile açılmış test siparişidir; işletmenin mutfak ya da toplama ekranına düşmez (toplama sonucu bu API ile yazılabilir).
createdAt · updatedAt · scheduledAtISO 8601updatedAt son değişiklik anıdır; updatedSince ve senkron içindir. scheduledAt ileri tarihli (planlı) siparişte dolu, değilse null.
notestring | nullMüşteri notu. Müşteri penceresi dolunca düşer.
subtotal · deliveryFee · totalnumberTutarlar.
paymentobjectTahsilat bilgisi (aşağıda Ödeme).
cancelReason · deliveryFailedobject | nullİptal edilmiş siparişte iptal nedeni; teslim edilemedi olarak kapanmış siparişte deliveryFailed (reasonCode, completedSale, at).
invoice · courier · customerobjectFatura bağlantısı (Fatura), dış kurye bilgisi (Kurye) ve müşteri bilgisi.

Müşteri bilgisi kapanıştan 2 saat sonra daraltılır (ad kısalır, telefon ve koordinat düşer, adres yalnız İlçe / İl kalır, not düşer); sipariş özeti (kalemler, tutarlar, ödeme, fatura) bu daraltmadan etkilenmez.

Restoran (vertical: restaurant)
AlanTipAçıklama
typeenumTeslimat türü: delivery, pickup.
items[]arrayid (menüdeki ürün kimliği), name, quantity, unitPrice, options ve selectedOptions (groupName, choiceId, choiceName, price, optionType; menüde karşılığı bulunamazsa unresolved: true).
chargesobjectserviceFee, tip, discount, couponCode.
deliveryProviderstringTeslimatı yapan: self ya da dış kurye firması kodu (3pl: önekli).
prepobjectminutes, estimated, readyAt. Sipariş kabul edilmeden gelir: estimated: true süre tahmindir; kabulle birlikte süre kesinleşir ve readyAt dolar.
preferencesobjectdoNotKnock, dropOffAtDoor, noCutlery.
Çarşı (vertical: store)
AlanTipAçıklama
items[]arrayclientReferenceId, sku, barcode, name, quantity, unitPrice, total, substitutionPreference (ask, similar, cancel) ve pick (status, pickedQuantity, substituteName, refundAmount).
taxTotalnumberKDV toplamı.
pickingobjectToplama özeti: total, counts, unresolved, completed. dispatch eylemi completed: true olmasını bekler.
returnLinesarray | nullYalnız dönüş onayı bekleyen (teslim edilemedi olarak iptal edilmiş) siparişte dolu; diğerlerinde null. Satırlar POST /orders/{id}/return isteğinin girdisidir.

Kalemleri ürünlerinize eşleme

Kalemleri ada göre değil kimliğe göre eşleyin. Restoranda items[].id, GET /menu yanıtındaki ürün id değeridir; seçeneklerde selectedOptions[].choiceId, menüdeki modifierGroups[].choices[].id değeridir (Menü ve Ürün Eşleme). Çarşı işletmesinde eşleme anahtarı clientReferenceId değeridir; ürünü sizin gönderdiğiniz kimlikle eşleyin (Katalog).

Ödeme: kapıda alınacak tutar

Tahsilat bilgisi siparişin içindedir ve iki dikeyde aynıdır. Kasiyerin kapıda para alıp almayacağını channel ve dueAmount söyler.

JSON
"payment": {
  "channel": "door",           // door = kapıda alınır · online = platform üzerinden ödendi
  "instrument": "bank_card",   // cash | bank_card | meal_card
  "method": "pos_merchant",
  "dueAmount": 250             // kapıda alınacak tutar
}

dueAmount, kapıda alınacak tutardır. channel online ise ya da sipariş iptal edilmişse (teslim edilemedi dahil) 0 olur. Kapıda ödemede sipariş toplamıdır; Çarşı'da toplama bittikten sonra toplama eksiği düşülerek azalabilir. Toplama kapanmadan önce okunan tutar kesin değildir; toplama bittikten sonra siparişi yeniden okuyun.

Ödeme yöntemi kodları (method)
AlanTipAçıklama
cashdoor · cashNakit, kapıda
cardonline · bank_cardBanka ve kredi kartı, online
pos_merchantdoor · bank_cardBanka ve kredi kartı, kapıda
meal_card_door_multinetdoor · meal_cardYemek kartı (multinet), kapıda
meal_card_online_multinetonline · meal_cardYemek kartı (multinet), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_pluxeedoor · meal_cardYemek kartı (pluxee), kapıda
meal_card_online_pluxeeonline · meal_cardYemek kartı (pluxee), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_edenreddoor · meal_cardYemek kartı (edenred), kapıda
meal_card_online_edenredonline · meal_cardYemek kartı (edenred), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_setcarddoor · meal_cardYemek kartı (setcard), kapıda
meal_card_online_setcardonline · meal_cardYemek kartı (setcard), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_metropoldoor · meal_cardYemek kartı (metropol), kapıda
meal_card_online_metropolonline · meal_cardYemek kartı (metropol), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_tokenflexdoor · meal_cardYemek kartı (tokenflex), kapıda
meal_card_online_tokenflexonline · meal_cardYemek kartı (tokenflex), online. Etkin değil: hiçbir siparişte görünmez.
meal_card_door_iwalletdoor · meal_cardYemek kartı (iwallet), kapıda
meal_card_online_iwalletonline · meal_cardYemek kartı (iwallet), online. Etkin değil: hiçbir siparişte görünmez.

instrument yemek kartı yöntemlerinde meal_card olur. Online yemek kartı yöntemleri (meal_card_online_*) şu an etkin değildir. Küme bu sürüm için kapalıdır; tanımadığınız bir kodla karşılaşırsanız yok saymak yerine channel ve instrument alanlarına bakın.

Durum yazma

Siparişi kabul et (restoran)
curl -X POST "https://api.supergelsin.com/api/partner/v1/orders/cm_ornek_siparis/status" \
  -H "Authorization: Basic $(printf '%s:%s' "$API_KEY" "$API_SECRET" | base64)" \
  -H "X-Integrator: Ornek POS" \
  -H "X-Operator: kasiyer_01" \
  -H "Content-Type: application/json" \
  -d '{ "action": "accept", "prepMinutes": 25 }'
Eylemler ve hedef durum
AlanTipAçıklama
acceptpreparing | confirmedRestoranda preparing, Çarşı'da pending siparişi confirmed yapar. Sipariş Çarşı'da zaten confirmed ise aynı sonucu verir ve prepMinutes yok sayılır.
readyreadyRestoranda ready. Çarşı'da durum değişmez: toplama kapalıysa 200 döner, değilse 409 picking_incomplete.
dispatchon_the_wayÇarşı'da toplama kapanmadan yazılamaz; önce POST /orders/{id}/picking ile toplamayı kapatın.
deliverdeliveredTeslim edildi.
cancelcancelledreasonCode zorunlu; reason isteğe bağlı serbest açıklama (200 karaktere kırpılır).
Gövde alanları
AlanTipAçıklama
actionzorunluenumaccept, ready, dispatch, deliver, cancel. Başka değer 400 invalid_action döner.
prepMinutesintegerYalnız restoranda accept ile. Hazırlık süresi, 1–180 dakika; aksi hâlde 400 invalid_prep_minutes. Çarşı'da gönderilirse yok sayılır.
reasonCodeenumcancel için zorunlu; eksikse 400 reason_required, geçersizse 400 invalid_reason. Geçerli kodlar GET /cancel-reasons yanıtındadır.
occurredAtISO 8601Geçişin gerçekte olduğu an; kasa bağlantısı koptuğunda ya da bildirim kuyruğa alındığında kullanılır. Yalnız restoranda uygulanır; Çarşı'da gönderilirse uygulanmaz ve geçiş isteğin geldiği anda yazılır. Gelecekte (5 dakikadan fazla), sipariş açılışından ya da bir önceki aşamadan önce olamaz ve en fazla 24 saat geriye gidebilir; aksi hâlde 400 invalid_occurred_at döner ve reason nedeni verir.

Hedef durum zaten yürürlükteyse sonuç değişmez ve yanıt 200 döner; aynı istek tekrarlanabilir. Yanıt güncel sipariş gövdesidir. Geçersiz geçişte 409 invalid_transition döner; current siparişin durumunu, allowed bu durumdan yapılabilecek eylemleri verir.

Kasa yazılımının kendi yazdığı durum webhook olarak geri gönderilmez. Webhook ile gelen bir durumun yerel durumunuzdan geride olduğunu görürseniz yok sayın; emin olunamazsa GET /orders/{id} ile uzlaşın.

İptal ve iptal sebepleri

GET /cancel-reasons işletmenin dikeyine göre tüm iptal sebeplerini, kime atfedildiklerini (attributedTo), performansa etkisini (affectsPerformance), seçilebilir olup olmadığını (selectable) ve hangi sipariş durumlarında seçilebildiğini (allowedFrom) verir. cancel eyleminde yalnız selectable: true olan kodlar kullanılır. Liste sayfasızdır.

  • Teslim edilemedi sebepleri (customer_unreachable, invalid_address) yalnız sipariş on_the_way iken kabul edilir; yoldaki sipariş başka bir sebeple iptal edilemez.
  • Online ödenmiş siparişin iptali ödemeyi müşteriye iade eder. Teslim edilemedi sonucunda satışın nasıl kapandığı deliveryFailed.completedSale alanında yazar: restoranda true ise satış tamamlanmıştır, status cancelled olsa da kasada iptal edilmez ve online ödenmiş satış olarak kapatılır. Çarşı'da her zaman false; online ödemede tutarın tamamı müşteriye iade edilir.
  • Çarşı'da teslim edilemedi olarak iptal edilen siparişin dönüşü POST /orders/{id}/return ile onaylanır (Toplama ve Dönüş).

Kabul edilmeyen siparişin otomatik iptali

Kabul edilmeyen pending sipariş, işletmeye düşmesinden 12 dakika sonra acceptance_timeout sebebiyle otomatik iptal edilir; iki dikeyde de geçerlidir ve işletmenin performansına yazılır. Süre siparişin işletmeye düştüğü andan işler; online ödemede bu an ödemenin onaylandığı andır. accept bu süre dolmadan yazılmalıdır.

Çarşı'da ileri tarihli (planlı) sipariş otomatik iptal edilmez. Restoranda planlı sipariş de bu süre içinde kabul edilmelidir. Test siparişleri (isTest: true) otomatik iptal kapsamına girmez.

ÖncekiİşletmeSonrakiSipariş Durumları
Bu sayfada
  • Durum akışı
  • Sipariş listeleme ve okuma
  • Sipariş gövdesi
  • Kalemleri ürünlerinize eşleme
  • Ödeme: kapıda alınacak tutar
  • Durum yazma
  • İptal ve iptal sebepleri
  • Kabul edilmeyen siparişin otomatik iptali