Preview the best yield split for an amount before anyone signs anything. Give it an amount, a token, and a chain (or several), and it comes back with the pools it would route into, the blended APY, and ready-to-run transaction calldata for each position.
This is a pure simulation — read-only, no signing, no gas. It only needs your API key, so it’s a great fit for calculators, previews, and “what would I earn” dashboards. Call it as often as you like as the user tweaks their inputs.
Signature
Parameters
params is a single object:
Returns
Chain-keyed simulated positions, plus calldata to actually enter each one.
Return Type
The deposit calldata contains a "<RECEIVER>" placeholder among its parameters. Swap it for the real receiving address (usually the user’s Safe / smart wallet) before you send the transaction.
Good to know
A few behaviors worth knowing before you build against this, confirmed by calling the live API directly:
userPositions is additive, not just contextual. If the user already has 1,500inapoolandyousimulatedepositing3,000 more, the returned position is sized for the combined 4,500—not3,000. Pass it in whenever you know where the user already is.
minSplit divides the amount evenly across that many pools. minSplit: 3 on 5,000returnsthree 1,666.67 positions, each with its own calldata.
- A chain can come back empty on purpose. If every candidate pool for a chain gets excluded (unstable APY, doesn’t clear the strategy’s risk bar, etc.), that chain’s entry in
data is [] and messages[chainId] explains why.
- An unmatched
pools filter isn’t a dead end. The call still returns success: true with an empty array for that chain, and messages[chainId] lists the pools that actually exist for that token/chain/strategy — handy for a “did you mean…” experience.
- Works for any supported chain/token combination — no special-casing needed for less common pairs.
Examples
Simplest call
Multiple chains, with a minimum split
Accounting for an existing position
Blended APY across a split