Tüm yüzeylerdeki (Veri API, yazma ucu, hook'lar, aksiyon, webhook) dokümante hata mesajları tek yerde. Veri API hataları artık REST-uyumlu HTTP status döner (not-found 404, doğrulama 400, scope/sahiplik 403, çakışma 409, rate limit 429, auth 401); gövde { success:false, message } korunur (message = makine-okur kod). Her kodun anlamı ve çözümü aşağıda.
Hata zarfı
// Hata — REST-uyumlu HTTP status + zarf (message makine-okur koddur)
HTTP 404
{ "success": false, "message": "plugin.packets.notFound" }
// Başarı
HTTP 200
{ "success": true, "data": … }
SDK/istemci: 4xx'i hata olarak işle; message'a göre dallan (i18n anahtarı değil, sabit koddur). Eski davranış (her şey HTTP 200) kaldırıldı — gövde uyumlu kaldı.
Veri API (GET /plugin-api/*)
message
HTTP
Anlam / çözüm
plugin.scope.denied
403
Ucun istediği scope onaylı değil → manifest'e ekle, tenant yeniden onaylasın.
Boş olmayan kategori silinemez (önce ürünleri taşı/sil).
Duplicate request already in progress
409
Aynı idempotencyKey ile eşzamanlı 2. istek.
plugin.<kaynak>.notOwner
403
Yalnız kendi oluşturduğun katalog kaydını düzenler/silersin (sahiplik).
Table/Server not found
404
Masa kapanmış (tables yalnız açık masaları tutar) / geçersiz tenant.
callbackUrl must be under the same domain…
400
callbackUrl manifest webhookUrl'üyle aynı registered domain değil.
callbackUrl rejected: <sebep>
400
Güvenlik kontrolünden geçemedi (private IP / DNS).
Masa açma (tables/create) durum kodları:400 — tableId salon planında yok ya da masa pasif (masa layout'tan gelmeli; uydurulamaz) · 409 — masa zaten açık (mevcut adisyona dokunulmaz → kalem eklemek için tables/update-orders) ya da aynı idempotencyKey ile eşzamanlı istek. İş hatasında (400/404/409) idempotency anahtarı serbest bırakılır: isteği düzeltip aynı anahtarla tekrar denenebilir.
Hook'lar (gate çağrısı)
message
Anlam / çözüm
plugin.hook.notOwner
Paket sizin değil (yalnız packet.status.update'te — sahiplik damgası eşleşmedi).
plugin.hook.targetNotFound
Hedef (paket/masa) bulunamadı.
plugin.hook.missingTransition
Geçiş bağlamı eksik/geçersiz (panel hatası).
plugin.hook.notRegistered
Manifest'inizde bu hook yok.
plugin.hook.gateRequired
Gate yanıtı bekleniyor — iframe gate'i resolve/close ile sonuçlandırmadınız.
Tam kod plugin.<errorPrefix>.<suffix>; <errorPrefix> = capability id'nin İLK segmenti (plugin.messaging / plugin.notify / plugin.invoice). Ör. notify.staff için plugin.notify.noProvider (plugin.notify.staff.* DEĞİL).