Hatalar ve Limitler

Hata kodları, origin doğrulama, hız sınırı

Public API'nin hata gövdesi, durum kodları, hız sınırları ve boyut sınırları. Hangi isteğin neden reddedildiğini anlamak için önce Kimlik Doğrulama ve Erişim sayfasındaki sıraya, sonra buradaki tablolara bakın.

Hata gövdesi

Hata yanıtları bir JSON nesnesidir:

{
  "statusCode": 400,
  "timestamp": "2026-10-09T09:12:00.000Z",
  "path": "/api/v1/public/sites/SITE_KEY/events/batch",
  "method": "POST",
  "message": "Validation failed",
  "errors": ["events.0.name: name must be a string"]
}
AlanAnlamı
statusCode, timestamp, path, methodHer hatada vardır
messageİnsan için İngilizce cümle. Programınız bunun metnine bakmamalı
codeYalnızca kodlu hatalarda: kararlı, SCREAMING_SNAKE bir ad (MODULE_NOT_ENTITLED, SITE_NOT_VERIFIED, VALUE_TOO_LONG). Programınız bu alana bakmalı
paramsKodlu hatada cümlenin değerleri ({ "siteKey": "..." })
errors[]Yalnızca doğrulama hatasında: alan.yolu: neden biçiminde satırlar

Sunucu hatası (5xx) hiçbir iç ayrıntı taşımaz.

Durum kodları

KodNe zamanYeniden dene
200, 201Başarı; POST uçları 201 döner. Ama analitik uçlar success: false ile de başarı kodu dönebilir; gövdeye bakınHayır
304Yalnızca SSR ucu: If-None-Match eşleştiHayır
400İstek geçersiz: gövde doğrulaması, zorunlu alan eksik, bilinmeyen alan, sınırı aşan değerHayır; düzeltin
401x-selwise-api-key başlığı hiç gönderilmedi (SSR ve izin uçları)Hayır
402Hesabın sözleşmesinde bu modül yok (MODULE_NOT_ENTITLED). Panelde ilgili ekran da görünmezHayır; hesap yöneticinizle konuşun
403Kanal doğrulanmamış, alan adı yetkisiz, API anahtarı geçersiz ya da kapsamı yetersiz (BUSINESS_EVENTS_SCOPE_REQUIRED: iş olayı mobil anahtarla geldi ve geçiş süresi bitti), hesap teslimatı kapalı, ya da kanal imzalı kimliği zorunlu kılmışken traits imzasız bir tarayıcıdan geldi (IDENTITY_NOT_VERIFIED)Hayır
404Site anahtarı bilinmiyor, ya da bir kayıt yok (örneğin SITE_USER_NOT_IDENTIFIED, FEED_TOKEN_INVALID)Hayır
409Durum çakışması (FEED_SYNC_IN_PROGRESS: aynı besleme için bir senkronizasyon sürüyor)Evet, bir süre sonra
413Gövde sınırı aşıldı (aşağıda)Hayır; küçültün
429Hız sınırı. IDENTIFY_LIMIT ise bir tarayıcı bir günde çok sayıda farklı müşteri numarasıyla tanıtıldı; ertesi gün açılırEvet, Retry-After kadar sonra (IDENTIFY_LIMIT hariç)
503Veritabanı bağlantı havuzu dolu (DB_POOL_EXHAUSTED) ya da bakım penceresiEvet
504İstek 30 saniyede tamamlanamadıEvet, küçülterek

5xx ve 429 geçici sayılır; bir istemci bunları üstel geri çekilmeyle (ör. 1, 2, 4 saniye, en çok birkaç deneme) yeniden denemelidir. 4xx yeniden denemekle düzelmez.

Bilinmeyen alan 400 verir

Sunucu, gövdesini sınıfla doğruladığı uçlarda tanımadığı alanı reddeder; sessizce yok saymaz.

Alan adını yanlış yazmak tüm isteği düşürür

productItemCode yerine product_code yazmak, events/batch içindeki tek bir olayda bile tüm batch'i 400 yapar. Hata mesajı hangi alanın sorunlu olduğunu söyler (events.2.product_code: property product_code should not exist).

UçGövde doğrulaması
events/batch, users/identify, users/traits, newsletter, contacts/consent, business-events, scenarios/inbox ve inbox/ack, product-metrics/batch, push/subscribe, experiments/track, segments/evaluateSınıfla doğrulanır; bilinmeyen alan 400. Sorgu parametreleri sınıfla doğrulanan uçlar da (product-metrics, scenarios/inbox) bilinmeyen parametreyi reddeder
ordersDoğrulanmaz; bilinmeyen alan yok sayılır (yalnızca id alanı 400)
consentSınıfla doğrulanır: categories zorunlu, bilinmeyen üst alan 400
search/log, search/click, search/zero-results, recommendations/*Doğrulanmaz; eksik zorunlu alan 400 ya da 500 olabilir, bilinmeyen alan yok sayılır

Yazmadan denemek: dry-run

Yazma uçlarının çoğu x-selwise-dry-run: 1 başlığını tanır: istek gerçek çağrıyla aynı kimlik doğrulamasından ve gövde doğrulamasından geçer, ama işlem çalıştırılmaz. Hiçbir kayıt yazılmaz, olay kaydedilmez, senaryo kuyruğuna bir şey girmez. Yanıt, ucun kendi başarı koduyla ve şu gövdeyle döner:

{ "dryRun": true, "valid": true, "message": "…", "request": { "orderId": "ORDER_12345" } }

Geçersiz bir istek ise gerçek çağrıdaki hatayı alır (400 ve errors[], 403, 404 ...). Entegrasyonunuzu canlı veriye dokunmadan denemek, CI'da sözleşmeyi doğrulamak ya da dokümandaki Dene paneli için kullanılır. Bir ucun dry-run destekleyip desteklemediği o ucun kutusunda yazar; desteklemeyen bir uca bu başlıkla istek atarsanız 400 (kod DRY_RUN_UNSUPPORTED) alırsınız ve istek çalıştırılmaz.

Hız sınırları

Sınırlar dakika başına, IP başına ve uç başına sayılır: bir ucun kovası, aynı IP'nin başka bir uca yaptığı isteklerle paylaşılmaz. Aşağıdakiler varsayılan değerlerdir.

UçSınır
config, events/batch, product-facts1000 istek
events/batch (ek)Ziyaretçi (ya da oturum) başına 120, aynı kanalda bir IP için 1200
ssr/enrichmentsAPI anahtarı başına 6000 (IP değil)
business-events300
experiments/track, segments/evaluate120
experiments/assign, scenarios/inbox, scenarios/inbox/ack, push/subscribe, push/unsubscribe, unsubscribe60
newsletter20
messaging/.../events (sağlayıcı webhook'u), orders, orders/:orderId/status600
identify, traits, consent, search/log, search/click, search/zero-results, recommendations/track/*Sınırsız: veri kaybı olmasın diye. Tek istisna: identify aynı tarayıcıdan (visitorId) günde en fazla 5 farklı müşteri numarası kabul eder, fazlası 429 ve IDENTIFY_LIMIT alır. İmzalı çağrı (İmzalı Kimlik) bu sınıra takılmaz
Diğer her uç (tracking-config, integrations, campaigns, scripts, search, search-config, search/suggestions, recommendations, recommendations/:id/products, product-metrics/*, enrichments, app/enrichments, metrics, contacts/consent, feeds/:token)100

Yanıtlar X-RateLimit-Limit ve X-RateLimit-Remaining başlıklarını taşır. Aşıldığında 429 ve saniye cinsinden Retry-After döner. Gövde ucun sınırlayıcısına göre biraz farklıdır (ThrottlerException: Too Many Requests ya da { "error": "Too Many Requests", "retryAfter": 12 }); Retry-After başlığına güvenin.

SSR ucu bilerek anahtar başına sayılır: sizin sunucularınız bütün mağaza trafiğini birkaç adresten taşır, IP başına sayılsaydı paylaşılan kovayı saniyeler içinde tüketir ve widget'ınızı, olay akışınızı ve aramanızı da durdururdu.

429 alırsanız

SebepÇözüm
Olayları tek tek gönderiyorsunuzevents/batch ucunda 50-200 olayı tek istekte toplayın
Sunucudan arama, öneri ya da ürün sayısı çağrısıYanıtı kendi önbelleğinizde 1-5 dakika tutun; tek IP'den çıkan trafik tek kovaya yazılır
Döngü içinde siparişSiparişleri orderId ile tekilleştirip yayın
Hâlâ sınırdaHesap yöneticiniz ortamın sınırlarını yükseltebilir; kendi tarafınızda Retry-After kadar bekleyin

Widget bu sınırlara zaten uyar; sorun genellikle kendi yazdığınız sunucu tarafı entegrasyonlarda çıkar.

Boyut sınırları

SınırDeğerAşılırsa
JSON istek gövdesi (besleme hariç)Genel varsayılan 100 KB413 ve kod ENTITY_TOO_LARGE; mesaj sınırı söyler
Besleme gönderimi (her biçim, JSON dahil)50 MB413 ve kod FEED_BODY_TOO_LARGE
events/batch200 olay, olay başına 2 KB metadata400
contacts/consent500 kayıt400
product-metrics/batch50 ürün400
SSR yanıtı256 KB markupKural sınırında kesilir
Müşteri kimliği (siteUserId, externalId)64 karakter400 (kimliklendirmede), siparişte bağlantı düşer
Ürün kodu100 karakterZenginleştirmede boş yanıt, olaylarda kabul edilir ama eşleşmez

Zaman aşımı

İstekler 30 saniyede tamamlanmazsa 504 döner. Veri aktarımı gibi büyük işlemler kendi uçlarında daha uzun süre alır; satır içi gönderimde istek başına 1000 kayıt sınırı vardır, bkz. Veriyi Hazırlama.

Sunucu taraflı çağrılarda (özellikle SSR) kendi zaman aşımınızı kısa tutun: Sunucu Taraflı Render API.

localhost

Yerel geliştirme adresinden gelen Origin/Referer üretimde kabul edilmez. Bu kapatılamaz: kabul edilseydi herkes kendi makinesinden sizin sitenizin adına veri gönderebilirdi. Yerel geliştirme için ayrı bir test kanalı tanımlayın.

Sırada ne var

Son güncelleme: 23 Ekim 2026