Skip to main content

Market identifiers

Almost every endpoint addresses a lending market with a marketUid. Getting this string right is most of the work of integrating.

Format​

lender:chainId:address
AAVE_V3:1:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
│ │ └─ the underlying asset, not the receipt token
│ └─── EVM chain id, decimal
└─────────── protocol identifier, upper snake case
SegmentRules
lenderUpper snake case, from the LenderId set. AAVE_V3, not aave-v3, Aave V3, or aaveV3.
chainIdDecimal chain id. 1 for Ethereum, 8453 for Base.
addressCase-insensitive hex. Responses return it lowercase; you may send it checksummed.

Which address?​

The last segment is not always the token users hold. It depends on the protocol's own model:

Lender familyaddress is
Aave V2/V3/V4, Morpho, Compound V3the underlying asset (e.g. WETH)
Compound V2 familythe cToken
Init Capitalthe pool

Do not construct a marketUid by hand from a token address and hope. Read it from a /v1/data/lending/pools response, where every item carries its own marketUid verbatim.

Lender ids​

185 protocol identifiers are supported. The canonical list is available three ways:

curl "https://portal.1delta.io/v1/data/lender-ids"
{
"success": true,
"data": ["AAVE_V3", "AAVE_V3_PRIME", "AAVE_V2", "SPARK", "ZEROLEND", "..."],
"actions": null
}

It is also published as the LenderId schema in openapi.json, so a generated client gets it as a typed enum, and listed in full in llms-full.txt.

Many protocols have several deployments with distinct ids — AAVE_V3, AAVE_V3_PRIME, AAVE_V3_ETHER_FI and AAVE_V3_HORIZON are four separate markets with different rates and risk parameters. Treat them as unrelated.

Chain ids​

47 chains are supported. Chain ids are sent and returned as decimal strings, not numbers — "1", not 1.

curl "https://portal.1delta.io/v1/data/chains"
{
"success": true,
"data": {
"items": [
{ "chainId": "1", "name": "Ethereum" },
{ "chainId": "10", "name": "OP" },
{ "chainId": "8453", "name": "Base" }
]
},
"actions": null
}

Published as the ChainId schema in the spec, with each value's chain name attached.

Amounts​

Every amount crossing the API is a raw integer in the token's smallest unit, encoded as a string:

IntentSend
1 WETH (18 decimals)"1000000000000000000"
10 USDC (6 decimals)"10000000"
0.5 WBTC (8 decimals)"50000000"

Decimals come from the market data (decimals on the asset). Never send a human-readable decimal string — "1.0" is not a valid amount.

Rates, by contrast, are returned as human-scaled percentages (1.416… = 1.42% APR), and ratios such as utilization and ltv are fractions between 0 and 1.

Basis points​

slippage and similar tolerances are in basis points:

ValueMeaning
10.01%
500.5%
1001%

Passing 0.5 expecting half a percent gives you 0.005% and a reverting transaction.