Exchange BRL → USDT

Convert reais into USDT. You request a quote, confirm the order, pay the generated PIX, and the USDT is transferred to the wallet registered on the exchange account. All amounts are in reais (BRL).

Flow

  1. POST /api/cambio/cotacao returns the price and a quoteId that is valid for a few seconds (lockSeconds).
  2. POST /api/cambio/ordens accepts the quote, creates the order and returns the PIX copy-and-paste code.
  3. Pay the PIX before expiresAt.
  4. Poll GET /api/cambio/ordens/{id} until the status is DONE, which comes with the txHash of the USDT transfer.

Quotes expire quickly (about 15 seconds). If you prefer, call POST /api/cambio/ordens directly with amount: the quote and the order are made in the same call.

Headers

The same as every other endpoint. See Authentication.

Content-Type
Obrigatorioheader

application/json

X-Client-Id
Obrigatorioheader

Client ID of your API credential

X-API-Key
Obrigatorioheader

API Key of your API credential

1. Get a quote

POST/api/cambio/cotacao
amount
Obrigatorionumber

Amount in reais to convert, with up to two decimal places (e.g. 60000.00). Minimum US$ 10,000 and maximum US$ 1,000,000 per order, converted to reais at the current price (roughly R$ 55 thousand to R$ 5.5 million). Above the maximum, split it into more than one order.

Request
{
"amount": 60000.00
}
Response 200
{
"quoteId": "3f1c2b9e-6a1d-4f7e-9c2a-1b2c3d4e5f60",
"amountBrl": 60000.00,
"price": 5.5417,
"estimatedUsdt": 10827.00,
"lockSeconds": 15,
"expiresAt": "2026-10-30T15:00:20Z"
}
price
number

Reais per 1 USDT.

estimatedUsdt
number

amount / price, rounded down to 2 decimal places.

lockSeconds
number

How many seconds the quote is valid for.

2. Create an order

POST/api/cambio/ordens
quoteId
string

Quote from /api/cambio/cotacao. Required if amount is not sent.

amount
number

Amount in reais. Use it instead of quoteId to quote and accept in the same call.

externalId
string

Your own order identifier (up to 64 characters). Sending the same externalId again returns the same order instead of creating another one.

Request
{
"quoteId": "3f1c2b9e-6a1d-4f7e-9c2a-1b2c3d4e5f60",
"externalId": "order-001"
}
Response 200
{
"id": 128,
"externalId": "order-001",
"status": "PENDING",
"amountBrl": 60000.00,
"price": 5.5417,
"totalUsdt": 10827.00,
"quoteId": "3f1c2b9e-6a1d-4f7e-9c2a-1b2c3d4e5f60",
"pix": [
{
"sequence": 1,
"amountBrl": 60000.00,
"status": "PENDING",
"qrCode": "00020101021226...6304ABCD",
"qrCodeImageUrl": null,
"txid": "f3a9c1d27e8b4f60a1",
"expiresAt": "2026-10-31T11:55:00.000000Z"
}
],
"walletAddress": null,
"txHash": null,
"scanLink": null,
"error": null,
"createdAt": "2026-10-30T15:00:05Z",
"updatedAt": "2026-10-30T15:00:08Z"
}

The PIX is usually ready within a few seconds. If pix is empty or has status CREATING, fetch the order again in a few seconds. On a 502 error, look the order up by id (or repeat the call with the same externalId) before trying another one.

3. Get an order

GET/api/cambio/ordens/{id}

Refreshes the order and returns it in the same format as the creation response. Once the USDT is transferred, the status becomes DONE and walletAddress, txHash and scanLink are filled in.

Excerpt of a DONE response
{
"id": 128,
"status": "DONE",
"totalUsdt": 10827.00,
"walletAddress": "TXyz...",
"txHash": "9f2c...",
"scanLink": "https://tronscan.org/#/transaction/9f2c..."
}

4. List orders

GET/api/cambio/ordens?page=1&pageSize=20
page
number

Page, starting at 1 (default 1).

pageSize
number

Items per page, from 1 to 100 (default 20).

Response 200
{
"page": 1,
"pageSize": 20,
"total": 1,
"data": [ { "id": 128, "externalId": "order-001", "status": "PENDING", "...": "..." } ]
}

Order status

CREATING
status

The order is being registered.

PENDING
status

Order created, waiting for the PIX payment.

DONE
status

PIX received and USDT transferred (see txHash).

FAILED
status

The order was not created; the reason is in error.

Errors

400
http

Invalid amount, or neither quoteId nor amount was sent.

401 / 403
http

Missing credential or no access to the company.

404
http

Order not found for your company.

422
http

Quote rejected or expired: request a new quote. Outside the limits (US$ 10,000 to US$ 1,000,000), providerMessage states the minimum or maximum in reais.

502
http

The exchange desk did not respond. Look the order up before repeating.

503
http

Exchange is unavailable right now.