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ı/Referans

Hata Kodları ve Sorun Giderme

HTTP kodları, hata sözlüğü, tekrar deneme kuralları ve sık karşılaşılanlar.

Hata gövdesi

Hatalar application/problem+json olarak döner. Makine error alanını okur, message insan içindir (Türkçe); koda göre dallanın, metne göre değil. Her hata gövdesi ayrıca requestId taşır (X-Request-Id başlığıyla aynı değer): destek talebinde bu değeri iletin. Uca özgü ek alanlar (field, reason, current, allowed, accepted, maxItems, maxLength) gövdenin başında yer alır.

JSON
{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "error": "too_many",
  "message": "Bir istekte en fazla 1000 kalem gönderilebilir.",
  "requestId": "6f1c2d3e-0000-4000-8000-000000000000",
  "maxItems": 1000
}

HTTP kodları

AlanTipAçıklama
200işlendiToplu uçlarda ve talep yanıtında kalem sonuçlarını da kontrol edin; 200 "hepsi başarılı" demek değildir.
201oluşturulduPOST /orders/test döner.
202kuyruğa alındıÇarşı toplu yazmaları. Sonuç bu yanıtta değil, GET /batches/{id} ucunda.
304değişmediMenüde If-None-Match eşleşti; elinizdeki kopyayı kullanın.
400geçersiz istekDüzeltmeden aynı sonucu alırsınız; tekrar denemeyin.
401kimlikKimlik doğrulanamadı ya da anahtar bu ortama ait değil.
403başlıkX-Integrator başlığı her istekte zorunludur.
404bulunamadıKayıt yok ya da bu işletmeye ait değil; ya da uç bu işletmenin dikeyinde yok (not_available_for_vertical). error alanı ayırır.
405yöntemDesteklenmeyen yöntem. Bu yanıt çerçeve tarafından üretilir ve problem+json gövdesi taşımaz.
409çakışmaGeçersiz durum geçişi ya da toplama kapanmamış. Yanıttaki allowed ve current alanlarına bakın.
413çok büyükGövde 1 MB sınırını aştı; PUT /webhook için sınır 16 KB.
422işlenemediidempotency_key_reuse: aynı anahtar başka bir işlem ya da farklı bir gövdeyle kullanıldı.
429hız sınırıRetry-After kadar bekleyin; reason sınırın hangisi olduğunu söyler.
5xxgeçiciÜstel backoff ile tekrar deneyin. 500 internal yanıtındaki requestId ile destek talebi açılır.

Hata sözlüğü

Aşağıdaki tablolar OpenAPI belgesindeki Hata, TopluIsSonucu ve ToplamaSonucu şemalarının açıklamalarından okunur; belgeyle aynı kaynaktır. — iletinin duruma göre değiştiğini ya da boş olduğunu söyler.

İstek hataları

KodDurumİletiAçıklama
invalid_json400Gövde geçerli JSON olmalı.Gövde ayrıştırılamadı.
invalid_body400Geçersiz istek.Gövde şemaya uymuyor; field hatalı alanı gösterir.
invalid_body400name 2–80 karakter olmalı.Kurye gövdesi; field: name.
invalid_body400phone 10–15 rakam olmalı (isteğe bağlı + ile).Kurye gövdesi; field: phone.
invalid_body400externalId en çok 64 karakter.Kurye gövdesi; field: externalId.
invalid_body400latitude -90..90 arası sayı olmalı.Kurye konumu; field: latitude.
invalid_body400longitude -180..180 arası sayı olmalı.Kurye konumu; field: longitude.
invalid_body400heading 0..359 arası sayı olmalı.Kurye konumu; field: heading.
invalid_body400recordedAt ISO 8601 olmalı.Kurye konumu; field: recordedAt.
invalid_query400{ad} {min} ile {max} arasında bir tam sayı olmalı.Sayı sorgu parametresi; field parametreyi gösterir.
invalid_query400{ad} ISO 8601 biçiminde bir zaman olmalı.Zaman sorgu parametresi.
invalid_query400status şu değerlerden biri olmalı: {liste}.GET /orders; allowed izin verilen durumları listeler.
payload_too_large413İstek çok büyük.Gövde tavanı 1 MB; PUT /webhook için 16 KB.
integrator_header_required403X-Integrator başlığı zorunludur: 1–30 karakter; Türkçe karakter içermeyen harf, rakam ve boşluk.Kimlik doğrulamasından önce reddedilir.
invalid_operator400X-Operator en çok 64 karakter olabilir ve yalnız harf, rakam ile . _ : - içerir; e-posta adresi gönderilmez.Kimlik doğrulamasından önce reddedilir.
unauthorized401Kimlik doğrulanamadı.Anahtar ya da parola geçersiz, anahtar kapalı ya da işletme bağı kopmuş.
environment_mismatch401—Anahtar bu ortama ait değil; ileti doğru ortamın adresini verir.
too_many_requests429İstek sınırı aşıldı. Retry-After başlığındaki süre dolunca yeniden deneyin.reason sınırın türünü söyler.
not_available_for_vertical404Bu uç yalnız Çarşı işletmelerinde var.Restoran anahtarıyla Çarşı ucuna istek.
not_available_for_vertical404Bu uç yalnız restoran işletmelerinde var.Çarşı anahtarıyla restoran ucuna istek.
not_found404Kayıt bulunamadı.Kayıt yok ya da bu işletmeye ait değil.
not_found404Toplu iş bulunamadı ya da saklama süresi doldu.GET /batches/{id}.
not_found404Sipariş bulunamadı.POST /orders/{id}/return.
not_found404Restoran bulunamadı.PUT /merchant/working-hours, restoran.
not_found404—PUT /merchant/working-hours, Çarşı; ileti boştur.
not_found404Restoran sahibi bulunamadı.POST /disputes/{id}/respond, restoran.
not_found404Dükkân sahibi bulunamadı.POST /disputes/{id}/respond, Çarşı.
internal500İşlem tamamlanamadı. Lütfen tekrar deneyin.requestId ile destek talebi açılır.
bad_request400invoiceNumber veya invoiceUrl gerekli.PUT /orders/{id}/invoice.
bad_request400invoiceUrl https:// ile başlamalı.PUT /orders/{id}/invoice.
bad_request400—GET /reviews; replyStatus none, pending, approved ya da rejected olmalı, ileti değerleri sıralar.
bad_request400Geçersiz gün: "{gün}". Kabul edilenler: mon, tue, wed, thu, fri, sat, sun.PUT /merchant/working-hours.
bad_request400"{gün}" için saatler "HH:MM" biçiminde olmalı (ör. 09:00).PUT /merchant/working-hours.
bad_request400"{gün}" için açılış ve kapanış aynı olamaz.PUT /merchant/working-hours.
invalid_status400Çarşı işletmesinde durum yalnız open ya da closed olabilir.PUT /merchant/status, Çarşı; accepted kabul edilen değerleri verir.
setup_incomplete400—Restoranın kurulumu tamamlanmadığı için açılamadı; ileti eksiği söyler.
invalid_action400action şu değerlerden biri olmalı: accept, ready, dispatch, deliver, cancel.accepted kabul edilen değerleri verir.
reason_required400cancel için reasonCode zorunludur; geçerli kodlar GET /cancel-reasons yanıtındadır.cancel eylemi.
invalid_reason400Geçersiz iptal sebebi kodu.accepted işletmenin seçebildiği kodları verir.
invalid_prep_minutes400prepMinutes 1 ile 180 arasında bir tam sayı olmalı.Restoranda accept; accepted { min, max } verir.
invalid_occurred_at400occurredAt ISO 8601 olmalı; gelecekte, sipariş açılışından ya da bir önceki aşamadan önce olamaz; en fazla 24 saat geriye gidebilir.reason nedenini verir.
forbidden403—Durum geçiş kapısı eylemi bu kimlik için reddetti.
invalid_transition409{eylem} eylemi {durum} durumundaki siparişte yapılamaz.current ve allowed alanları. Yarış durumunda ileti güncel durumu söyler.
picking_incomplete409Toplama kapanmadan sipariş yola çıkarılamaz. Önce POST /orders/{id}/picking ile toplamayı kapatın.Çarşı; toplama kapanışında kalem sonucu eksikse ileti eksik sayısını söyler.
order_closed409Sipariş '{durum}' durumunda; kurye yazılamaz.PUT /orders/{id}/courier; current durumu verir.
order_closed409Sipariş '{durum}' durumunda; konum yazılamaz.PUT /orders/{id}/courier/location; current durumu verir.
courier_not_set409Önce PUT …/courier ile kuryeyi bildirin.PUT /orders/{id}/courier/location.
dispute_closed409Talep için yanıt süresi doldu ya da talep zaten yanıtlandı.POST /disputes/{id}/respond.
refund_cap_exceeded409İade tutarı bu talep için izin verilen üst sınırı aşıyor.POST /disputes/{id}/respond.
conflict409—Talep başka bir işlemle aynı anda değişti; ileti durumu söyler.
too_long400Yanıt en fazla 1000 karakter olabilir.POST /reviews/{id}/reply; maxLength sınırı verir.
coupon_reward_wording400Yanıt, kuponu değerlendirmenin karşılığı gibi sunamaz. Kupondan söz edebilirsiniz; ancak kuponu yorumun içeriğine ya da puanına bağlamayın, değerlendirmenin değiştirilmesi veya silinmesi koşuluna bağlamayın ve değerlendirme karşılığında kupon vaat etmeyin.POST /reviews/{id}/reply.
not_published409Yalnız yayımlanmış yoruma yanıt verilebilir.current yorumun durumunu verir.
invalid_webhook_url400Webhook adresi kabul edilmedi: {neden}PUT /webhook.
webhook_not_configured409Önce PUT /webhook ile adres tanımlayın.POST /webhook/test.
no_menu_items409Restoranın aktif (satışa açık) menü ürünü yok — test siparişi gerçek menü kalemlerinden üretilir.POST /orders/test, restoran.
no_inventory409Dükkânda satışa açık ürün yok — önce katalog aktarın.POST /orders/test, Çarşı.
too_many_items400Tek istekte en fazla 100 kalem gönderilebilir (gönderilen: {n}).Menü yazım uçları.
empty400En az bir kalem gönderilmeli.Toplu yazma uçları; maxItems sınırı verir.
too_many400Bir istekte en fazla 1000 kalem gönderilebilir.Toplu yazma uçları; maxItems sınırı verir.
idempotency_key_reuse422Bu Idempotency-Key başka bir işlem ya da farklı bir gövdeyle kullanıldı.Toplu yazma uçları.
nothing_found409Hiçbir ürün bulunamadı. Toplama tamamlanamaz; siparişi 'Tedarik yok' sebebiyle iptal edin (müşteriye tam iade yapılır).POST /orders/{id}/picking, kapanışta.
exceeds_band409—Toplama sonucu sipariş tutarını aşıyor; ileti tutarları söyler.
invalid_lines400Dönüş satırları siparişle uyuşmuyor; her ürün için dönen adet ve dönmeyen adedin sebebi gerekli.POST /orders/{id}/return.
not_cancelled409Bu sipariş iptal edilmemiş.POST /orders/{id}/return.
not_failed_delivery409Bu sipariş teslim edilemedi olarak kapatılmamış.POST /orders/{id}/return.
already_confirmed409Bu siparişin dönüşü zaten onaylanmış.POST /orders/{id}/return.

Çarşı toplu iş: kalem hataları, bekleyenler ve uyarılar

errors[].errorCode, pending[].pendingReason ve warnings[].code değerleri; alan sütunu hangi diziden geldiğini söyler. Koda göre dallanın.

KodDiziİletiAçıklama
invalid_nameerrorsname zorunlu ve boş olamaz.POST /products.
invalid_priceerrorsprice sıfırdan büyük bir SAYI olmalı (dizge kabul edilmez).Üst sınır ve yuvarlama kuralı fiyat kapısındandır; ileti sınırı söyler.
invalid_barcodeerrorsbarcode 8-14 rakam olmalı. Barkodsuz ürün için sku kullanın.POST /products.
invalid_barcodeerrorsbarcode 8-14 rakam olmalı.Fiyat-stok ve durum uçları.
invalid_stockerrorsstock negatif olmayan bir TAM SAYI olmalı.Ekleme ve fiyat-stok uçları.
missing_identityerrorsbarcode ya da sku zorunlu — kalıcı kimlik olmadan aynı ürün her gönderimde yeniden yaratılır.POST /products.
missing_identityerrorsbarcode, sku ya da clientReferenceId alanlarından en az biri zorunlu.Fiyat-stok ve durum uçları.
invalid_referenceerrorsclientReferenceId en çok 64 karakter olabilir ve yalnız harf, rakam, _ ve - içerir.POST /products.
invalid_categoryerrorscategoryId, GET /categories yanıtında leaf: true olan bir kategori olmalı.POST /products.
duplicate_referenceerrorsBu clientReferenceId dükkânda başka bir üründe kullanılıyor.POST /products.
ambiguous_identityerrorsbarcode, sku ve clientReferenceId farklı ürünleri gösteriyor; tek ürünü gösteren kimlik gönderin.Fiyat-stok ve durum uçları; gönderilen anahtarlar farklı ürünleri gösteriyor.
ambiguous_identityerrors{alan} dükkânda birden çok ürüne uyuyor; tek ürünü gösteren bir kimlik gönderin.Fiyat-stok ve durum uçları; tek anahtar birden çok ürüne uyuyor.
tax_rate_requirederrorstaxRate zorunludur; ürünün KDV oranını işletme belirler (izin verilen oranlar: 1, 10, 20).POST /products.
invalid_tax_rateerrorstaxRate şunlardan biri olmalı: 1, 10, 20.POST /products.
already_existserrorsÜrün bu dükkânda zaten kayıtlı; fiyat ve stok için PUT /products/price-and-stock kullanın.POST /products; bu uç oluşturur, güncellemez. Fiyat ve stok PUT /products/price-and-stock, satış durumu PUT /products/status ile değişir.
not_founderrorsBu dükkânda böyle bir ürün yok. Yeni ürün için POST /products kullanın.Fiyat-stok ve durum uçları.
empty_updateerrorsprice ya da stock alanlarından en az biri gönderilmeli.Fiyat-stok ucu.
invalid_statuserrorsonSale alanı true ya da false olmalı.Durum ucu.
invalid_reasonerrors—Durum ucu; onSale: false iken reason kapalı listeden olmalı. İleti geçerli sebepleri sıralar.
update_failederrors—Fiyat-stok ve durum uçları; kalem yazılamadı, ileti hatayı kısaltarak söyler.
ingest_failederrors—POST /products; kalem yazılamadı, ileti hatayı kısaltarak söyler.
rejectederrors—POST /products; kalem kabul edilmedi.
new_master_reviewpending—Yeni ürün kaydı incelemede.
missing_attributepending—Kategorinin zorunlu niteliği eksik; ürün kaydedildi ama satışa çıkmadı.
restricted_productpending—Ürün yasaklı ürün şüphesiyle incelemede.
image_ignoredwarningsGörsel adresi kabul edilmedi; ürün görseli işletme panelinden yüklenir.POST /products; kalem yazıldı.

Toplama: kalem sonuçları

POST /orders/{id}/picking yanıtındaki results[].error değerleri. Kapanışta dönen 409 kodları (picking_incomplete, nothing_found, exceeds_band) yukarıdaki istek hataları tablosundadır.

KodDiziİletiAçıklama
order_not_pickableresults—Sipariş toplanabilir durumda değil.
picking_closedresultsToplama tamamlandı; kalem değiştirilemez.Toplama kapandı.
not_foundresultsKalem bulunamadı.clientReferenceId siparişte yok.
invalid_weightresults—Gram tam sayı ve sıfırdan büyük olmalı.
weight_above_bandresults—Tartı kabul edilen aralığın üstünde.
weight_below_bandresults—Tartı kabul edilen aralığın altında.
not_weighableresultsBu kalem tartılı değil — kısmi ADET gir.Tartılı olmayan kalemde gram.
partial_not_shortresults—Kısmi tartı beklenenden az olmalı.
note_requiredresults—Kısmi tartıda not zorunlu.
invalid_quantityresults—Kısmi adet 1 ile sipariş adedi arasında olmalı.
substitution_not_allowedresults—Müşteri bu üründe ikame istemedi.
approval_requiredresults—Müşteri onayı gerekli; customerApproved ile işaretlenir.
substitute_requiredresultsİkame ürünü seçilmedi.substituted için substituteClientReferenceId.
substitute_not_foundresultsİkame ürün bu markette bulunamadı.İkame ürün dükkânda yok.
order_changedresults—Sipariş toplama sırasında değişti; yeniden okunur.
Restoran menü kalem sonuçları (status)
AlanTipAçıklama
appliedstatusUygulandı, canlıda.
pending_reviewstatusKabul edildi ama incelemede; eşik üstü fiyat artışında canlı fiyat değişmez, şüpheli üründe ürün onaylanana kadar satışta görünmez. Kendi tarafınızda "beklemede" gösterin.
not_foundstatusBu işletmede böyle bir kayıt yok; menüyü tazeleyin.
invalidstatusDeğer geçersiz; message sebebi söyler. Düzeltmeden tekrar göndermeyin.

Tekrar deneme kuralları

Webhook teslimimizde uyguladığımız sınıflandırmanın aynısını siz de uygulayın:

  • Tekrar deneyin: 5xx, 408, 429, ağ hatası, zaman aşımı; üstel backoff ve rastgelelikle.
  • Tekrar denemeyin: diğer 4xx. Aynı istek aynı sonucu verir.
Kota servis grubu ve anahtar başına 10 saniyede 50 istektir; kalan bütçeniz kimlik doğrulamasına ulaşan her yanıtta RateLimit-Remaining ile gelir. Ayrıntı: Servis Limitleri.

Sık karşılaşılanlar

  • Her istekte 403 alıyorum. X-Integrator başlığı 1–30 karakter olmalı; Türkçe karakter içermeyen harf, rakam ve boşluk (örnek: Ornek POS).
  • Webhook imzam doğrulanmıyor. Sır whsec_ ile başlar; önekten sonrası base64 çözülüp ham bayt olarak kullanılmalıdır. Bkz. Webhook.
  • Sipariş kalemini ürünümle eşleyemiyorum. Ada göre değil kimliğe göre eşleyin: restoranda items[].id, Çarşı'da clientReferenceId. Bkz. Sipariş Yaşam Döngüsü.
  • Fiyat güncelledim ama menüde değişmedi. Kalem sonucu pending_review olabilir: eşik üstü zamlar incelemeye düşer ve canlı fiyat korunur.
  • Aynı siparişi iki kez aldım. Teslim en az bir kez yapılır. webhook-id ile tekilleştirin; sıra garantisi yoktur, gövdedeki order.status otoritedir (istisna: deliveryFailed.completedSale: true ise cancelled iptal değil, online ödenmiş satıştır).
  • Çarşı toplu işim tamamlandı ama ürünler görünmüyor. pending[] dizisine bakın: zorunlu niteliği eksik ürün yazılır ama satışa çıkmaz. Tekrar göndermek çözmez; eksik alanı tamamlayın.
ÖncekiSürümleme ve Hız SınırıSonrakiChangelog
Bu sayfada
  • Hata gövdesi
  • HTTP kodları
  • Hata sözlüğü
  • Tekrar deneme kuralları
  • Sık karşılaşılanlar