A consumer in Surabaya buys a smartphone on Pasar Sapa from a Jakarta merchant. Payment goes through GoPay, fulfilment through JNE. Each sector — Trade, Payment, Logistics — runs its own Beckn message exchange under terms ratified by ION, and the three contracts stitch together through one shared identifier: linkedContractId.
Same Trade and Logistics actors as before, plus GoPay as a separate Payment BPP. The Payment lane is what turns the off-network settlement from the Trade-only walk-through into a first-class on-network contract.
Eighteen phases. Trade in rust. Payment in moss. Logistics in teal. Status pushes in amber. The off-network QRIS authorize in muted grey. The three sectors don't block on each other — they're stitched together by one identifier.
Same shape as the Trade-only walk-through, plus a Payment publish. All three BPPs push their offerings; Pasar Sapa subscribes once and keeps a local index.
availability.status.
Quote and init shape the Trade contract enough to ask the Payment
sector for an instrument. The Trade /confirm waits
until after the payment is verifiable on-network.
/on_init returns a paymentRequest — amount, payee VPA, idempotency key — to be discharged via the Payment sector.
Three phases turn an off-network QRIS scan into an on-network
Payment contract that the auditor can read. The
/on_status [PAID] push carries the
NTPN reference so downstream contracts have proof.
/inits the chosen method; GoPay returns the QRIS string with an expiry and a paymentRef.linkedContractId to Trade. Andi scans, authorises off-network; GoPay pushes /on_status [PAID] with settlementId and NTPN. Then the Trade contract closes. Phase 08 is the original
Trade /confirm, now attaching
paymentReference = PAY/2026/0429/G7H8. Toko Elektronik
(PKP-registered) returns the Faktur Pajak reference and fulfilment
warehouse. Trade contract ACTIVE.
Same shape as Logistics in the Trade-only walk-through. Three
phases — select, init under the FWA, confirm with
linkedContractId pointing back at Trade.
logistics-fwa reference (Pasar Sapa × JNE 2026 Q2). The FWA's commercial envelope supersedes per-offer policies.linkedContractId = TRADE/2026/0429/A1F2. JNE returns an AWB; Logistics contract ACTIVE.Three phases of status events. Direct phone numbers stay off the wire — only proxied. The delivered photo closes both contracts; Andi gets a push.
DISPATCHED with the AWB. JNE collects from the warehouse and pushes PICKED_UP with proxy phone numbers./track session for live GPS, in addition to coarse status pushes.DELIVERED with delivery-proof photo. BAP relays via /update; Trade contract → COMPLETE.Trade reconciles per-contract with PPN and bukti potong. Logistics reconciles in monthly batches with FWA rebates. Payment reconciles its own economics — MDR, refund rate, auth-success rate — keeping payment health observable network-side.
/on_reconcile carries PPN remittance, platform fee, and bukti potong references.isBatch=true, applying FWA volume rebates and weight-dispute adjustments. One identifier, three sectors. The Payment and Logistics
contracts both attach linkedContractId pointing at the
Trade contract. That single field is what lets the BAP — or any
auditor — stitch TRADE/…/A1F2,
PAY/…/G7H8, and LOG/…/J7K9 into one
coherent transaction story.