Fees & Quotes
What a conversion costs, how to preview it, and how to price your own customers per account.
Who charges what
Two independent fee layers ride a conversion, both itemized in the
conversion's fee_lines.
| Line | Charged by | How it is collected |
|---|---|---|
onramp | Rasto | Our conversion fee, named for the service it prices. On the standard plan it is metered to your monthly invoice, so deliveries go out whole and nothing is netted from your customer's funds |
partner_fee | You | Whatever you configure per virtual account. Netted in flight and credited to your balance immediately |
Every rate is in basis points: 100 bps is 1%. Each fee line carries its
own collection (monthly or realtime), your plan decides the timing per
fee kind, and GET /api/corridors always shows your effective rates.
Your fee, per virtual account
You price each customer individually by setting the fee on their account. There is deliberately no partner-wide default.
# At creation
curl -s $BASE/api/customers/cus_.../virtual_accounts \
-H "Api-Key: $KEY" -H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"currency": "usd", "rail": "ach", "destination": {...},
"partner_fee_bps": "100", "partner_fee_flat": "0.25"}'
# Repricing later
curl -s -X PATCH $BASE/api/virtual_accounts/va_... \
-H "Api-Key: $KEY" -H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"partner_fee_bps": "150"}'
partner_fee_bps: 0 to 1000, so up to 10%, applied to the deposit amount.partner_fee_flat: a fixed amount in the source currency, combined with the bps component.- Both default to
0and are never null. Send0to stop charging. - The combined fee is capped so the delivered amount can never go negative.
- Collected fees settle to your own balance on every conversion, visible
immediately in
GET /api/balances.
Previewing with quote estimates
GET /api/quotes/estimate prices a hypothetical conversion. It is
non-binding, fee-itemized, and works in both directions.
"My user sends 100 USD, what lands?"
curl -s "$BASE/api/quotes/estimate?target_asset=usdc&target_chain=solana&amount=100" \
-H "Api-Key: $KEY"
"I want exactly 100 USDC delivered, what must arrive?"
curl -s "$BASE/api/quotes/estimate?target_asset=usdc&target_chain=solana&target_amount=100" \
-H "Api-Key: $KEY"
{
"object": "quote_estimate",
"quote_kind": "source",
"source": {"asset": "usd", "amount": "100.00"},
"target": {"asset": "usdc", "chain": "solana"},
"fee_lines": [{"kind": "onramp", "amount": "0.30", "asset": "usd"}],
"fee_total": "0.30",
"amount_after_fees": "100.00",
"estimated_delivered_amount": "99.800000",
"total_cost_bps": 50,
"liquidity_available": true,
"binding": false,
"as_of": "2026-08-26T09:28:00+00:00"
}
Parameters:
| Query param | Notes |
|---|---|
target_asset, target_chain | Required |
amount | Source based. Exactly one of amount or target_amount |
target_amount | Target based |
source_asset | Defaults to usd |
partner_fee_bps, partner_fee_flat | Optional. Fold your own fee into the preview, since estimates are account-agnostic |
Sending both amount and target_amount, or neither, returns
400 invalid_parameter. An amount outside the corridor's limits returns
400 amount_out_of_range.
amount_after_fees is what actually converts. On an all-monthly plan it
equals the gross, because nothing was netted, and the fee lines above are
what the month-end invoice will carry.
Estimates are indicative, never locked. ACH and wire deposits arrive hours
later and convert at the rate current when the money lands. The binding
numbers are exchange_rate, fee_lines, and delivered_amount on the
conversion itself.
Wallet fees
Wallets bill by usage, monthly, in USD.
- Per-unit usage prices on your plan, one per countable kind:
wallet_creation,transaction_send, andwebhook_delivery. A send's price includes the signing infrastructure: there is no separate signing fee. - Destination-chain gas at cost plus your plan's markup: the network fee a send actually burned, plus the recipient's token-account rent when a first-time delivery opens it. Priced at the rate noted when it executed, and never re-priced afterwards, so token price moves before month end are never your FX gain or loss.
- Deposits into wallets are free.
Corridors
GET /api/corridors lists every enabled pair for your account with its
limits, your effective fees, and settlement expectations.
{
"data": [
{
"object": "corridor",
"service": "onramp",
"source": {"asset": "usd", "rail": "ach"},
"target": {"asset": "usdc", "chain": "solana"},
"min_amount": "1",
"max_amount": "1000000",
"fees": {
"bps": "30",
"spread_bps": "0",
"min": "0.30",
"collection": "monthly"
},
"estimated_settlement": "instant"
}
]
}
Corridors are account-scoped configuration. If a pair you need is not listed, talk to us rather than hard-coding an expectation. Build corridor pickers and validation from this endpoint, not from the tables in Coverage.