The golden rule
For Brazilian Real (BRL):
The conversion is fixed:
apiValue = displayValue × 10^decimals.
Two shapes you will encounter
Where money flows in a single direction (a payment-orderamount), the API uses a plain integer:
amount is always required and must be a positive integer (> 0) in minor units. There is no open-amount semantics — the payer always settles exactly the amount you specify.
Where money carries richer context (a wallet balance), the API uses the structured Amount object:
Either form represents the same idea — just at different levels of self-description.
The Asset shape
When the API exposes a wallet balance, it accompanies the Amount with an Asset descriptor:
asset.decimals is informational — always trust amount.decimals for the specific value at hand. In practice they will match.
Supported assets
Thecurrency field carries a currency or asset code — ISO 4217 for fiat, the network’s ticker for crypto assets:
PIX payment orders and wallet balances are always denominated in
BRL; the crypto asset codes are reserved for wallets custodying those assets.
Three balances, not one
When you query a wallet balance, you receive three amounts:
When deciding whether a new outbound payment can be created, check
available, not amount.
Client-side handling
Use BigInt or arbitrary-precision integers
JavaScript:int64 is more than sufficient — BRL values up to ≈ 92 quadrillion fit.
Never multiply with floats
^\d+(\.\d{1,2})?$ (for BRL) and convert by digit manipulation, not multiplication.
Display formatting
Always format with the user’s locale on the client side:Next
Wallet balance
Endpoint that returns the three balances and the asset descriptor.
Payments overview
How payment orders consume
available and update balances.