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
| Segment | Rules |
|---|---|
lender | Upper snake case, from the LenderId set. AAVE_V3, not aave-v3, Aave V3, or aaveV3. |
chainId | Decimal chain id. 1 for Ethereum, 8453 for Base. |
address | Case-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 family | address is |
|---|---|
| Aave V2/V3/V4, Morpho, Compound V3 | the underlying asset (e.g. WETH) |
| Compound V2 family | the cToken |
| Init Capital | the 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:
| Intent | Send |
|---|---|
| 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:
| Value | Meaning |
|---|---|
1 | 0.01% |
50 | 0.5% |
100 | 1% |
Passing 0.5 expecting half a percent gives you 0.005% and a reverting
transaction.
Related
- Quickstart — the four-call integration path
- Errors & retries