Overview
USDY is Ondo’s yield-bearing token that provides investors a steady return over time. The token price started at $1.00 in July 2023 and has increased over time at a variable monthly rate. For a product-level introduction, see USDY Basics. TheUSDY_InstantManager contract is the on-chain entry point used by the Ondo web app to instantly mint and redeem USDY. You can call it directly from your own contracts or EOA to:
- Convert USDC into USDY via
subscribe(selector0x22d4a175) - Convert USDY back into USDC via
redeem(selector0xd8780161)
USDY, USDY_InstantManager, and the USDY redemption price oracle are listed in Smart Contracts → Addresses.
The Ethereum USDC address used in the examples below is
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48.Prerequisites
Before callingsubscribe or redeem, the address that interacts with the contract must be registered in the OndoIDRegistry.
You can whitelist your address at app.ondo.finance/account/wallets. If you run into issues, reach out to support@ondo.finance.
ERC20 approvals
TheUSDY_InstantManager pulls tokens from your wallet via transferFrom, so you must approve it to spend the token you are sending before calling subscribe or redeem:
- Before
subscribe: approve the manager to spend your deposit token (e.g. USDC) for at leastdepositAmount. - Before
redeem: approve the manager to spend your USDY for at leastrwaAmount.
IERC20(token).approve(usdyInstantManager, amount). If you skip this step, the subscribe/redeem call will revert with an ERC20 allowance error such as ERC20: insufficient allowance.
Subscribing: USDC to USDY
Function signature
Parameters
depositToken: the token being deposited (typically USDC)depositAmount: the amount ofdepositTokento deposit, in the token’s native decimals (e.g.1000000for 1 USDC)minimumRwaReceived: slippage protection, denominated in USDY’s 18 decimals. Because you are minting directly with Ondo, there is no front-running or order-size slippage, so0is safe.
Example
Redeeming: USDY to USDC
Function signature
Parameters
rwaAmount: the amount of USDY to redeem, in USDY’s 18 decimals (e.g.1000000000000000000for 1 USDY)receivingToken: the token to receive (typically USDC)minimumTokenReceived: slippage protection, denominated in the receiving token’s native decimals.0is safe when redeeming directly with Ondo.
Example
USDY price oracle
The USDY price is published on-chain by theRWADynamicOracle contract (see the “Redemption Price Oracle” row in /addresses). Rather than storing a single current price, the oracle is configured with a series of ranges — each range has a start time, end time, and a daily interest rate that compounds across the range. The USDY_InstantManager consults this oracle on every subscription and redemption to convert between USD value and USDY amounts.
All prices are denominated in USD with 18 decimals and rounded to 8 decimal places.
Get the current price
getPrice(): returns the current USDY price, in USD with 18 decimals.getPriceData(): convenience wrapper that also returns the current block timestamp.
Get a historical price
getPrice(), this function does not revert when the oracle is paused.
Converting between USD and USDY
The oracle price represents how many USD one USDY is worth.Reference
Decimal handling
- USDC: 6 decimals (1 USDC = 1,000,000 units)
- USDY: 18 decimals (1 USDY = 1018 units)
- Oracle prices: 18 decimals, rounded to 8 decimal places
Rate limits and minimums
The manager contract enforces per-user and global rate limits, as well as a configured minimum USD value per subscription and redemption. Very small or unusually large transactions may revert.Common errors
| Error | Meaning |
|---|---|
SubscriptionsPaused / RedemptionsPaused | Operations are temporarily paused on the manager |
TokenNotAccepted | The specified deposit or receiving token is not supported |
UserNotRegistered | The caller is not registered in the OndoIDRegistry |
DepositAmountTooSmall / RedemptionAmountTooSmall | Transaction is below the configured USD minimum |
RwaReceiveAmountTooSmall / ReceiveAmountTooSmall | Output is less than the specified minimum |
| Compliance revert | The caller failed the OndoCompliance check (e.g. sanctions, jurisdiction) |
| Rate-limit revert | The transaction exceeds per-user or global rate limits |
Best practices
- Ensure the calling address is whitelisted in the OndoIDRegistry before attempting any transaction.
- Check the contract’s pause status (
subscribePaused/redeemPaused) before attempting transactions. - Approve the
USDY_InstantManagerfor the exact amount being deposited or redeemed. - Implement proper error handling for all possible revert conditions.

