For initial testing, projects start with a limit of 500 SDAs in total and 50 new SDAs per hour. Subscription accounts have production limits that depend on their tier. See Limits and contact your account manager before launch.
How it works
1
Check where SDAs are available
Find the chains and tokens you can accept, and their deposit limits.
2
Create an address for each customer
Choose the deposit chains, the destination chain and address, and the token to settle in. One API call returns the address. On EVM chains, one address works on every EVM chain you list. Non-EVM chains, such as Solana or Tron, are also supported, each with its own address.
3
Show the address to your customer
You can also show the supported tokens and the minimum and maximum deposit amounts.
4
Your customer sends funds
Your customer, or your platform after consolidating customer funds, sends a supported token to the address.
5
Rhino.fi settles each deposit
Funds arrive at your destination in the token you configured. You receive webhooks at each stage. Afterwards, Rhino.fi periodically sweeps the address to consolidate balances. You don’t need to do anything.
rhinoFetch helper from Authentication. All SDA endpoints require authentication.
1. Check where SDAs are available
See Supported chains and tokens for the full list. In code, the configs endpoint flags each chain that supports SDAs withenabledDepositAddress:
2. Create an address
Create addresses as you need them, for example when a customer first opens your deposit screen, rather than in bulk. See best practices for operating SDAs.depositAddress is the address to show your customer. When you list several EVM chains, the address is the same on every one.
Request fields
The full schema and error list are in the API reference.
Deposits that are not processed
Rhino.fi only processes deposits that meet all of these conditions:- The token is in
supportedTokensfor that chain. - The amount is between
minDepositLimitUsdandmaxDepositLimitUsd. - The deposit passes AML screening. For custom screening rules and real-time AML alerts, see Enhanced Compliance & Risk Management.
- For native tokens such as ETH, the deposit is sent as a direct transfer. Internal transfers, where a smart contract sends the funds (for example a smart wallet, or an exchange that batches withdrawals), are only supported on Ethereum, Base and Optimism. On other chains, such as Arbitrum, Rhino.fi does not detect them, so no webhook is sent.
DEPOSIT_ADDRESS_BRIDGE_REJECTED webhook. Contact your Rhino.fi account manager to arrange a refund.
Settle in a different token
WithtokenOut set, every deposit is settled in that token, swapped where needed. It can be any token supported on the destination chain. For example, USDT deposits can be settled as USDC. If you don’t set tokenOut, each deposit settles in the token that was deposited. Bitcoin is the exception: BTC deposits settle as WBTC by default. See Interacting with Bitcoin.
With the 1:1 Stablecoin Settlement extension, USDC and USDT conversions run at a guaranteed 1:1 rate, with no slippage or market exposure.
Reuse addresses
SDAs are reusable. Rhino.fi monitors each address for seven years, and it can receive any number of deposits in that time. After seven years the address is no longer monitored, unless the period is extended. Contact your account manager if you need longer. With the defaultreusePolicy: "reuse-existing", a create request returns your existing address when all of the following fields match a previous request: depositChain, destinationChain, destinationAddress, addressNote, tokenOut, postBridgeData, webhookUrl and refundAddress. Only addresses created by your project are considered. This makes the create call safe to retry.
If several customers settle to the same destination address, put each customer’s ID in addressNote. Otherwise, with reuse-existing, they would all receive the same address. Use reusePolicy: "create-new" only when you need a fresh address every time.
Refunds
Deposits that can’t be processed, such as an unsupported token or a deposit on an unsupported chain, are refunded by your account manager, who returns the funds to a verified address. You can set arefundAddress when you create an address. It doesn’t trigger a refund on its own. If set, it is offered as the default destination when a refund for that address is processed, instead of the sending address. Only set it if the depositor controls that address. Many customers deposit from exchanges and other pooled wallets, where funds sent back may never reach them.
3. Monitor an address
Check its status
destinationAddress is included only when the JWT comes from a secret key.
List its deposits
Requires a secret key.Track deposits from a browser or app
Your frontend should not use a secret key, so it cannot call the history endpoint. Use the public status endpoint with a JWT from a public key instead. It requires the address’sdestinationAddress, which your frontend already has from the create response. The request is rejected if the value does not match.
lastBridges contains the most recent deposit, whether accepted or rejected. An empty array means no deposit has been detected yet.
Find your addresses
Search your project’s addresses. All filters are optional.destinationAddress also requires destinationChain.
From 9 November 2026, this endpoint requires a JWT created from a secret key. Call it from your backend.
Pause or update an address
You can pause, resume or update an address with the pause, unpause or update endpoint. Pausing is useful when you offboard a customer or want to stop accepting deposits on an address. A paused address is not monitored, so any funds sent to it get stuck and are not processed.Fees
For subscription clients, most SDA fees are covered by the subscription. Many of the fields in the quote response’sfees object relate to the legacy pricing structure, so read them with that in mind.
Tron, Solana and Bitcoin have additional onchain costs (see Tron, Solana and Bitcoin Access). On a subscription, you choose who pays them:
- Paid by you. The cost appears in the sponsored section of the response and is invoiced in your month-end accounting.
- Paid by your end customer. The cost appears in the non-sponsored section and is deducted from the amount settled on the destination chain.
Price a deposit
To show the fees for a deposit before your customer sends it, request a quote withisSda: "true". Use the SDA as the depositor and your destination address as the recipient:
Next steps
Track transactions
Receive webhooks for every deposit and reconcile settled funds.
SDA Widget
Embed a ready-made SDA deposit interface instead of building your own.