Phase C: BPN does not yet standardize an Idempotency-Keyheader.
Merchants must use business fields below. Treat this table as a stable contract.
| Product | Key | Endpoint | Required? |
|---|---|---|---|
| Convert | merchantOrderId | POST /v1/stable/order/submit-order | Strongly required for integration |
| Wallet Withdraw | requestId | POST /v1/wallet/withdraw | Yes (fund safety) |
| Wallet Transfer | requestId | POST /v1/wallet/transfer | Recommended |
| VA Payout | requestId (exact VO name) | POST /v1/virtual-account/order/payout | Required |
| Payment Link v1 (non-core) | userOrderNo | collect create | Per API |
| Collect v2 (non-core) | requestId | accept / reject / usd-payout | Per API |
| Partner (separate OAS) | request_id / partner_order_id | /api/v1/* | Do not mix with merchant APIs |
processing: do not change the key; poll detail or wait for webhook.success / fail: do not retry the same key expecting a different outcome.| Type | Rule |
|---|---|
| Amounts | Decimal string (e.g. "100.50"), never JSON float |
| Timestamps | Epoch milliseconds integer |
requestId | UUID recommended |