curl --request POST \
--url https://app.crown-brlv.com/api/v1/accounts/{account-id}/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"
}
'import requests
url = "https://app.crown-brlv.com/api/v1/accounts/{account-id}/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"
}
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'
})
};
fetch('https://app.crown-brlv.com/api/v1/accounts/{account-id}/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/v1/accounts/{account-id}/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'
]),
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/v1/accounts/{account-id}/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}")
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/v1/accounts/{account-id}/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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v1/accounts/{account-id}/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}"
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": 80
},
"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"
}{
"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/v1/accounts/{account-id}/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"
}
'import requests
url = "https://app.crown-brlv.com/api/v1/accounts/{account-id}/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"
}
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'
})
};
fetch('https://app.crown-brlv.com/api/v1/accounts/{account-id}/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/v1/accounts/{account-id}/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'
]),
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/v1/accounts/{account-id}/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}")
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/v1/accounts/{account-id}/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}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v1/accounts/{account-id}/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}"
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": 80
},
"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"
}{
"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>"
}
}Path Parameters
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"
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"