BRS (BRL stablecoin)
BRS is a 1:1 Real-backed stablecoin on Solana. How users get it, how to move it, and how to pay PIX from it.
BRS is Nora Finance's Brazilian Real stablecoin: minted 1:1 against BRL, fully reserved with public attestations, issued by licensed and KYB-verified minters. It lives on Solana only today.
| Field | Value |
|---|---|
| Peg | 1 BRS = R$ 1,00 |
| Network | solana |
| Mint | BRSxQRUaGswjLs7ewcH7uXj3r7SgmfKSSLLXyCKHZtUo |
| Decimals | 6 |
| Minimum per mint | R$ 5,00 |
| Flag required | NORA_RAIL (per account) |
Always match BRS by mint address, never by symbol. An unrelated token also called BRS exists on Solana; a symbol lookup can read the wrong balance.
The three rules
- 1:1, no spread on the mint. Pay R$ 100 → receive 100 BRS. There is no FX leg and, by default, no on-ramp fee: Hodle absorbs the PIX cash-in cost.
- BRS is only delivered to the user's own Hodle Solana wallet. There is no destination field when buying — a third-party address is refused.
- To send BRS anywhere else, use transfer. That is the only way BRS leaves the Hodle wallet as a token.
Getting BRS (on-ramp)
BRS is bought with a PIX charge created by POST /api/deposit/asset.
The request does not include an address: BRS is minted to the user's own Hodle Solana
wallet. The account must have NORA_RAIL enabled.
curl --request POST \
--url https://api.hodle.com.br/api/deposit/asset \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{
"value": 10000,
"asset": "BRS",
"network": "solana",
"externalId": "my-brs-order-123"
}'The reason is rule 2. Nora mints only to wallets that hold an on-chain authorization grant, and Hodle pays for each grant, so the destination is always a Solana wallet the account already owns. Requesting an address the user does not own fails with:
{ "success": false, "error": "BRS só pode ser recebido em uma carteira Solana da própria conta" }The account must therefore have a Solana wallet before buying. Delivery is asynchronous: the PIX settles, Hodle forwards the amount to Nora (Nora only accepts funds from Hodle, never from the end customer), Nora mints, and the purchase closes when the mint confirms on-chain. Amounts below R$ 5,00 net are rejected up front — that floor is enforced by the mint contract and cannot be waived.
Pricing
| Setup | User pays | User receives |
|---|---|---|
| Default | R$ 100 | 100 BRS |
Cost pass-through enabled (BRS_FEE_PASSTHROUGH) | R$ 100 | 100 BRS minus the PIX cash-in cost and the account's markup |
Ask Hodle which mode your account is on before quoting BRS to your users.
Moving BRS — POST /api/wallet/transfer
{
"recipientAddress": "7xKX...gAsU",
"asset": "BRS",
"network": "solana",
"value": 5000,
"walletPin": "123456",
"protectedSymmetricKey": "..."
}networkmust besolana;assetmust beBRS.- Signed as an SPL
transferCheckedwith the user's own key. Hodle's master wallet pays the network fee and, on a first transfer to a fresh recipient, the rent of the recipient's associated token account — the user never needs SOL. - Not ledger-backed: the balance is enforced on-chain, so the wallet must actually hold the BRS.
recipientAddresscan be any Solana address. UsetoSubAccountIdinstead to move BRS between two of your own subaccounts.
Without NORA_RAIL the call returns 403:
{ "success": false, "error": "BRS is not enabled for this account. Please send a message to support." }Paying PIX from BRS — POST /api/wallet/payout
{
"value": 5000,
"network": "solana",
"asset": "BRS",
"pixKey": "user@email.com",
"walletPin": "123456",
"protectedSymmetricKey": "..."
}- Zero fee, 1:1. Hodle transfers exactly
valueBRS from the user's wallet to its Solana master and pays exactlyvalueas PIX, sofeecomes back as"0.00". No FX rate is applied (forUSDT/USDCthe same call converts at the current rate). - The wallet must hold enough BRS to cover
value; otherwise the call returns400before anything moves. - Both
pixKeyandqrCodeare supported. Hodle pays either destination from its own operating account. - Minimum R$ 5,00 (
value: 500), enforced by the mint contract. - Requires
NORA_RAILin addition toWALLET_PAYOUT_API; the response is403otherwise. - Returns
202. If Hodle's operating account has enough BRL, the PIX is paid immediately and Nora replenishes the account afterwards. If it does not, the transaction remainsPENDING: Nora burns the BRS from Hodle's master and returns BRL to Hodle first, then Hodle releases the customer's PIX as soon as that balance is visible. Nora's leg can take about 18 minutes in production, so keep pollingGET /api/wallet/payout/{transactionId}or consume the payout webhooks. - The Nora-first burn is irreversible. Hodle does not report the payout as failed or return BRS while the corresponding BRL is still on its way; the PIX continuation is idempotent and resumes automatically after Nora's authenticated webhook.
Limitations
- First read can come back cold.
/api/wallet/getdoes expose Solana: the address isaddresses.solanaand the balance is the{ "network": "solana", "asset": "BRS" }row. The rows are served from a cached chain read, so the first call on a wallet that was never synced returns no Solana rows and schedules the sync in the background — sendsync: trueto force a fresh read. - No sandbox. The sandbox settles on Base Sepolia; Solana and BRS are production-only.
- Solana only. Nora lists Ethereum as upcoming; Hodle supports no other BRS network today.
See also
- Assets & Networks — every asset and the endpoints that move it
- Wallet Transfer · Wallet Payout
- Webhooks — deposit and payout events