From the Curve team · every figure re-read from source on 20 August 2026, 13:35 UTC · Ethereum block 25,796,664 · Optimism block 155,817,081 · Arbitrum block 496,529,399
Hi team — first of all, thank you for supporting Curve in your API. We really appreciate the work you've put into it.
We've shipped a fair number of changes on our side since the integration was built, including Llamalend V2, and a few things in your Curve pages have drifted out of date. We've gathered everything in one place below so it's as little work as possible on your end. Whenever you have the capacity, we'd be very grateful if you could take a look — and of course we're happy to answer questions, hop on a call, or provide anything else that would help.
The pages this refers to: docs.yield.xyz/docs/curve and docs.yield.xyz/docs/curve-1.
Curve Lending now runs on a second factory, and the current docs cover V1 only. The V2 vaults expose exactly the same ERC-4626 interface (deposit / withdraw / convertToAssets), so nothing structural changes on your side.
Factory addresses, if you'd like to enumerate them yourselves — use market_count() and markets(uint256); note there is no vaults() getter on V2:
0x8f6b56ec5ddf1f2691a1059f1d3cd97ac9eab0bd (4 markets)0x5f94073e3f51c1fff92ffc6b4b06b7af193b3640 (3 markets)0xea6876dde9e3467564acbee1ed5bac88783205e0 (48), Arbitrum 0xcaec110c784c9df37240a8ce096d352a75922dea (22), Optimism 0x5ea8f3d674c70b020586933a0a5b250734798bef (5)| Collateral | Lends | Supplied | Lend APY | Vault (ERC-4626) | Controller |
|---|---|---|---|---|---|
| sfrxUSD | crvUSD | $11,278,772 | 2.31% | 0x3Da0F110079012387F47C6Fc6e878F10262E300a | 0x3cD4d86a2c65e57ce4b4121b67E2D2224BA41bbe |
| sDOLA | crvUSD | $7,639,470 | 1.86% | 0x2b5a321C3cb1F33e1ABECD047C2649D0b4C47eBa | 0xC77d97cF01737EB7aCE46cAb7cd9F60eC51a40c0 |
| syrupUSDC | crvUSD | $3,976,595 | 1.04% | 0xD0D347E14fbF1872affeaCb49d0b8B7182680E6C | 0x2fb54c8eae57767A9A509A395b9C4FA0702e2675 |
| svZCHF | crvUSD | $221,431 | 0.18% | 0xCb6e2c3d9Dba8fe6245B2c969320F2485dFce2FD | 0xFd85e847cDd2549f213E276e4B57B0690169F043 |
The receipt token is cvcrvUSD, the same as your existing entries, so your current ID scheme carries over unchanged — for example ethereum-crvusd-cvcrvusd-0x3da0f110079012387f47c6fc6e878f10262e300a-4626-vault.
| Collateral | Lends | Supplied | Lend APY | Vault (ERC-4626) | Controller |
|---|---|---|---|---|---|
| wstETH | WETH | $529,125 | 4.63% | 0x638eF78599C404A90545C6CFB460EFCfF8a019F7 | 0x745422BF49f3F6e4A8E12E4abD19339E7910F8C9 |
| wstETH | USDC | $375,361 | 3.82% | 0xaB504518C7B83ED6C67718877C4FFc2B52b29436 | 0xb5EC7A3D591877A66BE4f3eafdC4205E98A1BCAA |
| WBTC | USDC | $333,950 | 3.40% | 0xfF9a3085ed83dA377a94e32dd4745bB57411Ea24 | 0x9fC15ac3EF97093832f49B7997A58E29b49C56dE |
One thing worth flagging: these lend WETH and USDC rather than crvUSD, so the receipt tokens are cvWETH and cvUSDC, and the crvusd-cvcrvusd-… template doesn't map directly.
Three entries in the LP list are YieldBasis pools rather than Curve pools. YieldBasis is a separate product with its own app, and deposits into these markets are executed there, not through Curve. The Curve pool underneath is operated by the YieldBasis LEVAMM contract, which holds effectively the entire LP supply:
| Entry | Pool address | LP held by YieldBasis contracts |
|---|---|---|
| YB WBTC | 0xd9ff8396554a0d18b2cfbec53e1979b7ecce8373 | 99.95% |
| YB cbBTC | 0x83f24023d15d835a213df24fd309c47dab5beb32 | 99.96% |
| YB tBTC | 0xf1f435b05d255a5dbde37333c0f61da6f69c6127 | 99.94% |
In practice this means someone adding liquidity from a wallet does not end up with a YieldBasis position and won't earn what the listing implies — which is why we'd rather they weren't surfaced as Curve LP opportunities.
We'd love to do these properly, as a separate integration. YieldBasis markets take wrapped BTC and wrapped ETH, and we'd be glad to work with you on a dedicated YieldBasis integration so users can deposit into them through your API, matching the markets YieldBasis runs today. Happy to start that conversation whenever it suits you.
Two related notes. Please keep 0xec977f46467a3021785cff88894886e617abd65b (YB/crvUSD) — that one is an ordinary Curve pool for the YB token, with no YieldBasis contract holding LP.
And these newer YieldBasis pools are currently the largest Curve pools absent from your catalog, so they may look like obvious additions. They're the same machinery, and are best left out for now:
0x862cb4e988fb66e72f128d1183829f8c05b6c6a0 — $91,479,3540x313698667d7fdd6789a9bc70821309ff891e729a — $59,786,2740x656341ef90b622c6634e0573772ffb7f3669b9f3 — $56,012,8030x4f52c3a81e33521e5a9a47fd9d3be475d2279c2e — $36,119,6620x6e5492f8ea2370844ee098a56dd88e1717e4a9c2 — $8,586,981These are the ones we'd prioritise removing. In each, the vault's entire balance is lent out — the liquid borrow-token balance on the controller is zero, so maxWithdraw is zero for every depositor. A one-click deposit into them would leave users unable to withdraw.
| Collateral | Chain | Supplied | Liquid | Utilization | Lend APY | Vault |
|---|---|---|---|---|---|---|
| CRV | ethereum | $2,944,949 | 0 | 100% | 0.00% | 0xcea18a8752bb7e7817f9ae7565328fe415c0f2ca |
| IBTC | arbitrum | $82,108 | 0 | 100% | 0.00% | 0xe296ee7f83d1d95b3f7827ff1d08fe1e4cf09d8d |
| UwU | ethereum | $54,201 | 0 | 100% | 0.00% | 0x7586c58bf6292b3c9defc8333fc757d6c5da0f7e |
| FXN | arbitrum | $27,902 | 0.22 | 100% | 0.00% | 0xeba51f6472f4ce1c47668c2474ab8f84b32e1ae7 |
| pufETH | ethereum | $1,094 | 0 | 100% | 14.60% | 0xff467c6e827ebbea64da1ab0425021e6c89fbe0d |
| WETH | optimism | $132 | 0 | 100% | 12.75% | 0xe8dd743e376eca40cc9547236d46ed83e06fd471 |
The CRV market is the notable one — $2.94M supplied, zero liquidity and 0% lend APY, so depositors can neither withdraw nor earn.
Your Curve page notes that lending opportunities should exceed $10,000 TVL. These currently sit under it — entirely your call, but they may be adding noise:
| Collateral | Chain | Supplied | Vault |
|---|---|---|---|
| USDe | ethereum | $9,374 | 0xc687141c18f20f7ba405e45328825579fddd3195 |
| ynETHx | ethereum | $5,857 | 0xfc05ee9dec7275a273b1e1a8a821da3cdf752f9b |
| CRV | optimism | $5,707 | 0x2297d47020d2abd71fcf1b6dba0168b5c2d4380f |
| ycvxCRV | ethereum | $4,047 | 0xe5ee62f37825eed77215c9d2e9d424b79c62124a |
| sDOLA | ethereum | $3,081 | 0x14361c243174794e2207296a6ad59bb0dec1d388 |
| tBTC | arbitrum | $2,342 | 0x0e6ad128d7e217439beea90695fe7ec859c7f98c |
| ARB | arbitrum | $224 | 0x65592b1f12c07d434e95c7bf87f4f2f464e950e4 |
| EYWA | arbitrum | $8 | 0x747a547e48ee52491794b8ea01cd81fc5d59ad84 |
| WBTC | optimism | $3 | 0x451200382d931f62b2d2bc9c215d99aa106dc8d0 |
Borderline and working normally, so we'd leave them alone: sUSDS, asdCRV (Arbitrum), XAUM and sFRAX — all just above the threshold.
While cross-checking, we noticed 27 Curve pools above $1M TVL that aren't in the catalog. The flagship ETH/stETH pool is the one that stands out. No obligation at all — sharing in case it's useful:
| Pool | Chain | TVL | Address |
|---|---|---|---|
| Curve.fi ETH/stETH | ethereum | $93,460,971 | 0xdc24316b9ae028f1497c275eb9192a3ea0f67022 |
| Curve.fi Factory Pool: stETH-ng | ethereum | $22,071,176 | 0x21e27a5e5513d6e65c4f830167390997aa84843a |
| apyUSD-apxUSD | ethereum | $19,217,952 | 0xe41be7b340f7c2eda4da1e99b42ee1b228b526b7 |
| AUSD/USDC | ethereum | $15,002,363 | 0xe79c1c7e24755574438a26d5e062ad2626c04662 |
| strUSD/trUSD | ethereum | $10,076,439 | 0x25a637c80ad90177d0b3ff28aa2d3f74f7165ccb |
| World Liberty USD1 Pool | ethereum | $10,048,086 | 0xc09e82f81cb811db0922dd48206fc2e212322caf |
| USAT/USDT | ethereum | $10,006,414 | 0x0bdb2c3af83ee1d3196fa64d3162e54624b5f6b0 |
| USDC/USDat | ethereum | $9,566,819 | 0xf4d0cf32908b2c7f1021339c43df0f77f06896d7 |
| apxUSD-USDC v3 | ethereum | $6,989,458 | 0x6f63deedc9870d6c16fc644c6654748352cdc87c |
| trUSD/USDC | ethereum | $5,151,442 | 0xb723a224c9acf3891b20437b4d55dd45600f5fa3 |
| frxUSD/trUSD | ethereum | $4,878,821 | 0xd1d954bc94c843815ec7b8119f2de00af27fa6ff |
| HemiBTC/cbBTC/WBTC | ethereum | $3,401,903 | 0x66039342c66760874047c36943b1e2d8300363bb |
| evaUSDC/evaUSDT | ethereum | $3,366,549 | 0x3c0965582db7a0f660d491aa6174b9438f911c21 |
| FIDD/USDC | ethereum | $2,747,634 | 0xe47e8ced9d94aa43c922627782e29b41a93202af |
| iREET/pmUSD | ethereum | $2,747,507 | 0x57129759d0e23116c1e7402dbc084e53d2e209a2 |
| USD3/frxUSD | ethereum | $2,543,019 | 0x7ba89bc658c07569cfa6d7947adaa80181a24568 |
| pmUSD/frxUSD | ethereum | $2,385,604 | 0xbf5047039f2980c21eb5692c790bad8a9533b900 |
| DUSD/frxUSD | ethereum | $2,214,247 | 0x104d6a1b97a6cef88d905d7b865a378d90be932a |
| alUSD/frxUSD | ethereum | $2,203,081 | 0x17f9682c9cd1a448b31c0428f1d0783ed13a9fa3 |
| pmUSD/crvUSD | ethereum | $2,127,829 | 0xecb0f0d68c19bdaadaebe24f6752a4db34e2c2cb |
| USG/frxUSD | ethereum | $1,925,697 | 0xefc056790bb19702b2164ec6ea6ba3ae01d81195 |
| ftUSD/USDC | ethereum | $1,876,381 | 0xafec61e7a604f8f81f7cab64ec75bfa07c542630 |
| FIDD/USDT | ethereum | $1,750,402 | 0x8273cb2cf9af3228fd14af25b5b1de2a9676c372 |
| Curve.fi Factory Crypto Pool: cbETH/WETH | base | $1,626,426 | 0x11c1fbd4b3de66bc0565779b35171a6cf3e71f59 |
| USG/USDC | ethereum | $1,461,582 | 0x97ba10115da528c113462ede9c20d7adc806d93f |
| frxUSD/sDOLA | ethereum | $1,013,528 | 0x9d8afd5ce19a3b948049468188f1de13951a4383 |
| USDQ/USDT | ethereum | $1,000,327 | 0x5a8c7623fee10542614e492c670a67e3dfe922f8 |
Today the integration surfaces the native yield only — lending APY, or trading fees for LP. Every Curve market also has a gauge that streams CRV on top: the receipt token (cvcrvUSD for lending, the LP token for pools) is staked in the gauge, and CRV accrues to the staked position — claimed through the Minter on Ethereum, or with claim_rewards() on the gauge itself on other chains. All 37 lending markets currently in your docs, and all four new V2 markets, have one.
If the staked leg is something your architecture can accommodate, users would earn lending APY plus CRV rather than lending APY alone, and the integrator collects the CRV. We'd be glad to send the full spec and help with the implementation — just let us know whether it looks feasible on your side.
api.curve.finance/v1/getLendingVaults/all, then independently re-enumerated from the factory contracts on-chain. The counts matched exactly: Ethereum V1 48/48, Arbitrum V1 22/22, Optimism V1 5/5, Ethereum V2 4/4, Optimism V2 3/3.symbol(), asset(), totalAssets(), controller() and factory(), plus the borrow-token balance of the controller — the liquidity a depositor can actually withdraw — via Multicall3.balanceOf / totalSupply reads at the block above; the holder addresses were found from the pools' Transfer logs and their contract names read from the verified sources.If anything here is unclear, or you'd like it in a different format — a CSV, a JSON payload, a PR against your docs — just say the word and we'll put it together. Thanks again for the integration.