Documentation
Assets and stablecoins
How assets are identified, priced, and converted at settlement.
An asset on JuicePay is an asset, not a contract address. You refer to USDC; we handle that it is a different contract on every network, in some cases several.
The asset namespace#
Assets use short tickers within your account namespace. The common set is standardised:
| Ticker | Name | Pairs supported |
|---|---|---|
USDC | USD Coin | All stablecoin pairs |
USDT | Tether USD | All stablecoin pairs |
DAI | Dai | All stablecoin pairs |
EURC | Euro Coin | EUR stable pairs |
XSGD | StraitsX SGD | SGD stable pairs |
NGNX | Naira reference stablecoin | NGN pairs |
ETH | Ether | Majors |
BTC | Bitcoin | Majors |
SOL | Solana | Majors |
Regional stablecoins are listed separately because their liquidity is thinner and their peg mechanics differ. JuicePay will quote them, but quotes on thin pairs are valid for shorter windows.
Decimals#
Send and receive decimal strings. Never floats.
{ "amount": "125.00" }Inbound values are returned with six decimal places of precision regardless of the underlying token's precision, so your parser sees a consistent shape:
{ "settled_amount": "125.000000" }Some assets have far fewer decimals onchain than six — spending those requires whole-unit amounts, and JuicePay will reject a fractional request rather than silently rounding it.
Conversion and pricing#
When an inbound payment arrives in an asset you do not want to hold, you can convert at settlement time:
{
"amount": "125.00",
"asset": "USDC",
"settle_to": {
"asset": "EURC",
"quote_ttl": 30
}
}The conversion executes as a separate, visible step. You get a quote object attached to the payment intent with the rate and the venues that contributed to it, so the rate is never a mystery.
Pegs are not guarantees#
Every stablecoin in this namespace is an obligation of an issuer, and those obligations have failed before. JuicePay surfaces issuer health signals in the dashboard and lets you cap exposure per asset:
{
"risk_limits": {
"max_exposure_per_asset": "500000.00",
"blocklist": ["NGNX"],
"rebalance_to": "USDC"
}
}If an asset trips a configured limit, new conversions into it are refused while existing balances remain withdrawable.