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.
Her satır API referansındaki tam tanıma gider — alanlar, yanıt kodları ve deneme konsolu orada.
Durum akışı
pending→preparing→ready→on_the_way→delivered(çoğu durumdan cancelled)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
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.
| Alan | Tip | Açıklama |
|---|---|---|
limit | integer | Sayfa boyutu, 1–50; varsayılan 50. |
status | string | Virgü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. |
updatedSince | ISO 8601 | Saat 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. |
cursor | string | Önceki yanıttaki nextCursor değeri. Bozuk bir değer akışı baştan başlatır. |
- Varsayılan:
statusveupdatedSinceverilmezse yalnız aktif siparişler gelir (restorandapending,preparing,ready,on_the_way; Çarşı'dapending,confirmed,preparing,on_the_way). updatedSinceverilirse 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
updatedAtdeğerinden birkaç saniye geri verin ve tekrarlarıidileupdatedAtç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şlerdereturnLinesdolu 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
| Alan | Tip | Açıklama |
|---|---|---|
id · ref | string | ref, 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 · vertical | string | İşletme kimliği ve dikey (restaurant ya da store). |
isTest | boolean | true 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 · scheduledAt | ISO 8601 | updatedAt son değişiklik anıdır; updatedSince ve senkron içindir. scheduledAt ileri tarihli (planlı) siparişte dolu, değilse null. |
note | string | null | Müşteri notu. Müşteri penceresi dolunca düşer. |
subtotal · deliveryFee · total | number | Tutarlar. |
payment | object | Tahsilat bilgisi (aşağıda Ödeme). |
cancelReason · deliveryFailed | object | null | İptal edilmiş siparişte iptal nedeni; teslim edilemedi olarak kapanmış siparişte deliveryFailed (reasonCode, completedSale, at). |
invoice · courier · customer | object | Fatura 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.
| Alan | Tip | Açıklama |
|---|---|---|
type | enum | Teslimat türü: delivery, pickup. |
items[] | array | id (menüdeki ürün kimliği), name, quantity, unitPrice, options ve selectedOptions (groupName, choiceId, choiceName, price, optionType; menüde karşılığı bulunamazsa unresolved: true). |
charges | object | serviceFee, tip, discount, couponCode. |
deliveryProvider | string | Teslimatı yapan: self ya da dış kurye firması kodu (3pl: önekli). |
prep | object | minutes, estimated, readyAt. Sipariş kabul edilmeden gelir: estimated: true süre tahmindir; kabulle birlikte süre kesinleşir ve readyAt dolar. |
preferences | object | doNotKnock, dropOffAtDoor, noCutlery. |
| Alan | Tip | Açıklama |
|---|---|---|
items[] | array | clientReferenceId, sku, barcode, name, quantity, unitPrice, total, substitutionPreference (ask, similar, cancel) ve pick (status, pickedQuantity, substituteName, refundAmount). |
taxTotal | number | KDV toplamı. |
picking | object | Toplama özeti: total, counts, unresolved, completed. dispatch eylemi completed: true olmasını bekler. |
returnLines | array | null | Yalnı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.
"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.
| Alan | Tip | Açıklama |
|---|---|---|
cash | door · cash | Nakit, kapıda |
card | online · bank_card | Banka ve kredi kartı, online |
pos_merchant | door · bank_card | Banka ve kredi kartı, kapıda |
meal_card_door_multinet | door · meal_card | Yemek kartı (multinet), kapıda |
meal_card_online_multinet | online · meal_card | Yemek kartı (multinet), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_pluxee | door · meal_card | Yemek kartı (pluxee), kapıda |
meal_card_online_pluxee | online · meal_card | Yemek kartı (pluxee), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_edenred | door · meal_card | Yemek kartı (edenred), kapıda |
meal_card_online_edenred | online · meal_card | Yemek kartı (edenred), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_setcard | door · meal_card | Yemek kartı (setcard), kapıda |
meal_card_online_setcard | online · meal_card | Yemek kartı (setcard), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_metropol | door · meal_card | Yemek kartı (metropol), kapıda |
meal_card_online_metropol | online · meal_card | Yemek kartı (metropol), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_tokenflex | door · meal_card | Yemek kartı (tokenflex), kapıda |
meal_card_online_tokenflex | online · meal_card | Yemek kartı (tokenflex), online. Etkin değil: hiçbir siparişte görünmez. |
meal_card_door_iwallet | door · meal_card | Yemek kartı (iwallet), kapıda |
meal_card_online_iwallet | online · meal_card | Yemek 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
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 }'| Alan | Tip | Açıklama |
|---|---|---|
accept | preparing | confirmed | Restoranda preparing, Çarşı'da pending siparişi confirmed yapar. Sipariş Çarşı'da zaten confirmed ise aynı sonucu verir ve prepMinutes yok sayılır. |
ready | ready | Restoranda ready. Çarşı'da durum değişmez: toplama kapalıysa 200 döner, değilse 409 picking_incomplete. |
dispatch | on_the_way | Çarşı'da toplama kapanmadan yazılamaz; önce POST /orders/{id}/picking ile toplamayı kapatın. |
deliver | delivered | Teslim edildi. |
cancel | cancelled | reasonCode zorunlu; reason isteğe bağlı serbest açıklama (200 karaktere kırpılır). |
| Alan | Tip | Açıklama |
|---|---|---|
actionzorunlu | enum | accept, ready, dispatch, deliver, cancel. Başka değer 400 invalid_action döner. |
prepMinutes | integer | Yalnı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. |
reasonCode | enum | cancel için zorunlu; eksikse 400 reason_required, geçersizse 400 invalid_reason. Geçerli kodlar GET /cancel-reasons yanıtındadır. |
occurredAt | ISO 8601 | Geç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.
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_wayiken 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.completedSalealanında yazar: restorandatrueise satış tamamlanmıştır,statuscancelledolsa da kasada iptal edilmez ve online ödenmiş satış olarak kapatılır. Çarşı'da her zamanfalse; online ödemede tutarın tamamı müşteriye iade edilir. - Çarşı'da teslim edilemedi olarak iptal edilen siparişin dönüşü
POST /orders/{id}/returnile 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.