Provider kinds
The manifest's provider block is a discriminated union on kind (exact fields in the manifest reference). Each kind has a closed platform-side interface; the interface IS the contract; there are no manifest-declared free-form actions.
payment (live)
methodId + settlement: card | cod | transfer. The platform owns the payment session state machine (attempts, 3DS continuation, finalize assertions, refunds as intent-first reservations); a card provider implements installments / initiate / finalize / handleWebhook / refund and only resolves or rejects sessions. methodFee (e.g. kapıda) and pendingOrder (expiry config key + a typed orderInstructions() block rendered in the order view, the confirmation mail and the sözleşme) are generic contracts; the platform never reads a provider's config shape directly. Webhooks: /v1/ext/{id}/wh/{token}/{storeId}; browser callbacks: /_mz/co/cb/{id}/{attemptId}.
shipping (live)
A checkout rate source via the checkout.shipping.rates hook with a hot-path contract (rates.timeoutMs, cacheTtlSeconds, onError). The first-party mozaik.flat-shipping is the auto-installed floor.
cargo (live)
Fulfillment after the order: createShipment / offers / acceptOffer / label / track / cancel / createReturn / registerWebhook / handleWebhook / senderAddressCreate. Typed op routes POST /v1/orders/{ord}/cargo/{offers|book|ship} and /cargo/{shp}/{track|cancel|update|label} are capability-gated by the manifest (rateShopping, tracking, labelFormats, senderProfile). Tracking webhooks are a *nudge*: the platform re-fetches with its own credentials before any state transition.
einvoice (kind defined; first extension at milestone EF1, after marketplace sync and third-party distribution)
Per-entegratör transmission (Nilvera first). The platform keeps GİB mükellef lookup, e-Fatura-vs-e-Arşiv routing and the invoice-at-fulfillment trigger UX. Rides the order-lifecycle events dispatcher (manifest events subscriptions are delivered today: at-least-once, per-(store, extension) cursor; handlers register in the platform's event-handler registry). Until EF1 ships, merchants issue invoices through their own entegratör or the GİB portal.
channel (substrate live at M9.0; first extension Trendyol at M9.1)
Marketplace sync. channelKey (≤24 chars) is the core channel token stamped on orders.channel, customers.channel and every stock_movements row; capabilities flags (orders, stock, price, catalogPush, catalogPull, claims, questions, finance, labels[], packageOps[], buybox, unlock, webhooks, testMode) derive the agent ops; egress: relay routes provider calls through the platform's fixed-IP relay while a store runs against an IP-allowlisted stage. The platform owns everything but the translation: the stock-ledger outbox (seq > cursor, absolute-quantity push, buffered per store/channel/listing, identical-payload resend suppression), the marketplace order path (order.import: one Mozaik order per marketplace order number, every package a shipment, paid and never refused for stock: an oversold line is flagged, never auto-declared unsuppliable), package state mirroring (channel.package.upsert), listings (channel.listing.set: enable, price/list overrides, price lock, buffer; the per-channel price is a core concept), channel-agnostic policy (settings.stock.update, settings.channel.update: four direction switches, price rule, disconnect and buyer-mail policy), per-(store, extension) cursors/budgets/jobs, and the webhook route (shared_secret verification; payloads are hints, truth is re-fetched). A channel extension may also contribute product fields (catalogFields → app.{vendor} metafields, never storefront-visible) and tabs on the Pazaryeri page (ui.channelTabs).
messaging (kind defined; M10)
SMS/e-mail transports. The İYS consent ledger stays core.
reporting (kind defined)
Report packs with CSV/XLSX exports.