Margin assets a leveraged open accepts
GET/v1/actions/loop/leverage/pay-assets
Which assets can fund the margin (payAsset) of a leveraged open on this pair.
The discovery companion to /v1/actions/loop/leverage: give it the same marketUidIn (debt) and marketUidOut (collateral) and it returns the assets the leverage builder will actually accept — so a client can render a "pay with" choice without hard-coding every lender's margin rule, and without sending a build only to be refused. slippage and account are not needed.
Reads nothing on chain. The answer is a pure function of (lender, collateral, debt, chain) — the very table the leverage endpoint enforces before building — so the two cannot disagree. Rules, per lender family:
- Composer lenders (Aave, Compound, Venus, Fluid, Silo, Lista, Gearbox, Aave V4, Init, Dolomite, Euler; also Morpho Blue and Midnight, whose bundler3 route falls back to the composer for a native margin): the collateral, the debt, and NATIVE when the wrapped native is one of the two (wrapped in the same transaction). A market keyed to the native asset itself (Fluid ETH vaults) lists the zero address as that side.
- Chains where the native balance is also an ERC-20 (Arc
0x3600…, Celo's GoldToken, Metis/Mantle0xdead…, Polygon0x…1010): when the market holds that ERC-20 VIEW, a nativepayAssetis served AS it — approval +transferFrom, nomsg.value, nothing wrapped — withpayAmounttaken in native units (rescaled on Arc, 18 → 6). When the market holds a real wrapper (WMETIS) the wrap leg applies as usual. Where a real wrapper sits at a different scale (Hedera's 8-decimal WHBAR) native is not offered. See NATIVE_ASSET_FORMS.md. - LlamaLend: collateral or borrowed token, never native.
- Curvance / Fraxlend / Resupply: the collateral only — the protocol's own leverage entrypoint pulls it verbatim.
- Twyne: the collateral only;
strict: falsebecause any other asset is answered withZAP_REQUIREDcarrying a swap quote (a two-step route) rather than a refusal. - Term Finance: the purchase token (debt), the PT collateral, or native when the purchase token is the wrapped native.
- Exactly: the debt asset only (the fresh capital is deposited into the one market the DebtManager loops).
- Flying Tulip: the collateral, or native when the collateral is the wrapped native — deposited inside the loop transaction by a signed MetaActions deposit.
Response (data): payAssets[] in preference order, each row currency-list ready — chainId, address (native = the zero address), symbol, name, decimals, logoURI, assetGroup from the token list where curated — plus role (collateral | debt | native) and, for native, wrapsTo / wrapsRole (the wrapped token it lands as and which side that is). Also collateralAsset, debtAsset, strict (whether the leverage endpoint refuses anything outside the list up front) and notes[] (caveats worth showing, e.g. that route=bundler3 pinned on Morpho cannot take native).
Errors mirror the leverage endpoint's own (UNSUPPORTED_LENDER, INVALID_PARAM, the SmartLP / Fluid-smart refusals).
Plain-text reference — GET /v1/actions/loop/leverage/pay-assets
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
marketUidIn | query | string | yes | Debt market (lender:chainId:address) — as on /loop/leverage. |
marketUidOut | query | string | yes | Collateral market (lender:chainId:address) — as on /loop/leverage. |
Response 200
| Field | Type | Description |
|---|---|---|
success | True | |
data | object | Informational payload. null when the endpoint only builds calldata. |
actions | null |
Example response
{
"success": true,
"data": {}
}
Request
Responses
- 200
- 400
- 429
- 500
- 502
The accepted margin assets for this pair
Validation error
Rate limited. Unauthenticated callers share a per-IP budget; send an x-api-key header to lift it. Retry with exponential backoff.
Unexpected server error. Safe to retry with backoff.
An upstream data source or protocol origin failed (error.code is ORIGIN_FAILED). error.details carries the per-origin status. This is also what a missing or malformed required parameter currently returns, rather than a 400.