openapi: 3.0.0 info: title: Pendle V2 API Docs Assets Markets API description: "\n## Terms used in the documentation/API\n\nBelow are some terms used in the documentation/API:\n\n- Pendle Assets/Tokens: PT, YT, LP, SY\n- Non-Pendle Assets: other tokens that are not Pendle assets, such as USDC, USDT, DAI, etc.\n- Asset ID/Token Id: Is the combination of chain id and token address, e.g. 1-0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650\n- Computing unit: Cost of an API call, this is use to rate limit the API calls. More on it at [our document](https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview#rate-limiting)\n- APY/APR/ROI Format: All APY, APR, and ROI values are returned as decimals. For example, 0.5 means 50%, 0.05 means 5%, 1.2 means 120%\n- Percentage Change Format: All percentage change values (e.g., 24h changes) are returned as decimals. For example, 0.05 means 5% change\n- Logarithmic Values: Some fields like `lnImpliedRate` are natural logarithms. To get the actual rate, use e^(value)\n\n## Recommended way to fetch data\n\nWe have a lot of markets, if you call an API for each market, it will be very slow and you will likely get rate limited. Therefore, in some APIs we support fetch all data at once (example the get all markets data, get all assets data/prices), you could use that to fetch all data at once. They also support filter by asset id, type, so if you don't want to fetch, you can filter it down to the specific ones you want.\n\nFor detailed documentation, visit:\n\n[https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview](https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview)\n\n## Support\n\n- We have a telegram for developers to ask about the API at [https://t.me/peepo_the_engineer_bot](https://t.me/peepo_the_engineer_bot)\n- We have an announcement channel for API updates at [https://t.me/pendledevelopers](https://t.me/pendledevelopers), follow it to get the latest updates on the API.\n\n## FAQ\n\n- How to fetch prices for assets?\n * Use [Get asset prices by IDs](#tag/assets/get/v1/prices/assets)\n\n- What if i want real time prices?\n * Price in our systems are calculate every 15 seconds. However, if you want real time prices, use [Swapping price](#tag/sdk/get/v1/sdk/{chainId}/markets/{market}/swapping-prices), it return price for PT/YT when swapping with underlying token and vice versa, we don't have real time prices for other assets.\n\n- Can i use the SDK to get price, instead of using the `swapping-price` endpoint?\n * **Don't use the SDK to get price**, we don't recommend it. SDK endpoints are designed for you to get the calldata for **sending transaction**, not for getting the price. Also, SDK endpoints are very costly and will get rate limited easily if you use it to get price of many tokens. \n\n- How to get token names, expiries, etc?\n * Use [Get asset metadata by IDs](#tag/assets/get/v1/assets/all)\n\n- Do you have historical data, breakdown to minutes?\n * No we don't, all historical data is aggregated to hourly/daily/weekly data.\n" version: '1.0' contact: {} servers: - url: http://127.0.0.1:9000 tags: - name: Markets paths: /v1/markets/all: get: description: 'Returns the complete list of whitelisted Pendle markets across all supported chains with their metadata and current data. Filter by `chainId`, `isActive`, or `ids` (comma-separated market IDs in `chainId-address` format). This is the recommended starting point for discovering and monitoring Pendle markets across all chains. For chain-scoped data with additional fields, use [Get markets](#tag/markets/get/v1/{chainId}/markets) instead.' operationId: MarketsCrossChainController_getAllMarkets parameters: - name: isActive required: false in: query description: Filter to active or inactive markets schema: type: boolean - name: chainId required: false in: query description: Filter to markets on a specific blockchain network schema: type: number - name: ids required: false in: query description: Market ids to fetch metadata for (comma-separated), leave blank to fetch all markets. Up to 20 ids allowed. schema: example: 1-0x7b246b8dbc2a640bf2d8221890cee8327fc23917,1-0x44474d98d1484c26e8d296a43a721998731cf775 type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetMarketsCrossChainResponse' summary: Get all markets (cross-chain) tags: - Markets x-computing-unit: '1' x-retail-api-rank: 1 /v1/markets/points-market: get: description: 'Returns all active markets that have a points reward programme — markets where trading or providing liquidity earns points from the underlying protocol. The response includes the points configuration for each market (point name, reward rate, etc.) and the associated market ID. To fetch full market metadata for these markets, call [Get all markets](#tag/markets/get/v1/markets/all) and filter by the returned IDs.' operationId: MarketsCrossChainController_getPointsMarkets parameters: - name: isActive required: false in: query description: Filter to active or inactive markets deprecated: true schema: type: boolean - name: chainId required: false in: query description: Filter to markets on a specific blockchain network schema: type: number responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetPointsMarketsResponse' summary: Get points markets tags: - Markets x-computing-unit: '1' x-retail-api-rank: 2 /v2/{chainId}/markets/{address}/data: get: description: 'Returns the latest or historical data snapshot for a given market. Pass a `timestamp` query param (Unix seconds) to retrieve the market state at a specific point in time. Omit it for the current snapshot. For time-series data (charts/analytics), prefer the [historical-data](#tag/markets/get/v2/{chainId}/markets/{address}/historical-data) endpoint.' operationId: MarketsController_marketData_v2 parameters: - name: chainId required: true in: path schema: type: number - name: address required: true in: path schema: type: string - name: timestamp required: false in: query schema: format: date-time type: string responses: '200': description: Returns market latest detailed data content: application/json: schema: $ref: '#/components/schemas/MarketDataResponse' summary: Get latest/historical market data by address tags: - Markets x-retail-api-rank: 6969 /v2/{chainId}/markets/{address}/historical-data: get: description: "\nReturns the time-series data for a given market. Useful to draw charts or do data analysis.\n\nThis endpoint supports field selection via the `fields` query parameter. \n\nTable below shows the available fields and their descriptions.\n\n| Field | Description |\n|-------|-------------|\n| timestamp | Timestamp in ISO format|\n| baseApy | APY including yield, swap fee and Pendle rewards without boosting|\n| impliedApy | Implied APY of market|\n| lastEpochVotes | Last epoch votes|\n| lpPrice | LP price in USD|\n| lpRewardApy | APY from LP reward tokens|\n| maxApy | APY when maximum boost is applied|\n| pendleApy | APY from Pendle rewards|\n| ptPrice | PT price in USD|\n| swapFeeApy | Swap fee APY for LP holders, without boosting|\n| syPrice | SY price in USD|\n| totalPt | Total PT in the market|\n| totalSupply | Total supply of the LP token|\n| totalSy | Total SY in the market|\n| totalTvl | Market total TVL (including floating PT that are not in the AMM) in USD|\n| tradingVolume | 24h trading volume in USD|\n| tvl | Market liquidity (TVL in the pool) in USD|\n| underlyingApy | APY of the underlying asset|\n| underlyingInterestApy | Annual percentage yield from the underlying asset interest|\n| underlyingRewardApy | Annual percentage yield from the underlying asset rewards|\n| voterApr | APY for voters (vePENDLE holders) from voting on this pool|\n| ytFloatingApy | Floating APY for YT holders (underlyingApy - impliedApy)|\n| ytPrice | YT price in USD|\n\n\nReturns at most 1440 data points.\n\nThe cost for the endpoint is based on how many data points are returned. The calculation is: `ceil(number of data points / 300)`.\n\nAt 1440 data points (which is 2 months of data with an hourly interval, or 4 years with a daily interval), the cost will be 5 computing units.\n\n" operationId: MarketsController_marketHistoricalData_v2 parameters: - name: chainId required: true in: path schema: type: number - name: address required: true in: path schema: type: string - name: time_frame required: false in: query schema: default: hour enum: - hour - day - week type: string - name: timestamp_start required: false in: query schema: format: date-time type: string - name: timestamp_end required: false in: query schema: format: date-time type: string - name: fields required: false in: query description: "Comma-separated list of fields to include in the response. Use `all` to include all fields. Available fields could be found in the table above. \n\nAlthough you could use `all` to include all fields, it is not recommended because the bigger the payload is, the slower the response will be." schema: default: underlyingApy,impliedApy,maxApy,baseApy,tvl example: timestamp,maxApy,baseApy,underlyingApy,impliedApy,tvl,totalTvl,underlyingInterestApy,underlyingRewardApy,ytFloatingApy,swapFeeApy,voterApr,pendleApy,lpRewardApy,totalPt,totalSy,totalSupply,ptPrice,ytPrice,syPrice,lpPrice,lastEpochVotes,tradingVolume type: string - name: includeFeeBreakdown required: false in: query description: "Whether you want to fetch fee breakdown data. Default is false. If enable, the response will include 3 fields: explicitSwapFee, implicitSwapFee, limitOrderFee and computing unit cost will be doubled. \n\nFee breakdown is only available for daily and weekly timeframes." schema: type: boolean responses: '200': description: Historical data for the market content: application/json: schema: $ref: '#/components/schemas/MarketHistoricalDataResponse' summary: Get market time-series data by address tags: - Markets x-computing-unit: 1+ x-retail-api-rank: 3 components: schemas: EstimatedDailyPoolRewardResponse: type: object properties: asset: $ref: '#/components/schemas/AssetBasicResponse' amount: type: number required: - asset - amount MarketDataResponse: type: object properties: timestamp: format: date-time type: string description: Timestamp of the market data snapshot liquidity: description: Market liquidity, this is the liquidity of PT and SY in the AMM allOf: - $ref: '#/components/schemas/ValuationResponse' tradingVolume: description: Market 24h trading volume allOf: - $ref: '#/components/schemas/ValuationResponse' totalTvl: nullable: true description: Market total TVL (including floating PT that are not in the AMM) allOf: - $ref: '#/components/schemas/ValuationResponse' underlyingInterestApy: type: number description: Annual percentage yield from the underlying asset interest underlyingRewardApy: type: number description: Annual percentage yield from the underlying asset rewards underlyingApy: type: number description: APY of the underlying asset impliedApy: type: number description: Implied APY of market ytFloatingApy: type: number description: Floating APY for YT holders (underlyingApy - impliedApy) swapFeeApy: type: number description: Swap fee APY for LP holders, without boosting voterApy: type: number description: APY for voters (vePENDLE holders) from voting on this pool ptDiscount: type: number description: PT discount relative to underlying asset pendleApy: type: number description: APY from Pendle rewards arbApy: type: number description: APY from arbitrage opportunities lpRewardApy: type: number description: APY from LP reward tokens aggregatedApy: type: number description: APY including yield, swap fee and Pendle rewards without boosting maxBoostedApy: type: number description: APY when maximum boost is applied estimatedDailyPoolRewards: description: Estimated daily pool rewards broken down by asset type: array items: $ref: '#/components/schemas/EstimatedDailyPoolRewardResponse' totalPt: type: number description: Total PT in the market totalSy: type: number description: Total SY in the market totalLp: type: number description: Total supply of the LP token totalActiveSupply: type: number description: Total active supply of the LP token, used for calculate boosting assetPriceUsd: type: number description: Price of the accounting asset in USD required: - timestamp - liquidity - tradingVolume - underlyingInterestApy - underlyingRewardApy - underlyingApy - impliedApy - ytFloatingApy - swapFeeApy - voterApy - ptDiscount - pendleApy - lpRewardApy - aggregatedApy - maxBoostedApy - estimatedDailyPoolRewards - totalPt - totalSy - totalLp - totalActiveSupply - assetPriceUsd PointMetadataEntity: type: object properties: key: type: string type: type: string description: Either "multiplier" or "points-per-asset" enum: - multiplier - points-per-asset pendleAsset: type: string description: Either "basic" or "lp" enum: - basic - lp externalDashboardURL: type: string value: type: number perDollarLp: type: boolean required: - key - type - pendleAsset - externalDashboardURL - value - perDollarLp MarketCrossChainData: type: object properties: name: type: string description: market name example: crvUSD address: type: string description: market address example: '0x386f90eb964a477498b528a39d9405e73ed4032b' expiry: type: string description: market expiry date example: '2024-03-28T00:00:00.000Z' pt: type: string description: market pt id example: 1-0xb87511364014c088e30f872efc4a00d7efb843ac yt: type: string description: market yt id example: 1-0xed97f94dd94255637a054098604e0201c442a3fd sy: type: string description: market sy id example: 1-0xe05082b184a34668cd8a904d85fa815802bbb04c underlyingAsset: type: string description: market underlying asset id example: 1-0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32 details: description: Market details including liquidity, APY, fee rate, and yield range allOf: - $ref: '#/components/schemas/MarketDetailsV2Entity' isNew: type: boolean description: Whether the market is new isPrime: type: boolean description: Whether the market is prime timestamp: format: date-time type: string description: Market deployed timestamp lpWrapper: type: string description: LP wrapper address categoryIds: description: Market category IDs example: - btc - stables type: array items: type: string isVolatile: type: boolean description: Whether the market is volatile chainId: type: number description: chain id example: 1 required: - name - address - expiry - pt - yt - sy - underlyingAsset - details - isNew - isPrime - timestamp - chainId AssetBasicResponse: type: object properties: id: type: string chainId: type: number address: type: string symbol: type: string decimals: type: number expiry: format: date-time type: string nullable: true accentColor: type: string nullable: true price: nullable: true allOf: - $ref: '#/components/schemas/ValuationResponse' priceUpdatedAt: format: date-time type: string nullable: true name: type: string required: - id - chainId - address - symbol - decimals - name MarketDetailsV2Entity: type: object properties: liquidity: type: number description: market liquidity in USD, this is the liquidity of PT and SY in the AMM example: 1234567.89 totalTvl: type: number description: market total TVL (including floating PT that are not in the AMM) in USD example: 1234567.89 tradingVolume: type: number description: market 24h trading volume in USD example: 1234567.89 underlyingApy: type: number description: APY of the underlying asset example: 0.01 swapFeeApy: type: number description: swap fee APY for LP holders, without boosting example: 0.01 pendleApy: type: number description: APY from Pendle rewards example: 0.456 impliedApy: type: number description: implied APY of market example: 0.123 feeRate: type: number description: market fee rate example: 0.003 yieldRange: description: Historical implied APY range for this market allOf: - $ref: '#/components/schemas/YieldRangeResponse' aggregatedApy: type: number description: APY including yield, swap fee and Pendle rewards without boosting example: 0.123 maxBoostedApy: type: number description: APY when maximum boost is applies example: 0.123 totalPt: type: number description: total PT in the market example: 1234567.89 totalSy: type: number description: total SY in the market example: 1234567.89 totalSupply: type: number description: total supply of the LP token example: 1234567.89 totalActiveSupply: type: number description: total active supply of the LP token, used for calculate boosting example: 1234567.89 required: - liquidity - totalTvl - tradingVolume - underlyingApy - swapFeeApy - pendleApy - impliedApy - feeRate - yieldRange - aggregatedApy - maxBoostedApy - totalPt - totalSy - totalSupply - totalActiveSupply ValuationResponse: type: object properties: usd: type: number nullable: true description: Value in USD acc: type: number nullable: true description: Value in the market's accounting asset (e.g. USDC for a USDC-denominated market) GetMarketsCrossChainResponse: type: object properties: markets: description: List of all whitelisted Pendle markets across all supported chains type: array items: $ref: '#/components/schemas/MarketCrossChainData' required: - markets YieldRangeResponse: type: object properties: min: type: number description: Minimum historical implied APY for this market max: type: number description: Maximum historical implied APY for this market required: - min - max GetPointsMarketsResponse: type: object properties: markets: type: array items: $ref: '#/components/schemas/MarketPointsEntity' required: - markets MarketHistoricalDataPoint: type: object properties: timestamp: format: date-time type: string description: Timestamp in ISO format maxApy: type: number description: APY when maximum boost is applied baseApy: type: number description: APY including yield, swap fee and Pendle rewards without boosting underlyingApy: type: number description: APY of the underlying asset impliedApy: type: number description: Implied APY of market tvl: type: number description: Market liquidity (TVL in the pool) in USD totalTvl: type: number description: Market total TVL (including floating PT that are not in the AMM) in USD underlyingInterestApy: type: number description: Annual percentage yield from the underlying asset interest underlyingRewardApy: type: number description: Annual percentage yield from the underlying asset rewards ytFloatingApy: type: number description: Floating APY for YT holders (underlyingApy - impliedApy) swapFeeApy: type: number description: Swap fee APY for LP holders, without boosting voterApr: type: number description: APY for voters (vePENDLE holders) from voting on this pool pendleApy: type: number description: APY from Pendle rewards lpRewardApy: type: number description: APY from LP reward tokens totalPt: type: number description: Total PT in the market totalSy: type: number description: Total SY in the market totalSupply: type: number description: Total supply of the LP token ptPrice: type: number description: PT price in USD ytPrice: type: number description: YT price in USD syPrice: type: number description: SY price in USD lpPrice: type: number description: LP price in USD lastEpochVotes: type: number description: Last epoch votes tradingVolume: type: number description: 24h trading volume in USD explicitSwapFee: type: number description: Explicit swap fee in USD (only available for daily and weekly timeframes) implicitSwapFee: type: number description: Implicit swap fee in USD (only available for daily and weekly timeframes) limitOrderFee: type: number description: Limit order fee in USD (only available for daily and weekly timeframes) required: - timestamp MarketPointsEntity: type: object properties: id: type: string description: Market id points: description: Points configs type: array items: $ref: '#/components/schemas/PointMetadataEntity' required: - id - points MarketHistoricalDataResponse: type: object properties: total: type: number description: Total number of data points available timestamp_start: format: date-time type: string description: Start timestamp of the data range timestamp_end: format: date-time type: string description: End timestamp of the data range results: description: Array of historical data points type: array items: $ref: '#/components/schemas/MarketHistoricalDataPoint' required: - total - timestamp_start - timestamp_end - results