Overview
Converting assets with Crown API is a two-step process:- Create a quote between two assets to get exchange rates and pricing
- Create an order using the quote ID with additional information based on the asset types
Wallet addresses are required only for token assets (like
eth-base/brlv, eth-base/usdc). For fiat assets (fiat/brl), no wallet addresses are needed.Step 1: Create a Quote
First, request a quote specifying your source and target assets, along with either the source or target amount.Supported Conversions
BRL ↔ BRLV (same-currency conversions)fiat/brl→eth-base/brlveth-base/brlv→fiat/brlfiat/brl→tempo/brlvtempo/brlv→fiat/brl
fiat/brl→eth-base/usdceth-base/usdc→fiat/brl
FX conversions (BRL ↔ USDC) are subject to additional regulatory requirements. They require a
trade-reason on the quote request, and the corresponding wallets must be FX-whitelisted for the account.Request Examples
You can specify either
source-amount or target-amount in your quote request, but not both. The quote engine will calculate the other amount based on current exchange rates.FX Quotes: trade-reason
trade-reason is required only for FX quotes (BRL ↔ USDC), where it carries the SISBACEN classification mandated by the Central Bank of Brazil. It must be omitted for same-currency BRL ↔ BRLV quotes — those conversions are not FX trades and do not need a SISBACEN reason.
Valid values (FX quotes only):
purchase-or-sale-of-merchandisepurchase-or-sale-of-other-servicespurchase-or-sale-of-business-servicespurchase-or-sale-of-computing-servicestransfer-between-same-entity-accountsoffshore-loans-principaloffshore-loans-interestdonation-without-counter-paymentinternational-travelsother-transactions
trade-reason along with trade-reason-code, the corresponding regulatory code.
Quote Response
Quote responses include a full pricing breakdown so you can audit the all-in cost before placing an order:Step 2: Create an Order
Once you have a quote ID, create an order to execute the conversion. The required fields depend on your source and target asset types.Wallet Address Requirements
Wallets managed by Crown can be used immediately. To use a wallet that isn’t managed by Crown, you must first contact Crown’s support team to register it. Registration is per-operation:
- Minting BRLV to an external wallet requires that wallet to be registered for BRLV minting.
- FX orders that deliver USDC to an external wallet (BRL → USDC) require that wallet to be registered for FX operations.
target-end-user-pix-key (see Delivering BRL to a third party).
Delivering BRL to a third party
For USDC → BRL FX orders, you can have BRL delivered directly to a third-party recipient by settingtarget-end-user-pix-key. When this field is set, BRL is paid from Crown’s FX pool straight to that PIX key — your own bank account is not touched.
This field is allowed only for USDC → BRL FX orders.
Order Examples
Funding an order with PIX
By default, afiat/brl order is funded from the account’s existing BRL balance. To instead let the account holder pay for the order with a one-time PIX QR code, set source-payment-method to brcode when creating the order.
source-payment-method accepts:account-balance(default, used when the field is omitted): the order is funded from the account’s existing BRL balance.brcode: Crown issues a one-time PIX QR code for the exact order amount. The order settles once the QR is paid.
brcode is available for BRL → BRLV and for BRL → USDC (FX). The two behave differently after payment, see below.brcode, the response carries the PIX payload to present to the payer:
brcode: the EMV PIX copy-paste payload.qr-code-base64: a base64-encoded PNG of the QR code.expiration: when the QR code stops being payable.
The PIX QR code can only be paid from a bank account under the tax ID registered for the account that placed the order: the account holder funds their own QR code. A payment from any other payer is refused by the bank.
BRL → BRLV
- Create a quote for
fiat/brl→eth-base/brlv(ortempo/brlv). - Create the order with
source-payment-method: "brcode"and thetarget-wallet-addressthat will receive BRLV. The order is parked awaiting payment, and the response carries thebrcode/qr-code-base64. - Pay the QR code. Funds are pulled in via PIX rather than from the account balance.
- BRLV is minted to the target wallet once payment is confirmed, and the order-completed webhook fires.
processing state with the PIX payload to collect payment:
BRL → USDC: pay after acceptance
For FX orders,brcode lets you lock the rate first and pay afterwards. The account does not need BRL on balance when the order is created: accepting the quote fixes effective-rate, reserves the USDC, and returns a PIX QR code with a deadline. The USDC is delivered to the target wallet once the PIX arrives.
The flow is:
- Create a quote for
fiat/brl→eth-base/usdcwith atrade-reason. - Create the order with
source-payment-method: "brcode"and an FX-whitelistedtarget-wallet-address. The rate is locked at this point. - Pay the QR code before
expiration. This is the funding deadline, not just the QR’s validity: it is up to one hour after acceptance, shorter when the order is placed close to the end of the trading day. An order whose remaining window would be under 15 minutes is refused instead of created. - USDC is delivered to the target wallet once the PIX is confirmed, and the order-completed webhook fires.
expired shortly after expiration. The reservation is released and nothing is charged or owed: the account simply did not take the rate. To convert, create a new quote.
If the PIX arrives after expiration, it cannot be applied to an order that has already expired. Crown asks the bank to return the payment to the account it came from, the order moves to payment-returned, and the order-refund-initiated webhook fires with the deposit identifier. The webhook says the return was requested; the bank settles it afterwards.
The order can also be refused at creation with
Paying after acceptance is not available right now. Pay from your BRL balance instead. This happens when the trading day is closed or when the funding window left before the day’s cut-off is too short. Retry later, or fund the order from the account balance.Order Fees
Every order response includes the fee Crown charged for the conversion:fee-amount— the fee amount (decimal string).fee-asset— the asset the fee is denominated in (e.g.,fiat/brl).
pricing.fee.
Order Status
After creating an order, it will go through several status states:created- Order has been createdprocessing- Order is being processedcompleted- Order has been successfully completedrolled-back- Order was undone for a reason other than fundingexpired- Abrcodeorder whose funding window closed with no payment. Nothing was charged and nothing is owedpayment-returned- Abrcodeorder whose PIX arrived after the window. The payment is being returned to the account it came from
- Using the Get Order endpoint
- Setting up webhooks and listening to the order-completed and order-refund-initiated webhooks