Issue a full refund for a completed payment intent. Only the merchant that received the payment can call this. The refund is published to the ledger as a refund transaction (debit merchant wallet, credit user wallet). Balance sync is asynchronous — the user’s wallet balance updates within seconds via the wallet.balance.updated NATS event. A refund can only be issued once per payment intent.
Keycloak JWT. Roles: admin (platform admin — can register merchants, act on behalf of any merchant), merchant (dashboard user — scoped to their own merchant_id via user attribute mapper), POS terminals use client credentials flow with merchant_id injected via protocol mapper.
Payment intent ID to refund