Skip to main content

Overview

Converting assets with Crown API is a two-step process:
  1. Create a quote between two assets to get exchange rates and pricing
  2. 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/brlv
  • eth-base/brlv → fiat/brl
  • fiat/brl → tempo/brlv
  • tempo/brlv → fiat/brl
BRL ↔ USDC (FX conversions)
  • fiat/brl → eth-base/usdc
  • eth-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-merchandise
  • purchase-or-sale-of-other-services
  • purchase-or-sale-of-business-services
  • purchase-or-sale-of-computing-services
  • transfer-between-same-entity-accounts
  • offshore-loans-principal
  • offshore-loans-interest
  • donation-without-counter-payment
  • international-travels
  • other-transactions
The quote response echoes back 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.
These are separate registrations — a wallet enabled for BRLV minting is not automatically enabled for FX.
* For USDC→BRL FX orders, you may optionally route BRL to a third-party recipient using 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 setting target-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, a fiat/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.
When the order is created with 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

  1. Create a quote for fiat/brl → eth-base/brlv (or tempo/brlv).
  2. Create the order with source-payment-method: "brcode" and the target-wallet-address that will receive BRLV. The order is parked awaiting payment, and the response carries the brcode / qr-code-base64.
  3. Pay the QR code. Funds are pulled in via PIX rather than from the account balance.
  4. BRLV is minted to the target wallet once payment is confirmed, and the order-completed webhook fires.
The order is returned in the 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.
Paying after acceptance must be enabled on the account. Contact Crown’s support team to request it. Without it, a BRL → USDC order with source-payment-method: "brcode" is refused with This account cannot pay FX orders after acceptance. Pay from your BRL balance instead.
The flow is:
  1. Create a quote for fiat/brl → eth-base/usdc with a trade-reason.
  2. Create the order with source-payment-method: "brcode" and an FX-whitelisted target-wallet-address. The rate is locked at this point.
  3. 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.
  4. USDC is delivered to the target wallet once the PIX is confirmed, and the order-completed webhook fires.
If the QR is not paid in time, the order moves to 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).
The fee is also visible in the originating quote under pricing.fee.

Order Status

After creating an order, it will go through several status states:
  • created - Order has been created
  • processing - Order is being processed
  • completed - Order has been successfully completed
  • rolled-back - Order was undone for a reason other than funding
  • expired - A brcode order whose funding window closed with no payment. Nothing was charged and nothing is owed
  • payment-returned - A brcode order whose PIX arrived after the window. The payment is being returned to the account it came from
You can track your order status by: