Recommended: render
CheckoutContainer to buy or sell, and ClaimContainer to claim. Both detect centrifuge::vault offers and run the whole flow. This page covers what is specific to Centrifuge and the levels below the components.What Centrifuge is
Centrifuge is an onchain asset manager and tokenization platform. Through Passage, it offers deRWA tokens: wrapped tokens that give economic exposure to an institutional fund and move around DeFi like any other ERC-20. The token symbol isde followed by the fund’s ticker.
Read the list of funds from the offer catalog rather than this table. Each fund is one offer with
type: "centrifuge::vault", and offer.vaultContracts names every chain it accepts requests on. Passage supports Centrifuge on Ethereum.
Passage does not route requests straight to Centrifuge. Each offer has a CoinList proxy contract on every chain it supports, and every request and every claim goes through it. The proxy only accepts a transaction that CoinList signed for that wallet, so Passage builds each one, and users have to meet the offer’s requirements before they can buy.
A trade settles in two steps: buy or sell, then claim
This is the main difference from Ondo and Superstate, and it works like a mutual fund off-chain. An order in a mutual fund is not filled at once at a market price. It waits for the fund’s next dealing point and is filled at the price the fund calculates then, along with every other order in that batch. A Centrifuge fund is asynchronous in the same way (it follows the ERC-7540 vault standard). Buying or selling sends a request, and the request does not move any tokens to the user yet. The fund fills the queue later, at a price it sets at that point, and the user then claims the result in a second transaction. Each fund’s dealing days and typical time to fill are listed under Fund schedules. Solid arrows are transactions the user signs. The dashed step is the fund filling the queue, which Passage does not control. A fill can be partial, sopending and claimable can both be above zero at once.
What this means for your UI
- There is no order ID. Each wallet has one pooled position per fund, per chain, per direction. A second deposit adds to the same position. You claim by wallet and direction, and a claim takes everything that is claimable.
- Amounts before a claim are estimates. The fund sets the price when it fills.
estimatedSharesandestimatedAssetsuse the current price. What a claim actually paid is in itssettlement. - Requests cannot be cancelled. Once a request mines, it waits in the queue until the fund fills it.
- Only the wallet that placed the request can claim it. The claim is signed for that wallet, and the proxy pays whoever sends it. Make sure your users come back with the same wallet.
Quickstart
Render the checkout for the request and the claim card for the second step on the same page. Nothing Centrifuge-specific needs configuring: the proxy, share token and funding token all come from the offer.FundPage.tsx
1
Amount
They enter USDC to deposit, or shares to redeem. The checkout checks their balance and the fund’s status. If buying or selling is paused, the amount step is blocked with an explanation. Claiming is never paused. For a deposit, confirming the amount also asks for the approval, if the proxy’s allowance does not already cover it, and builds the request, so the review can show its fee.
2
Review and sign
The review shows the amount and, for a deposit, the CoinList fee. Place sends the request. A redemption asks for its approval here instead, then sends the request. The confirmation says the order is placed and that the user comes back to claim it, not that the trade is done.
3
Claim, later
ClaimContainer lists each wallet’s pending and claimable amounts, read from the chain. When something is ready, the row leads with the estimated amount the user will receive and shows a Claim button.Fund status
The proxy can stop accepting requests in either direction, and Centrifuge sends no notice when it does. The checkout polls the status every 15 seconds while it is mounted. If you build your own UI, pollgetVaultStatus or use useCentrifugeVaultStatus. It is free to call.
Status is reported separately for
deposit (buy) and redeem (sell), so a fund can take redemptions while it refuses deposits. Status never blocks a claim: anything already filled can be claimed whatever either direction says.
Buying and selling
Both directions use the same offer, the same proxy and the same two-step shape. They differ in which token moves in and out.
A deposit carries a CoinList fee, currently 0.5% on every fund. The fee is taken out of the deposit, not added on top: the approval covers exactly
spendInputAmount, fee is the part of it CoinList keeps, and the rest enters the queue. CheckoutContainer shows it in the review’s CoinList fee row, and the total stays the amount the user entered. A redemption carries no fee. The fee field is new in v0.15.1.
Claiming
ClaimContainer covers this for you. Under it, a claim works like a request: the SDK asks the API to build it, the user’s wallet sends it, and the SDK waits for it to mine. The claim carries a CoinList signature with a deadline, so it is built when the user clicks Claim and sent straight away.
- A claim collects the whole claimable amount for one direction. There is no partial claim.
- Placing a new deposit request first claims anything already claimable. So a claim can find nothing left and return
nothing-to-claim. Treat that as already done and refresh the position. - A request or claim in the same direction between building a claim and sending it makes the claim stale (
claim-expired). Building it again fixes it. - If the proxy refuses to sign (
vault-refused), one retry can help, as the API asks. The claim card offers Retry once, and every retry builds the claim again. - After a claim mines,
settlementholds what it moved: shares paid for a deposit, USDC paid for a redemption.
Build your own UI
Use the hooks for the SDK’s logic behind your own markup (L2), or callpassage.centrifuge directly for no React at all (L1). Both are @alpha.
MyFundBuy.tsx
At L1, the same deposit with no React:
offerOptionId of the option the user was shown. It is required since v0.15.0, even on an offer with one option, because the API refuses a deposit on an offer with several options rather than pick one. A redemption takes none, since it runs no option’s requirements.
To claim, call passage.centrifuge.claim with the wallet, the share token symbol, the resolved vault and the direction.
The passage.centrifuge namespace
Flows return a result tagged
success or error instead of throwing, the same as the other providers. API-backed methods throw NotAuthenticatedError without a session.
REST API
For a server or a non-JavaScript client. All endpoints need an authenticated user. Amounts are uint256 decimal strings in the token’s smallest unit, and timestamps are ISO 8601.Status
GET /v1/centrifuge/vault/status?symbol=deJTRSY&chain=ethereum_mainnet
200 OK
Requests
POST /v1/centrifuge/vault/invest builds a deposit request. POST /v1/centrifuge/vault/sell takes the same body, with amount in shares.
Request
200 OK
to (the offer’s proxy) and data unchanged, from the same wallet_address. The signature names that wallet, and expires at expires_at.
Claims
POST /v1/centrifuge/vault/claim builds the claim for a filled deposit, and POST /v1/centrifuge/vault/redeem the claim for a filled redemption. Both take symbol, chain and wallet_address, and claim everything claimable.
200 OK
claim_amount is what the claim collects, in the unit the position is tracked in: USDC for a deposit, shares for a redemption. What it pays out is only known once it mines. A wallet with nothing claimable gets nothing_to_claim.
Positions are not served by the API. Read pendingDepositRequest and claimableDepositRequest (or the redeem pair) on the proxy directly.
Errors
When Passage declines to build a request
Returned as abuild-refused step, with a reason the user can act on.
When a request fails
When a claim fails
See Errors for the full error types.
FAQ
What does my user own?
What does my user own?
A deRWA token issued by Centrifuge that wraps a share of the underlying fund. That gives economic exposure to the fund’s returns, not direct ownership of its assets. The Janus Henderson Anemoy funds are run through Anemoy Capital SPC, a segregated portfolio company regulated in the British Virgin Islands.
How long until a request can be claimed?
How long until a request can be claimed?
It depends on the fund. See Fund schedules for each fund’s dealing days and typical time to fill. A fill can be partial. Show the user the pending amount and let them come back, rather than holding them on a spinner.
Can a user cancel a request?
Can a user cancel a request?
No. Once a request mines, it stays queued until the fund fills it.
Does the yield show up as more tokens?
Does the yield show up as more tokens?
No. The fund’s return goes into the token’s price, not the user’s token balance, so each token is worth more USDC over time. When the user redeems, the claim pays USDC at the price on the fill date, so they get back more USDC than they put in, less any fall in the fund’s value.To show yield, value the user’s tokens at the current token price and show the change since they bought.
Can users transfer the tokens or use them in DeFi?
Can users transfer the tokens or use them in DeFi?
Yes. deRWA tokens move freely between wallets and into DeFi protocols. Users can also sell them on DeFi protocols that support them, but liquidity there can be limited.Requesting or redeeming through Passage still needs a wallet that qualifies for the offer, so someone who receives tokens from another wallet can only redeem through Passage if they meet the offer’s requirements.
Which jurisdictions are excluded?
Which jurisdictions are excluded?
Centrifuge funds are not available in the United States and its territories, 22 other countries, or 5 regions of Ukraine. The full list is on the Centrifuge issuer page.
What does it cost?
What does it cost?
CoinList charges 0.5% on deposits, taken out of the deposit amount. Redemptions and claims carry none. The fund also charges its own management fee, which is reflected in the token price. See Fund schedules.
Next steps
Checkout
How
CheckoutContainer picks a provider, and the props every checkout shares.Requirements
The KYC and eligibility steps a user completes before their first deposit.
Wallets
Embedded and external wallets, and skipping the wallet step.
Errors
Every flow’s error steps, and which ones are safe to retry.