Geliştiriciyi etkileyen değişiklikler (yeni uçlar, hook'lar, scope'lar, yetenekler). Yalnızca canlıya alınmış/doğrulanmış özellikler listelenir; planlananlar 'Yakında' altında.
/changelog.xml (RSS 2.0; bot/izleme aracına ekle). AI ajanları için /llms.txt.set_listing: AI geliştirme akışında da aynı öneri verilebilir (display_name / description / icon_url; "" = öneriyi temizle). get_manifest mevcut öneriyi listing alanında gösterir.packet.cancelled: paket sipariş tam iptali. Önerilen scope: orders:read.table.created (canlı): dine-in masa açıldı (müşterisiz açılış; müşteri atanmış açılış packet.created sayılır). Masa taşıma/dönüşümde tetiklenmez. Scope: orders:read.customer.created / customer.updated (canlı): müşteri (CRM) oluşturma/güncelleme — PII, customers:read + consent ile dolu gelir.customers/list + customers/get (canlı): müşteri kataloğu (CRM/sadakat) — {id, region, name, phone, address, total} allowlist; PII consent gate; list cursor pagination (after/nextCursor, max 500). Scope customers:read./plugin-api/* artık doğru HTTP status döner — not-found 404, doğrulama 400, scope/sahiplik 403, çakışma 409 (eskiden hepsi 200). Gövde {success,message} uyumlu kaldı (Hata Kodları).{error, error_description} (invalid_client→401, invalid_grant→400…). Başarı değişmedi (Token Exchange).tables/update-orders + tables/update-payments — packets karşılıkları (full-replace). Kuver otomatik eklenir, timer ürünlü masalar desteklenmez, ödeme doğrulaması packets ile birebir. tableId'yi tables/open'dan al./plugin-api/* yanıtlarında X-RateLimit-Limit/Remaining/Reset; 429'da Retry-After (sn) — backoff yerine buna uy (Limitler).app.uninstalled GDPR sinyali); kayıt tombstone olarak kalır, geri alma taslağa döndürür.POST /plugin-api/packets/create — paket/sipariş oluştur (orders:write canlı). Fiyat sunucuda hesaplanır; idempotencyKey ile retry-güvenli.packet.status.update (statü geçişi öncesi — sahiplik damgalı) ve packet.close (hesap kapanışı öncesi — tenant-genel). Scope'lar: hooks:packet.status, hooks:packet.close.resolve/close + önerilen Desen B (iframe → kendi backend'in, session token ile).decision:"pending" + async resolve: packet.status.update gate'inde senkron pencereye (≤10 sn) sığmayan kararlar için geçişi askıya al → gate-resolve ucuyla sonra allow/deny ver.packets/create.callbackUrl: sahiplik damgası (packet.status.update gate'ini açar) + ileride statü bildirimi hedefi.id'sini tenant'ın gerçek yöntemlerine karşı doğrular (unknown_payment_method); önce payment-methods/list. İndirim satırları muaf.app.installed, subscription.activated/past_due/canceled, app.uninstalled — abone olmadan her bağlı kuruluma gelir.payment-methods/list, ingredients/list, categories/get.version string "1", entegrasyon string kanal kodu.skipped), 72sa sonra kalıcı durur; hacim cap'i aşımında dropped. Sinyaller: delivery.degraded/restored/disabled/throttled lifecycle webhook'ları (canlı).customer.redact (GDPR/KVKK): tenant müşteri silince zorunlu PII-silme webhook'u (PII scope'lu kurulumlara; critical, breaker/cap muaf).subscription.canceled.reason="plugin_now_free" (ücretsize geçişte erişim ücretsiz sürer — deprovision etme); ücretsize geçişte mevcut kurulumlar ücretsiz kalır (grandfather).POST /plugin-api/tables/create: dine-in masa açma — QR self-order / kiosk akışlarının giriş noktası (eklenti şimdiye dek yalnız personelin açtığı masayı güncelleyebiliyordu). Yeni scope/manifest alanı gerekmez: mevcut orders:write kapsar (tableId layout'tan geldiği için orders:read de gerekir). Açık masada 409, kuver otomatik, idempotencyKey ile retry-güvenli, table.created tetikler; kapatma yetkisi yok. Backend dağıtımıyla etkinleşir.fiscal.de (mali fişleme — Almanya/KassenSichV): katalogda açıldı; provides: [{ capability: "fiscal.de" }] beyan eden eklenti capability:fiscal.de:provide scope'unu otomatik alır ve kapanış gate'inde receiptExtras ile tse.* mali bloğunu fişe yazabilir (yalnız bu scope'la verified işaretlenir). Mali cihaz imzası artık e-fatura yeteneğinden (invoice.issue) ayrı: o GİB'e belge keser (asenkron), bu fişi TSE ile imzalar (senkron). Tüketici POST /capabilities/fiscal.de/invoke çağırır — tutarlar CENT integer, negatif izinli (storno), idempotencyKey zorunlu; sonuç accepted·signed·ausfall·failed (ausfall = TSE arızası, hata değildir). Asenkron durum event'i yoktur (/status → 404). Sözleşme: Mali Fişleme (fiscal.de).receiptExtras: table.close / packet.close allow yanıtında dönen öğeler kapanış yazılmadan önce adisyona işlenir → fişe basılabilir(KassenSichV/TSE mali bloğu, e-arşiv belge no, sadakat satırı). Karar ile veri aynı yanıtta — ikinci API çağrısı yok. Yeni scope/uç/manifest alanı gerekmez; tse.* namespace'i capability:invoice.issue:provide ile sahiplenilmiştir (yetkisiz key sessizce düşer, verified işareti almaz). Yalnız allow'da yazılır, key değiştirilemez, yazım hatası kararı bozmaz. Backend dağıtımıyla etkinleşir.packet.status_changed event'i: statü değişince sahip eklentiye async (imzalı) webhook bildirim — packets/create'teki callbackUrl'e (yoksa webhookUrl'e) düşecek. Şu an callbackUrl yalnız saklanır.