Flows
Flows
Receive (swap order)
Typical sequence for accepting a crypto payment that settles to BRZ in your Ultra account:
GET /payment-methods— list enabled currency / blockchain pairs.POST /orders— create the order with yourexternalId(idempotent per partner).POST /orders/{orderId}/preview(optional) — indicative crypto amount only; not binding.POST /orders/{orderId}/payment— binding amount, deposit address / QR. PersisttradeIdwhen present (non-BRZ).GET /orders/{orderId}orGET /orders/by-external-id/{externalId}— poll status (see Statuses).
Idempotency: repeating POST /orders with the same externalId returns the existing order.
sequenceDiagram
participant Partner as Partner
participant Api as Partner_API
participant Buyer as Buyer
Partner->>Api: GET /payment-methods
Api-->>Partner: currencies and blockchains
Partner->>Api: POST /orders (externalId)
Api-->>Partner: orderId
opt Optional preview
Partner->>Api: POST /orders/{orderId}/preview
Api-->>Partner: estimatedCryptoAmount
end
Partner->>Api: POST /orders/{orderId}/payment
Api-->>Partner: QR, address, amount, tradeId?
Partner->>Buyer: Show QR / deposit address
Buyer->>Buyer: Pays crypto
loop Poll 5-10s until Paid
Partner->>Api: GET /orders/{orderId}
Api-->>Partner: payment.status
end
Note over Partner,Api: After Paid — webhook or slow poll,<br/>then GET until Settled
Partner->>Api: GET /orders/{orderId}
Api-->>Partner: settlement.status Settled
Withdraw (PIX out)
Withdrawals always go to your pre-configured PIX key (not supplied in the request body).
GET /balance— available Ultra BRZ.POST /withdrawals—amount+externalId(+ optionaldescription). Idempotent onexternalId.GET /withdrawals/{id}orGET /withdrawals/by-external-id/{externalId}— poll status.
sequenceDiagram
participant Partner as Partner
participant Api as Partner_API
Partner->>Api: GET /balance
Api-->>Partner: available BRZ
Partner->>Api: POST /withdrawals (amount, externalId)
Api-->>Partner: withdrawalId, status Pending
loop Until terminal status
Partner->>Api: GET /withdrawals/{id}
Api-->>Partner: status Pending|Processing|Completed|...
end
Note over Partner,Api: Prefer Ultra webhook,<br/>then reconcile with GET
Suggested client behaviour
- While the buyer is on the checkout screen, poll order status every 5–10 seconds until
payment.statusleavesAwaiting. - After payment, prefer Ultra webhooks (see Webhooks) and reconcile with a status GET; use slower polling only as a fallback.
- Prefer Postman (partner-api.postman_collection.json) for authenticated staging calls if browser Try-it-out hits CORS limits.
Updated about 22 hours ago
Did this page help you?