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.