Rate limit'ler, webhook teslim sınırları, senkron action/hook timeout'ları ve development store kotaları. DEV (test) ve PROD (canlı) değerleri FARKLIDIR — dev kasıtlı olarak sıkıdır (incelenmemiş kod platformu zorlamasın diye).
Rate limit'ler (per-install)
Uç
Yön
DEV (test)
PROD (canlı)
Aşılırsa
GET /plugin-api/*
eklenti → bize
5 / dk
120 / dk
429 plugin.rateLimited
POST /plugin-api/* (write)
eklenti → bize
20 / dk (ayrı write havuzu — okumadan bağımsız)
429 plugin.rateLimited
/plugins/action
bize → eklenti (senkron)
5 / dk
60 / dk
plugin.rateLimited
/plugins/hook
bize → eklenti (senkron)
5 / dk
60 / dk
plugin.rateLimited
Günlük cap (yalnız DEV)
Callback/action/hook
200 / gün
yok
429
DEV sıkıdır (test ortamı): manuel test için yeterlidir — otomatik/yük testi yapma. PROD'da limitler boldur.
429 alınca: hemen tekrar deneme — üstel backoff + jitter uygula; dev'de testleri ölçülü tetikle. Dev limitin gerçekten yetmiyorsa bize yaz.
Node — 429 retry deseni
// 429 → üstel backoff + jitter ile yeniden dene (genel desen)
async function callWithRetry(fn, maxAttempts = 5) {
for (let attempt = 1; ; attempt++) {
const res = await fn();
if (res.status !== 429 || attempt === maxAttempts) return res;
const base = Math.min(30_000, 1000 * 2 ** (attempt - 1)); // 1s, 2s, 4s, 8s… (max 30s)
const jitter = Math.random() * base * 0.3; // senkronize patlamayı kır
await new Promise((r) => setTimeout(r, base + jitter));
}
}
const res = await callWithRetry(() =>
fetch(BASE + '/plugin-api/products/list', { headers: { Authorization: 'Bearer ' + apiKey } }),
);
Webhook teslimi (event'ler + lifecycle)
Sınır
Değer
Timeout
10 sn / deneme (redirect takip edilmez)
Retry
max 6 deneme, artan aralıklı (1 sn → 1 saat); sonrasında teslim bırakılır
Beklenen yanıt
hızlı 2xx — ağır işi async yap (yoksa timeout → retry)
Endpoint'in hızlı + idempotent + imza-doğrulamalı olmalı. Yavaş/hatalı endpoint → retry → en sonunda teslim düşer. Bkz. /webhook alıcısı, imza şeması, lifecycle.
Senkron yanıt timeout'ları (action / hook)
Tür
Timeout
Geç dönersen
/plugins/action (UI buton)
8 sn (max 10)
plugin.action.timeout
/plugins/hook (before-action)
5 sn (max 10)
fail-closed (default) → işlem iptal
Bu sürede { success, message, level, display } dön. Detay: Action ucu · Hook'lar.
Liste yanıtları & cap'ler
Liste uçlarında sayfalama (cursor/offset) parametresi yoktur — her uç, tüm listeyi tek yanıtta, uca özel bir üst sınıra (cap) kadar döner:
Uç
Cap
Aşılırsa
products/list
2000
yanıt truncated işaretlenir + total döner
categories/list
500
—
users/get
200
—
Tam senkron için listeyi pollama — listeyi bir kez çek + cache'le, sonra event'lerle güncel tut (product.*, category.*, user.* oluşturma/güncelleme/silmede gelir).
Tekil kayıt için liste yerine */get?id= uçlarını kullan (API Genel Bakış).