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ı/Çarşı

Toplama ve Dönüş

Çarşı siparişinde ikame tercihi, toplama sonucu ve kapanışı, toplama kapısı, müşteri verisi ve teslim edilemeyen siparişin dönüşü.

Sipariş okuma, durum yazma, iptal ve ödeme iki dikeyde ortaktır ve Sipariş Yaşam Döngüsü sayfasındadır. Bu sayfadaki iki uç yalnız Çarşı işletmelerinde (vertical: store) vardır; restoran anahtarıyla çağrılırsa 404 not_available_for_vertical döner.

Bu sayfadaki uçlar

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

  • POST/orders/{id}/picking
  • POST/orders/{id}/return

İkame tercihi (kalem başına)

Markette ürün her zaman rafta olmaz. Müşteri tercihini sipariş anında kalem kalem belirtir; sipariş kaleminde substitutionPreference olarak gelir:

AlanTipAçıklama
askenumSor: benzerini bul ama müşteriden onay al.
similarenumBenzerini ver.
cancelenumİkame etme.

Toplayıcının hangi işlemi yapabileceğini bu alan belirler; kendi ekranınızda da aynı kısıtı uygulayın. İkame daha pahalıysa fark müşteriden tahsil edilmez; daha ucuzsa fark iade edilir.

Toplama sonucunu yazma

Kalem sonuçlarını bildirme
curl -X POST "https://api.supergelsin.com/api/partner/v1/orders/cm_ornek_siparis/picking" \
  -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 '{ "items": [
    { "clientReferenceId": "POS-1042", "status": "not_found" },
    { "clientReferenceId": "POS-1043", "status": "partial", "pickedQuantity": 2, "note": "Stokta 2 adet kaldı" },
    { "clientReferenceId": "POS-1044", "status": "substituted", "substituteClientReferenceId": "POS-2010", "customerApproved": true }
] }'
Yanıt (200)
{ "orderId": "cm_ornek_siparis", "applied": 3, "failed": 0, "completed": false,
  "results": [ { "clientReferenceId": "POS-1042", "ok": true, "refundAmount": 42.5 } ],
  "adjustmentTotal": 42.5 }

Kalem sonuçları ve kapanış tek istekte yazılır. Kalemler sırayla işlenir; bir kalemin reddi öbürlerini etkilemez, her kalemin sonucu results[] içindedir. İade tutarı sunucuda hesaplanır. İlk kalem sonucu yazıldığında confirmed sipariş preparing olur. Toplama yalnız confirmed ya da preparing siparişte yazılır.

İstek alanları
AlanTipAçıklama
items[]arrayİstek başına en çok 200 kalem. Her kalemde clientReferenceId (siparişteki items[].clientReferenceId) ve status (picked, partial, not_found, substituted) gerekir.
pickedQuantitynumberpartial için adet; 1 ile sipariş adedi arasında olmalıdır.
pickedWeightnumberTartılı ürün için gram; tam sayı ve sıfırdan büyük olmalıdır. Sipariş anında donmuş banda karşı sınanır: bandın üstü reddedilir; altında kalan gerçek bir eksik partial ile ve notla bildirilir.
substituteClientReferenceIdstringsubstituted için ikame ürünün clientReferenceId değeri.
customerApprovedbooleanMüşteri ikameyi onayladıysa true. Tercihi ask olan kalemde onay gerekir.
notestringSerbest not; kısmi tartıda zorunludur.

Kalem düzeyindeki ret kodları (order_not_pickable, picking_closed, invalid_weight, substitution_not_allowed, approval_required ve diğerleri) results[].error içinde döner; tam liste Hata Kodları sayfasındadır.

Toplamayı kapatma

Fiş görseli ve poşet adediyle kapatma
curl -X POST "https://api.supergelsin.com/api/partner/v1/orders/cm_ornek_siparis/picking" \
  -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 '{ "complete": true, "receiptUrl": "https://ornek-entegrator.example/fis/1044.jpg", "bagCount": 3 }'

complete: true toplamayı kapatır; yalnız items gönderen istek kapatmaz. items ya da complete: true alanlarından en az biri gerekir. receiptUrl ve bagCount yalnız complete: true ile gönderilir. Toplama kapandıktan sonra POST /orders/{id}/status ile dispatch yazılabilir.

Kapanış kuralları (409)
AlanTipAçıklama
picking_incomplete409Kapanışta her kalem bir sonuca bağlanmış olmalıdır; aksi hâlde döner ve ileti eksik sayısını söyler. Toplama kapanmadan dispatch yazılırsa ya da ready toplama kapalı değilken yazılırsa da aynı kod döner.
nothing_found409Hiçbir ürün bulunamadıysa toplama tamamlanamaz; siparişi out_of_stock sebebiyle iptal edin, müşteriye tam iade yapılır.
exceeds_band409Toplama sonucu sipariş tutarını aşıyor; ileti tutarları söyler.
  • Kapanış reddedilirse önceki kalem sonuçları geri alınmaz.
  • Tamamlanmış siparişe tekrar complete gönderilirse 200 ve completed: true döner; iade, defter ve bildirim yeniden çalışmaz. Tamamlanmış bir sipariş sonradan toplanamaz duruma geçerse (ör. iptal) complete tekrarı 409 picking_incomplete döner.
  • Fiş görseli ve poşet adedi yalnız kapanış başarılıysa yazılır. Fiş görseli dış bir https bağlantısından indirilip platform deposuna alınır (görsel, en fazla 8 MB). Fiş zaten kayıtlıysa yeniden yazılmaz ve receipt_already_saved uyarısı döner; yalnız bagCount gönderilen tekrar isteğinde poşet adedi de yazılmaz. Fiş görseli kopyalanamazsa kapanış durmaz, receipt_not_saved uyarısı döner.
  • Toplama eksiği kapıda tahsil edilecek tutardan düşer: adjustmentTotal yanıtta, payment.dueAmount sipariş gövdesinde güncellenir. Siparişi toplama sonrasında yeniden okuyun.

Müşteri verisi ve test siparişi

Çarşı siparişinde müşteri telefonu, enlem ve boylamı hiçbir zaman paylaşılmaz; customer.phone, latitude ve longitude her zaman null döner. Sipariş teslim edildikten ya da iptal edildikten 2 saat sonra müşteri bilgisi daraltılır: ad kısalır (Ayşe Y.), adres yalnız İlçe / İl olarak kalır ve müşterinin serbest notu note alanından düşer. customer.redacted daraltmanın yapıldığını, visibleUntil tam görünürlüğün bitiş anını söyler. Daraltılmış alanlar hata değildir; entegrasyonunuz bunlara hata vermemelidir. Bu veriyi kendi tarafınızda da süresiz saklamayın (KVKK m.4/2).

isTest: true, siparişin POST /orders/test ile açılmış bir test siparişi olduğunu gösterir. Test siparişi işletmenin toplama ekranına düşmez (toplama sonucu bu API ile yazılabilir); ciroya, komisyona ve hakedişe girmez.

Teslim edilemeyen siparişin dönüşü

Kurye müşteriye ulaşamaz ya da adres yanlışsa yoldaki sipariş yalnız customer_unreachable ya da invalid_address koduyla iptal edilir. Çarşı'da bu durumda online ödemede tutarın tamamı müşteriye iade edilir (deliveryFailed.completedSale her zaman false). Ürünler dükkâna dönünce dönüş kalem kalem onaylanır.

Dönüşü bekleyen siparişler
curl "https://api.supergelsin.com/api/partner/v1/orders?status=return_pending" \
  -H "Authorization: Basic $(printf '%s:%s' "$API_KEY" "$API_SECRET" | base64)" \
  -H "X-Integrator: Ornek POS" \
  -H "X-Operator: kasiyer_01"
Dönüşü onaylama
curl -X POST "https://api.supergelsin.com/api/partner/v1/orders/cm_ornek_siparis/return" \
  -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 '{ "lines": [{ "lineId": "cm_ornek_satir", "returnedQuantity": 1, "reason": "lost" }] }'

Bekleyen satırlar GET /orders/{id} yanıtındaki returnLines alanındadır (lineId, clientReferenceId, sku, barcode, name, quantity). Her satır tam bir kez gönderilir. Dönen adet stoğa eklenir; dönmeyen adet için reason (lost kayıp, damaged hasarlı) zorunludur ve sebep siparişin kaydına geçer. İki eşzamanlı onaydan yalnız biri uygulanır. Yanıt { orderId, restockedLines } biçimindedir.

Hatalar
AlanTipAçıklama
not_cancelled409Sipariş iptal edilmemiş.
not_failed_delivery409Sipariş teslim edilemedi olarak kapatılmamış.
already_confirmed409Siparişin dönüşü zaten onaylanmış.
invalid_lines400Dönüş satırları siparişle uyuşmuyor.
not_found404Sipariş bulunamadı. İleti: Sipariş bulunamadı.
ÖncekiKatalogSonrakiSürümleme ve Hız Sınırı
Bu sayfada
  • İkame tercihi (kalem başına)
  • Toplama sonucunu yazma
  • Toplamayı kapatma
  • Müşteri verisi ve test siparişi
  • Teslim edilemeyen siparişin dönüşü