POST creates the order in AWAITING_APPROVAL; a subsequent PUT .../approve submits it to the PIX network. The pause between the two is where you implement dual-control, balance checks, or anti-fraud rules.
For other instrument types, see Instrument types. For the underlying state machine, see Payment lifecycle.
The flow
1
Generate an idempotencyKey for the operation
Tie it to the business intent — typically the payout id, prefixed unambiguously.Persist locally before the API call.
2
Pre-flight balance check
Outbound orders are denied if Compare
available < amount. Check first to fail fast.available.value to your intended amount. If insufficient, do not even attempt the create — surface the shortage to the operator.3
Create the order (AWAITING_APPROVAL)
201 Created with status: "AWAITING_APPROVAL". No money has moved yet — the wallet’s available is unchanged.4
Approve to submit (or cancel to drop)
To approve and submit:Response: Response:
200 OK with status: "PENDING". The PIX network is now processing. The wallet’s locked increases by the order amount.To cancel before submission:200 OK with status: "CANCELED". The order never reaches the PIX network. available and locked are unchanged.Both transitions require the order to be in AWAITING_APPROVAL — any other state returns PAYMENT_ORDER_NOT_AWAITING_APPROVAL (for approve) or PAYMENT_ORDER_INVALID_STATE (for cancel).5
Wait for settlement via webhook
On settlement:
locked decreases; amount decreases by the order amount.On failure (payment_order.failed event), locked decreases and amount is unchanged — funds are released:Dual control — common patterns
AWAITING_APPROVAL is the design hook for human or automated approval gates. Two common patterns:
Pattern A — operator review
Operators see allAWAITING_APPROVAL orders in a dashboard, click “approve” or “cancel” individually. Use this when each payment carries enough variance that human judgment is valuable.
Pattern B — automated rule engine
A separate service consumes new orders (via webhook onpayment_order.created), applies business rules (limits, anti-fraud, beneficiary checks), and calls approve or cancel automatically. Use this for high-volume, low-variance flows like payroll.
The benefit of separating create from approve: the approver service can use a different credential with stricter RBAC than the creator service. The first service can create payouts at scale; only the second can submit them.
Recipient resolution
ForPIX_CASH_OUT_KEY, the recipient account is resolved by the provider after submission. You do not need to know the bank or account number — just the PIX key. The resolved creditorAccount appears in the order response after settlement.
If the key cannot be resolved (recipient does not exist, key is malformed), the order finalizes as FAILED with errorCode: "RECIPIENT_INVALID". The funds are never debited from your wallet.
Cancel after approve
Once you callapprove, the order moves to PENDING and you can no longer cancel it. The order will reach a final state (SUCCESS or FAILED) on the PIX network’s timeline — typically seconds.
If you must reverse an outbound payment after it settled, you need a separate refund flow (request via the PIX network), not a cancel.
Reconciliation
Per outbound order, your local record should accumulate:
Match
payout-2026-0309 (your local id) to ord_4Lq... (BlooBank id) to E60746948... (PIX network id) — three layers of identity that collectively define the reconciliation chain.
Common errors
See Error catalog for the full list.
Next
Pix cash-in
The inbound counterpart.
Instrument types
KEY, EMV, ACCOUNT — when to use each.
Webhooks overview
Receiving lifecycle events.