curl --request POST \
--url https://app.crown-brlv.com/api/v0/quotes \
--header 'Content-Type: application/json' \
--data '
{
"source-asset": "fiat/brl",
"target-asset": "eth-base/usdc",
"source-amount": "100.50",
"target-amount": "500.25",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}
'import requests
url = "https://app.crown-brlv.com/api/v0/quotes"
payload = {
"source-asset": "fiat/brl",
"target-asset": "eth-base/usdc",
"source-amount": "100.50",
"target-amount": "500.25",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
'source-asset': 'fiat/brl',
'target-asset': 'eth-base/usdc',
'source-amount': '100.50',
'target-amount': '500.25',
'trade-reason': 'transfer-between-same-entity-accounts',
'rate-lock': '10m'
})
};
fetch('https://app.crown-brlv.com/api/v0/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.crown-brlv.com/api/v0/quotes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source-asset' => 'fiat/brl',
'target-asset' => 'eth-base/usdc',
'source-amount' => '100.50',
'target-amount' => '500.25',
'trade-reason' => 'transfer-between-same-entity-accounts',
'rate-lock' => '10m'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.crown-brlv.com/api/v0/quotes"
payload := strings.NewReader("{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.crown-brlv.com/api/v0/quotes")
.header("Content-Type", "application/json")
.body("{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v0/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}"
response = http.request(request)
puts response.read_body{
"expires-at": "2024-01-15T10:30:00Z",
"target-asset": "eth-base/usdc",
"id": "550e8400-e29b-41d4-a716-446655440000",
"source-asset": "fiat/brl",
"source-amount": "1000.00",
"created-at": "2024-01-15T10:30:00Z",
"pricing": {
"base-rate": {
"amount": "5.1307200000",
"base": "USDC",
"quote": "BRL"
},
"spread": {
"amount": "7.95",
"asset": "fiat/brl",
"bps": 90
},
"fee": {
"amount": "2.00",
"asset": "fiat/brl",
"kind": "fixed"
},
"iof": {
"amount": "0.00",
"asset": "fiat/brl",
"applicable": false,
"basis-ref": "psav-res-521-2025"
}
},
"target-amount": "194.914826",
"off-market-pricing": false,
"vet": {
"amount": "5.1307200000",
"base": "USDC",
"quote": "BRL"
},
"trade-reason-code": "67995",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}Create Quote
Creates a quote for converting between different assets (fiat currencies and tokens). Either source-amount OR target-amount must be provided, but not both.
curl --request POST \
--url https://app.crown-brlv.com/api/v0/quotes \
--header 'Content-Type: application/json' \
--data '
{
"source-asset": "fiat/brl",
"target-asset": "eth-base/usdc",
"source-amount": "100.50",
"target-amount": "500.25",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}
'import requests
url = "https://app.crown-brlv.com/api/v0/quotes"
payload = {
"source-asset": "fiat/brl",
"target-asset": "eth-base/usdc",
"source-amount": "100.50",
"target-amount": "500.25",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
'source-asset': 'fiat/brl',
'target-asset': 'eth-base/usdc',
'source-amount': '100.50',
'target-amount': '500.25',
'trade-reason': 'transfer-between-same-entity-accounts',
'rate-lock': '10m'
})
};
fetch('https://app.crown-brlv.com/api/v0/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.crown-brlv.com/api/v0/quotes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source-asset' => 'fiat/brl',
'target-asset' => 'eth-base/usdc',
'source-amount' => '100.50',
'target-amount' => '500.25',
'trade-reason' => 'transfer-between-same-entity-accounts',
'rate-lock' => '10m'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.crown-brlv.com/api/v0/quotes"
payload := strings.NewReader("{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.crown-brlv.com/api/v0/quotes")
.header("Content-Type", "application/json")
.body("{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v0/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"source-asset\": \"fiat/brl\",\n \"target-asset\": \"eth-base/usdc\",\n \"source-amount\": \"100.50\",\n \"target-amount\": \"500.25\",\n \"trade-reason\": \"transfer-between-same-entity-accounts\",\n \"rate-lock\": \"10m\"\n}"
response = http.request(request)
puts response.read_body{
"expires-at": "2024-01-15T10:30:00Z",
"target-asset": "eth-base/usdc",
"id": "550e8400-e29b-41d4-a716-446655440000",
"source-asset": "fiat/brl",
"source-amount": "1000.00",
"created-at": "2024-01-15T10:30:00Z",
"pricing": {
"base-rate": {
"amount": "5.1307200000",
"base": "USDC",
"quote": "BRL"
},
"spread": {
"amount": "7.95",
"asset": "fiat/brl",
"bps": 90
},
"fee": {
"amount": "2.00",
"asset": "fiat/brl",
"kind": "fixed"
},
"iof": {
"amount": "0.00",
"asset": "fiat/brl",
"applicable": false,
"basis-ref": "psav-res-521-2025"
}
},
"target-amount": "194.914826",
"off-market-pricing": false,
"vet": {
"amount": "5.1307200000",
"base": "USDC",
"quote": "BRL"
},
"trade-reason-code": "67995",
"trade-reason": "transfer-between-same-entity-accounts",
"rate-lock": "10m"
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}You’re viewing v0, which is deprecated. Endpoints may change or be removed.
Switch to v1 (Latest) →Body
The asset to convert from (e.g., 'fiat/brl', 'eth-base/brlv', 'eth-base/usdc')
tempo/brlv, eth-base/brlv, eth-mainnet/brlv, fiat/brl, eth-base/usdt, fiat/usd, eth-mainnet/usdt, eth-mainnet/usdc, eth-base/wbrly, eth-base/usdc, eth-base/brly "fiat/brl"
The asset to convert to (e.g., 'fiat/brl', 'eth-base/brlv', 'eth-base/usdc')
tempo/brlv, eth-base/brlv, eth-mainnet/brlv, fiat/brl, eth-base/usdt, fiat/usd, eth-mainnet/usdt, eth-mainnet/usdc, eth-base/wbrly, eth-base/usdc, eth-base/brly "eth-base/usdc"
Amount of source asset to convert (provide either source-amount OR target-amount, not both)
"100.50"
Desired amount of target asset to receive (provide either source-amount OR target-amount, not both)
"500.25"
SISBACEN classification for the FX trade. Required when converting between BRL and a non-BRL-pegged asset (e.g., BRL <-> USDC). Ignored for same-currency conversions such as BRL <-> BRLV.
transfer-between-same-entity-accounts "transfer-between-same-entity-accounts"
Quote rate lock to price the quote under, by name (e.g. '10m'). Only for FX conversions between BRL and a non-BRL-pegged asset, and only for rate locks enabled on the account. Omit for the base validity.
10m "10m"
Response
Quote created successfully
ISO 8601 timestamp when the quote expires (millisecond precision)
"2024-01-15T10:30:00Z"
The asset being converted to
tempo/brlv, eth-base/brlv, eth-mainnet/brlv, fiat/brl, eth-base/usdt, fiat/usd, eth-mainnet/usdt, eth-mainnet/usdc, eth-base/wbrly, eth-base/usdc, eth-base/brly "eth-base/usdc"
Unique identifier for the quote
"550e8400-e29b-41d4-a716-446655440000"
The asset being converted from
tempo/brlv, eth-base/brlv, eth-mainnet/brlv, fiat/brl, eth-base/usdt, fiat/usd, eth-mainnet/usdt, eth-mainnet/usdc, eth-base/wbrly, eth-base/usdc, eth-base/brly "fiat/brl"
Amount of source asset to be converted. BRL → 2 dp; USDC/USDT → 6 dp. Always FLOOR-truncated.
"1000.00"
ISO 8601 timestamp when the quote was created (millisecond precision)
"2024-01-15T10:30:00Z"
Pricing breakdown: base rate, spread, service fee, IOF
Show child attributes
Show child attributes
Amount of target asset to be received. BRL → 2 dp; USDC/USDT → 6 dp. Always FLOOR-truncated.
"194.914826"
True when this quote was priced outside normal market conditions. The quoted rate may differ from standard pricing; you can wait for conditions to normalize or proceed at the quoted rate.
false
Valor Efetivo Total — the all-in rate including spread, fee, and IOF
Show child attributes
Show child attributes
Regulatory code for the trade reason
"67995"
SISBACEN classification for the FX trade
transfer-between-same-entity-accounts "transfer-between-same-entity-accounts"
Quote rate lock the quote was granted. Present only when one was requested and granted; a quote without it has the base validity.
"10m"