Skip to main content

OptimizerPairsResponse

chainIdsstring[]

EVM chain ids, as decimal strings. See the ChainId schema.

collateralsstring[]
debtsstring[]
collateralAmountnumber
collateralAmountUsdnumber
debtAmountnumber
debtAmountUsdnumber
startinteger
countinteger

Number of entries in items.

items object[]

The result set for this response.

  • Array [
  • chainIdstring

    EVM chain id, as a decimal string. See the ChainId schema.

    lenderstring

    Protocol identifier. See the LenderId schema.

    fixedTerm objectnullable

    Fixed-term descriptor for this pair's lender, joined by lender key. Absent on variable-rate lenders. For Term Finance (model: "term"), gate the borrow/loop CTA on fixedTerm.auction.canBorrow: origination only happens inside scheduled sealed-bid auction rounds and most repos sit between rounds, so a pair can carry a maturity, an LTV and a rate and still be impossible to borrow. Note also that aprBase/aprTotal on such a pair are computed against a variableBorrowRate of 0 and therefore read as an enormous leveraged yield with a free debt leg — show them as indicative, not obtainable, whenever canBorrow is false.

    modelstring

    Underlying fixed-term protocol shape.

    Possible values: [lista, midnight, term, exactly, teller, termmax]

    Example: term
    maturityintegernullable

    Single fixed calendar maturity, unix seconds. Absent for rolling-duration menus (Lista) and multi-maturity markets (Exactly — the menu lives on terms[]).

    fees object

    Market-level fees: continuousFeeApr (%/yr lender-side haircut, Midnight), settlementFee (fraction at the current TTM, Midnight), latePenaltyApr (%/yr on overdue debt, Exactly), originationFeePercent (upfront % of principal, Teller). Empty for lenders without them.

    property name*any

    Market-level fees: continuousFeeApr (%/yr lender-side haircut, Midnight), settlementFee (fraction at the current TTM, Midnight), latePenaltyApr (%/yr on overdue debt, Exactly), originationFeePercent (upfront % of principal, Teller). Empty for lenders without them.

    earlyRepay object

    Early-repayment policy: { kind: "none" | "penalty" | "discount" }. none = exit any time at market price; penalty = per-loan penalty (amount is position-level); discount = repaying early costs LESS than face value (Exactly).

    property name*any

    Early-repayment policy: { kind: "none" | "penalty" | "discount" }. none = exit any time at market price; penalty = per-loan penalty (amount is position-level); discount = repaying early costs LESS than face value (Exactly).

    provider object

    Who fronts the term: { kind: "broker" | "orderbook" | "auction" | "pool", address? }. auction markets carry the auction window below and can only be borrowed inside a round.

    property name*any

    Who fronts the term: { kind: "broker" | "orderbook" | "auction" | "pool", address? }. auction markets carry the auction window below and can only be borrowed inside a round.

    auction object

    Origination window for a fixed-term market whose terms are only obtainable during a bounded round rather than continuously — Term Finance (fixedTerm.provider.kind = "auction"). Served on fixedTerm.auction; ABSENT on lenders whose terms are continuously available, and absent is NOT the same as closed.

    This is the difference between "the rate card is empty right now" and "this market cannot be borrowed at all": between rounds a Term repo still has a maturity, collateral params and a last-cleared rate, but nothing can be borrowed. Most repos are between rounds at any given time.

    statusstring

    upcoming — a round is listed but not yet accepting submissions. open — accepting sealed bids/offers. revealing — bidding shut, sealed prices revealing and the round clearing. closed — no round is listed. Snapshot at fetch time; re-derive from the timestamps against the current clock when reading a cached response.

    Possible values: [upcoming, open, revealing, closed]

    Example: open
    canBorrowboolean

    Can a NEW borrow be opened right now? Gate the borrow CTA on this, not on status and not on the presence of a rate — it stays correct if more statuses are added. True only inside an open round: Term borrow origination is a sealed bid, so there is no other entry point.

    Example: true
    canLendboolean

    Can a NEW lend position be opened right now? Deliberately independent of canBorrow — the primary auction is only one of two lend surfaces, and buying repo tokens on the secondary market works between rounds. A closed round therefore leaves the market lend-only, not inert; greying out the whole market would be wrong.

    Example: true
    secondsUntilCloseintegernullable

    Seconds until submissions close (revealTime − now). Absent unless a round is open. A snapshot — for a live countdown derive from revealTime, since responses are cached.

    Example: 263000
    implicationsstring[]

    Ready-to-display consequences of this market's origination model, most important first (same convention as params.market.teller.implications). Auction mechanics are unusual enough that showing only a rate misleads.

    idstringnullable

    Auction round id. Absent when status: "closed".

    startTimeintegernullable

    Submissions open, unix seconds. Absent when closed.

    revealTimeintegernullable

    Submissions CLOSE and sealed prices begin revealing, unix seconds — the deadline to act. Absent when closed.

    endTimeintegernullable

    Round clears, unix seconds. Equal to revealTime on current deployments. Absent when closed.

    minBorrowAmountstringnullable

    Minimum bid (borrow) size for this round, loan-token BASE units. A real floor (e.g. "1000000000" = 1000 USDC) — a smaller amount cannot be submitted at all, so validate before building the action rather than surfacing a failed transaction.

    Example: 1000000000
    minLendAmountstringnullable

    Minimum offer (lend) size for this round, loan-token BASE units.

    Example: 1000000000
    marketLongUidstring

    Market UID of the collateral side

    marketShortUidstring

    Market UID of the debt side

    marketNameLongstringnullable

    Display name of the collateral market/vault (e.g. the Euler eVault name). Disambiguates rows that share the collateral/debt token symbols and lender.

    marketNameShortstringnullable

    Display name of the debt market/vault. For Euler this is the controller (debt) eVault — the primary way to tell otherwise-identical WETH→USDC rows apart.

    curatorNameLongstringnullable

    Curator/brand of the collateral market (Euler: resolved from the vault governor). Null for lenders without a curator, or until the curator registry is seeded. Render as "curatorName + symbol", falling back to marketNameLong.

    curatorNameShortstringnullable

    Curator/brand of the debt (controller) market. Same semantics as curatorNameLong.

    assetLongstring
    assetShortstring
    assetGroupLongstring
    assetGroupShortstring
    symbolLongstring

    Collateral token symbol

    nameLongstring

    Collateral token name

    symbolShortstring

    Debt token symbol

    nameShortstring

    Debt token name

    aprBasenumber

    Leverage-weighted net APR % EXCLUDING rewards — the SUSTAINABLE rate (reward incentives are typically transient).

    aprTotalnumber

    Leverage-weighted net APR % INCLUDING rewards. The reward contribution is aprTotal − aprBase.

    maxLeveragenumber

    Highest leverage multiple reachable in this market.

    ltvnumber

    Loan-to-value ratio, as a fraction between 0 and 1.

    depositAprLongnumber

    Effective deposit APR (depositRate + intrinsicYield)

    borrowAprShortnumber

    Effective borrow APR % (borrowRate + intrinsicYield − rewards, plus any 1y-amortized origination fee — see originationFeeShort). For Liquity-family CDPs the amortized origination fee is the whole borrow cost (variable rate is 0).

    originationFeeShortnumbernullable

    One-time origination / mint fee on the debt side, PERCENT (Liquity-family CDPs: River, Felix, Nerite, Ebisu, Soneta, USDAf, Liquity). NOT an APR — it is already folded (1y-amortized) into borrowAprShort / aprTotal, and surfaced raw so consumers can re-amortize over a different holding horizon. Null/absent for markets without one.

    totalDepositsUsdLongnumber
    totalDepositsUsdShortnumber
    totalDebtUsdLongnumber
    totalDebtUsdShortnumber
    totalLiquidityUsdLongnumber
    totalLiquidityUsdShortnumber
    borrowLiquidityShortnumber
    utilizationLongnumber
    utilizationShortnumber
    maxDebtAmountnumber

    Max borrowable amount given collateral (only when collateralAmount/collateralAmountUsd param provided)

    maxDebtAmountUsdnumber

    USD value of maxDebtAmount

    minCollateralAmountnumber

    Min collateral needed for debt amount (only when debtAmount/debtAmountUsd param provided)

    minCollateralAmountUsdnumber

    USD value of minCollateralAmount

    borrowAprAtAmountnumbernullable

    Effective borrow APR % at the computed debt notional: the headline borrowAprShort with only its organic (IRM) component re-priced at the post-borrow utilization (intrinsic + rewards are size-invariant). Present when an amount is supplied; null for non-curve lenders and brokered debt markets.

    depositAprAtAmountnumbernullable

    Effective supply APR % at the collateral notional: the headline depositAprLong with only its organic (IRM) component re-priced at the post-deposit utilization. Present when an amount is supplied; null for non-curve lenders.

    netAprAtAmountnumbernullable

    Leverage-weighted net position APR % on equity at the supplied amount, using the effective legs (INCLUDING rewards). Same components as aprTotal (directly comparable), but at the position's actual size/leverage. Null when equity is non-positive or a leg is unavailable.

    netAprAtAmountBasenumbernullable

    Net APR % at the supplied amount EXCLUDING rewards — the sustainable at-size rate (netAprAtAmount with per-leg rewards stripped). The at-size reward contribution is netAprAtAmount − netAprAtAmountBase. Null when netAprAtAmount is.

    borrowDepthShort objectnullable

    Debt-market rate-vs-amount borrow grid. Only when depth=true.

    property name*anynullable

    Debt-market rate-vs-amount borrow grid. Only when depth=true.

    supplyDepthLong objectnullable

    Collateral-market rate-vs-amount supply grid. Only when depth=true.

    property name*anynullable

    Collateral-market rate-vs-amount supply grid. Only when depth=true.

    risk object

    Per-dimension risk for the pair. No composite headline score — take the worst (highest) breakdown entry if you need one.

    maxTokenScoreintegernullable

    Worse of the two sides' token risk scores.

    breakdown object[]

    One entry per dimension: config (market/e-mode configuration), chain, lender (protocol), tokenLong (collateral asset), tokenShort (debt asset), and curation — the last present ONLY for lenders that have curators (Morpho Blue, Euler). Scores are 1-5, higher = riskier; 0/null means unassessed and is labelled "unknown".

  • Array [
  • categorystring
    Example: lender
    scoreintegernullable

    Normalized risk score — lower is safer.

    labelstring

    Possible values: [low, medium, high, unknown]

    curatorIdsstring[]nullable

    curation only: curator slugs of the pair's two markets, unioned. The pair's curation score is the WORSE of its two legs — an Euler position spanning a curated collateral vault and an uncurated controller is only as curated as the controller.

  • ]
  • ]
  • OptimizerPairsResponse
    {
    "chainIds": [
    "string"
    ],
    "collaterals": [
    "string"
    ],
    "debts": [
    "string"
    ],
    "collateralAmount": 0,
    "collateralAmountUsd": 0,
    "debtAmount": 0,
    "debtAmountUsd": 0,
    "start": 0,
    "count": 0,
    "items": [
    {
    "chainId": "string",
    "lender": "string",
    "fixedTerm": {
    "model": "term",
    "maturity": 0,
    "fees": {},
    "earlyRepay": {},
    "provider": {},
    "auction": {
    "status": "open",
    "canBorrow": true,
    "canLend": true,
    "secondsUntilClose": 263000,
    "implications": [
    "string"
    ],
    "id": "string",
    "startTime": 0,
    "revealTime": 0,
    "endTime": 0,
    "minBorrowAmount": "1000000000",
    "minLendAmount": "1000000000"
    }
    },
    "marketLongUid": "string",
    "marketShortUid": "string",
    "marketNameLong": "string",
    "marketNameShort": "string",
    "curatorNameLong": "string",
    "curatorNameShort": "string",
    "assetLong": "string",
    "assetShort": "string",
    "assetGroupLong": "string",
    "assetGroupShort": "string",
    "symbolLong": "string",
    "nameLong": "string",
    "symbolShort": "string",
    "nameShort": "string",
    "aprBase": 0,
    "aprTotal": 0,
    "maxLeverage": 0,
    "ltv": 0,
    "depositAprLong": 0,
    "borrowAprShort": 0,
    "originationFeeShort": 0,
    "totalDepositsUsdLong": 0,
    "totalDepositsUsdShort": 0,
    "totalDebtUsdLong": 0,
    "totalDebtUsdShort": 0,
    "totalLiquidityUsdLong": 0,
    "totalLiquidityUsdShort": 0,
    "borrowLiquidityShort": 0,
    "utilizationLong": 0,
    "utilizationShort": 0,
    "maxDebtAmount": 0,
    "maxDebtAmountUsd": 0,
    "minCollateralAmount": 0,
    "minCollateralAmountUsd": 0,
    "borrowAprAtAmount": 0,
    "depositAprAtAmount": 0,
    "netAprAtAmount": 0,
    "netAprAtAmountBase": 0,
    "borrowDepthShort": {},
    "supplyDepthLong": {},
    "risk": {
    "maxTokenScore": 0,
    "breakdown": [
    {
    "category": "lender",
    "score": 0,
    "label": "low",
    "curatorIds": [
    "string"
    ]
    }
    ]
    }
    }
    ]
    }