POST /v2/wallets/quote to turn the requirements for your use case into a set of optimal yield source positions you can use to create a Portfolio Wallet.
Yield sources are the underlying yield opportunities (e.g. resolv-lp, syrup-usdc, usdz). A strategy is a combination of allocations across one or more yield sources.
The key idea: you tell us what you care about (APY vs withdrawal speed), and we return a small set of optimal allocations. For a given set of requirements, this endpoint will return a set of positions where each option represents a best-possible tradeoff, meaning there is no alternative that both withdraws faster and earns a higher APY at the same time.
What the /quote endpoint does
- Input: high-level constraints and preferences (e.g. “at least 40% instant liquidity” and/or “at least 5% blended APY”).
- Output: an array of quote options, each with a
positions[]allocation (percentages sum to 100) and a predicted blended rate.
constraintsSatisfied: true.
When the inputs can’t all be satisfied at once, you still get 200 OK with multiple Pareto-optimal options that make the trade-off explicit (optimize for either APY or LIQUIDITY).
Before you start: use the yield source catalog
The quote engine only allocates across yield sources that exist in the yield source catalog:GET /v2/wallets/yield-sources(preferred)
Step 1: Decide what to optimize for
Most integrations start from one (or both) of these product requirements:- Yield: “I want at least X blended APY.”
- Withdrawal speed: “I need at least Y% of funds withdrawable within Z time.”
Liquidity constraints (withdrawal speed)
If you need a minimum percentage of capital to be instantly withdrawable, include a liquidity constraint in your quote request:maxProcessingTimeis an ISO 8601 duration (e.g.PT0Hfor instant,PT24Hfor up to 24 hours).minWeightBpsis in bps out of 10,000 (so4000means 40%).
Yield targets
To ask for a minimum blended APY, includeminApyTargetBps (bps):
Step 2: Call POST /v2/wallets/quote
Request fields:
| Field | Required | Description |
|---|---|---|
requestId | Yes | UUID v4 idempotency key |
minApyTargetBps | No | Minimum blended APY in bps |
liquidityConstraints | No | Array of { maxProcessingTime, minWeightBps } |
yieldSourceTypes | No | Filter by internal yield source type |
exclusions | No | Exclude yield sources by ID |
withdrawalDestination | No | { destinationChain, destinationToken } — attaches per-position withdrawal time estimates |
cURL
Step 3: Evaluate the response (Pareto-optimal options)
The response is an array of quote options. Each option is one Pareto-optimal point:positions[]: allocations withyieldSourceId,name, andpct(percentages sum to 100)blendedRateBps: predicted blended APY for the option (bps)constraintsSatisfied: whether the option satisfies all requested constraints
Example: constraints satisfied (single recommendation)
You’ll often get a single option withconstraintsSatisfied: true:
Example: constraints cannot be met (still 200 OK)
Quotes always return 200 OK with an array of options. If the quote engine can’t find an allocation that satisfies all inputs, you’ll get multiple Pareto-optimal options that trade off yield vs liquidity.
In this scenario, the customer wants at least 50% instant liquidity (PT0H) and a minimum blended APY target, but those requirements can’t be met simultaneously. The response includes:
- one option that optimizes for APY
- one option that optimizes for LIQUIDITY (withdrawal speed)
- If you pick the APY option, you maximize blended yield but accept slower withdrawals.
- If you pick the LIQUIDITY option, you meet your desired withdrawal speed but accept a lower blended yield.
Step 4: create a wallet using the chosen positions
Pick the option you want, then pass its allocations into the strategy.allocations array when calling POST /v2/wallets.
Notes:
- Each allocation uses
yieldSourceId(from the quote’spositions[].yieldSourceId) andpct(percentage, summing to 100). - Extra per-position fields from quotes (like
currentApy,name, andmaxProcessingTime) are informational and not passed to the create endpoint.