{ "openapi": "3.0.0", "paths": { "/v2/limit-orders": { "get": { "description": "This endpoint is for analytics purpose, if you want to analyze the limit orders data, this endpoint return all the orders that have been made, including the ones that have been cancelled or fully filled. \n\nThe results could be very large, so each time we returns at most 1000 orders, you can use the resumeToken to fetch the next page. \n\nTo get limit order for filling, use the [Get limit orders to match by YT address​](#tag/limit-orders/get/v1/limit-orders/takers/limit-orders) endpoint!", "operationId": "LimitOrdersController_getAllLimitOrders", "parameters": [ { "name": "chainId", "required": false, "in": "query", "description": "Chain id to filter by, leave blank to fetch all chains.", "schema": { "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 1000.", "schema": { "default": 100, "type": "number" } }, { "name": "maker", "required": false, "in": "query", "description": "Maker address to filter orders by", "schema": { "type": "string" } }, { "name": "yt", "required": false, "in": "query", "description": "Market address to filter orders by", "schema": { "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": "resumeToken", "required": false, "in": "query", "description": "Resume token for pagination", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Returns limit orders with resume token", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LimitOrdersV2Response" } } } } }, "summary": "Get all limit orders for analytics", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 } }, "/v2/limit-orders/archived": { "get": { "description": "This have the same interface and usecase as the endpoint above, but it returns the archived orders\n\nWhen an order is not fillable anymore, we **might** archive it to save storage space, to fetch it, use this endpoint.\n\nSo to fetch full limit orders in history, using this and the endpoint above. Not all orders are archived, it depends on some conditions.", "operationId": "LimitOrdersController_getAllArchivedLimitOrders", "parameters": [ { "name": "chainId", "required": false, "in": "query", "description": "Chain id to filter by, leave blank to fetch all chains.", "schema": { "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 1000.", "schema": { "default": 100, "type": "number" } }, { "name": "maker", "required": false, "in": "query", "description": "Maker address to filter orders by", "schema": { "type": "string" } }, { "name": "yt", "required": false, "in": "query", "description": "Market address to filter orders by", "schema": { "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": "resumeToken", "required": false, "in": "query", "description": "Resume token for pagination", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Returns archived limit orders with resume token", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LimitOrdersV2Response" } } } } }, "summary": "Get all archived limit orders for analytics", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 } }, "/v1/limit-orders/makers/limit-orders": { "get": { "description": "Returns the active and historical limit orders placed by a specific user in a market. Supports richer filtering than the analytics endpoint (e.g. by YT, status, market).\n\nA user can have at most 50 open orders per market, so pagination is typically unnecessary here.\n\nFor full cross-user analytics with cursor-based pagination, use [Get all limit orders](#tag/limit-orders/get/v2/limit-orders) instead.", "operationId": "LimitOrdersController_getMakerLimitOrder", "parameters": [ { "name": "skip", "required": false, "in": "query", "description": "Number of results to skip. The parameter is capped at 1000.", "schema": { "default": 0, "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 100.", "schema": { "default": 10, "type": "number" } }, { "name": "chainId", "required": true, "in": "query", "description": "ChainId", "schema": { "type": "number" } }, { "name": "maker", "required": true, "in": "query", "description": "Maker's address", "schema": { "type": "string" } }, { "name": "yt", "required": false, "in": "query", "description": "Order's YT address", "schema": { "type": "string" } }, { "name": "type", "required": false, "in": "query", "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }", "schema": { "enum": [ 0, 1, 2, 3 ], "type": "number" } }, { "name": "isActive", "required": false, "in": "query", "description": "isActive=true to get all maker's active orders, isActive=false otherwise and do not set isActive if you want to fetch all maker's orders", "schema": { "type": "boolean" } } ], "responses": { "201": { "description": "Returns limit orders", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LimitOrdersResponse" } } } } }, "summary": "Get user limit orders in market", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 }, "post": { "description": "Submit a signed limit order to the Pendle order book. Once created, the order is visible to takers and will be filled against incoming swaps at or better than the specified implied APY.\n\nBefore calling this, generate the order payload via [Generate limit order data](#tag/limit-orders/post/v1/limit-orders/makers/generate-limit-order-data), sign it with your wallet, and include the signature in the request body.\n\nCommon rejection reasons: the YT or market is not whitelisted for limit orders, the order has already expired, or the signature is invalid.", "operationId": "LimitOrdersController_createOrder", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateLimitOrderDto" } } } }, "responses": { "201": { "description": "Returns created limit order", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LimitOrderResponse" } } } }, "400": { "description": "Validation failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpErrorResponse" } } } }, "422": { "description": "Validation failed - unsupported token", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpErrorResponse" } } } } }, "summary": "Create limit order", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 1 } }, "/v1/limit-orders/makers/generate-limit-order-data": { "post": { "description": "Generate the EIP-712 typed data payload for a limit order. Sign the returned data with the maker's private key, then submit the order via [Create limit order](#tag/limit-orders/post/v1/limit-orders/makers/limit-orders).\n\nThe generated order specifies the YT address, direction (long or short yield), size, and implied APY target. The order remains valid until it is either fully filled, cancelled, or expired.", "operationId": "LimitOrdersController_generateLimitOrderData", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateLimitOrderDataDto" } } } }, "responses": { "201": { "description": "Return generated limit order data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateLimitOrderDataResponse" } } } }, "400": { "description": "Validation failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpErrorResponse" } } } } }, "summary": "Generate limit order data for signing", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 2 } }, "/v1/limit-orders/makers/generate-scaled-order-data": { "post": { "description": "Generate a batch of limit orders spread across a price (implied APY) range for signing. Scaled orders distribute your total size across multiple price levels, providing better market depth than a single large order.\n\nSign each generated order individually, then submit them via [Create limit order](#tag/limit-orders/post/v1/limit-orders/makers/limit-orders). Useful for market-making strategies.", "operationId": "LimitOrdersController_generateScaledLimitOrderData", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateScaledOrderDataDto" } } } }, "responses": { "201": { "description": "Return generated limit order data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateScaledOrderResponse" } } } } }, "summary": "Generate list of limit orders (scaled) for signing", "tags": [ "Limit Orders" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 } }, "/v1/limit-orders/takers/limit-orders": { "get": { "description": "Returns the best-matching active limit orders for a given YT address, sorted by implied APY for efficient taker fill selection.\n\nThe response includes full order structs and maker signatures ready to pass directly to the Pendle limit order contract for on-chain settlement. Only active orders (unfilled, uncancelled, unexpired) are returned.\n\nFor analytics and full order history (including filled/cancelled), use [Get all limit orders](#tag/limit-orders/get/v2/limit-orders) instead.", "operationId": "LimitOrdersController_getTakerLimitOrders", "parameters": [ { "name": "skip", "required": false, "in": "query", "description": "Number of results to skip. The parameter is capped at 1000.", "schema": { "default": 0, "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 100.", "schema": { "default": 10, "type": "number" } }, { "name": "chainId", "required": true, "in": "query", "description": "ChainId", "schema": { "type": "number" } }, { "name": "yt", "required": true, "in": "query", "description": "Order's YT address", "schema": { "type": "string" } }, { "name": "type", "required": true, "in": "query", "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }", "schema": { "enum": [ 0, 1, 2, 3 ], "type": "number" } }, { "name": "sortBy", "required": false, "in": "query", "schema": { "enum": [ "Implied Rate" ], "type": "string" } }, { "name": "sortOrder", "required": false, "in": "query", "schema": { "enum": [ "asc", "desc" ], "type": "string" } } ], "responses": { "200": { "description": "Limit orders data for takers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LimitOrdersTakerResponse" } } } }, "400": { "description": "Validation failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HttpErrorResponse" } } } } }, "summary": "Get limit orders to match by YT address", "tags": [ "Limit Orders" ], "x-computing-unit": "5", "x-retail-api-rank": 3 } }, "/v2/limit-orders/book/{chainId}": { "get": { "description": "Returns the consolidated order book for a market, aggregating both limit orders and AMM liquidity depth into a unified view.\n\nThe book is split into two sides:\n- **longYieldEntries**: available liquidity for buying YT (long yield positions), ordered by ascending implied APY\n- **shortYieldEntries**: available liquidity for selling YT (short yield positions), ordered by descending implied APY\n\nEach entry shows the implied APY price level, combined limit order size, and AMM depth at that level.", "operationId": "LimitOrdersController_getLimitOrderBookV2", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 200.", "schema": { "default": 10, "type": "number" } }, { "name": "precisionDecimal", "required": true, "in": "query", "description": "Min: 0, Max: 3, returned impliedApy will have precision upto 10^{-precisionDecimal}%", "schema": { "type": "number" } }, { "name": "market", "required": true, "in": "query", "description": "Market address", "schema": { "type": "string" } }, { "name": "includeAmm", "required": false, "in": "query", "description": "Include AMM orders in the order book", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Returns order book", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OrderBookV2Response" } } } } }, "summary": "Get order book v2", "tags": [ "Limit Orders" ], "x-computing-unit": "5", "x-retail-api-rank": 3 } }, "/v1/prices/assets": { "get": { "description": "Returns USD prices for Pendle-supported tokens across all chains. Covers all token types in the Pendle app, including non-Pendle tokens (USDC, WETH, etc.) when they appear as underlying assets.\n\nPrices update approximately every minute.\n\nFilter by `chainId`, asset `id`, or `type` to narrow results.\n\nFor real-time PT/YT pre-trade prices that reflect current pool depth, use [Get swapping prices](#tag/sdk/get/v1/sdk/{chainId}/markets/{market}/swapping-prices) instead.", "operationId": "PricesCrossChainController_getAllAssetPricesByAddressesCrossChains", "parameters": [ { "name": "ids", "required": false, "in": "query", "description": "Token ids to data for (comma-separated), leave blank to fetch all tokens. Up to 20 ids allowed.", "schema": { "example": "1-0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650,1-0xc5cd692e9b4622ab8cdb57c83a0f99f874a169cd", "type": "string" } }, { "name": "chainId", "required": false, "in": "query", "description": "Chain id to filter by, leave blank to fetch all chains.", "schema": { "example": 1, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of results to skip.", "schema": { "default": 0, "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. Leave blank to fetch all results.", "schema": { "type": "number" } }, { "name": "type", "required": false, "in": "query", "description": "Asset types to filter by (comma-separated). Valid values: `PENDLE_LP`, `SY`, `PT`, `YT`. Leave blank to fetch all assets types.", "schema": { "$ref": "#/components/schemas/PendleAssetType" } } ], "responses": { "200": { "description": "Assets chainId-address mapped to their current USD prices across all chains.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetPricesCrossChainResponse" } } } } }, "summary": "Get asset prices (cross-chain)", "tags": [ "Assets" ], "x-computing-unit": "1", "x-retail-api-rank": 6969 } }, "/v4/{chainId}/prices/{address}/ohlcv": { "get": { "description": "\nHistorical price data for PT / YT tokens / LP tokens. We do not support historical prices for **SY and non-Pendle tokens**.\n\nThe data is OHLCV data, returned in CSV format with open, high, low, close prices, and volume.\n\nIn the case of LP, volume data will be 0. To get the correct volume, use our [Get market time-series data by address](#tag/markets/get/v2/{chainId}/markets/{address}/historical-data) endpoint.\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": "PricesController_ohlcv_v4", "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", "description": "Time interval for OHLCV data aggregation. Valid values: `hour`, `day`, `week`.", "schema": { "default": "hour", "enum": [ "hour", "day", "week" ], "type": "string" } }, { "name": "timestamp_start", "required": false, "in": "query", "description": "ISO Date string of the start time you want to query", "schema": { "format": "date-time", "type": "string" } }, { "name": "timestamp_end", "required": false, "in": "query", "description": "ISO Date string of the end time you want to query", "schema": { "format": "date-time", "type": "string" } } ], "responses": { "200": { "description": "OHLCV data in CSV format with time, open, high, low, close, volume.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PriceOHLCVCSVResponse" }, "example": { "total": 1, "currency": "USD", "timeFrame": "hour", "timestamp_start": 1756245600, "timestamp_end": 1756245600, "results": "time,open,high,low,close,volume\n1756245600,42.4563,42.4563,42.4563,42.4563,0.0000" } } } } }, "summary": "Get PT / YT / LP historical price by address", "tags": [ "Assets" ], "x-computing-unit": "1+", "x-retail-api-rank": 6969 } }, "/v1/assets/all": { "get": { "description": "Returns the flat list of all PT, YT, LP, and SY tokens supported in the Pendle app, across all chains.\n\nEach entry includes: name, symbol, contract address, decimals, expiry timestamp (for PT/YT), and icon URL.\n\nFilter by `chainId`, asset `id`, or `type` (pt, yt, lp, sy).\n\nPrices are not included — use [Get asset prices](#tag/assets/get/v1/prices/assets) to retrieve them separately.\n\nFor chain-specific asset lists with richer metadata and prices bundled, use the chain-scoped [Get all assets](#tag/assets/get/v1/{chainId}/assets/all) endpoint instead.", "operationId": "AssetsCrossChainController_getPendleAssetsMetadata", "parameters": [ { "name": "ids", "required": false, "in": "query", "description": "Token ids to data for (comma-separated), leave blank to fetch all tokens. Up to 20 ids allowed.", "schema": { "example": "1-0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650,1-0xc5cd692e9b4622ab8cdb57c83a0f99f874a169cd", "type": "string" } }, { "name": "chainId", "required": false, "in": "query", "description": "Chain id to filter by, leave blank to fetch all chains.", "schema": { "example": 1, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "description": "Number of results to skip.", "schema": { "default": 0, "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. Leave blank to fetch all results.", "schema": { "type": "number" } }, { "name": "type", "required": false, "in": "query", "description": "Asset types to filter by (comma-separated). Valid values: `PENDLE_LP`, `SY`, `PT`, `YT`. Leave blank to fetch all assets types.", "schema": { "$ref": "#/components/schemas/PendleAssetType" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllAssetsCrossChainResponse" } } } } }, "summary": "Get all assets (cross-chain)", "tags": [ "Assets" ], "x-computing-unit": "1", "x-retail-api-rank": 1 } }, "/v1/markets/all": { "get": { "description": "Returns the complete list of whitelisted Pendle markets across all supported chains with their metadata and current data.\n\nFilter by `chainId`, `isActive`, or `ids` (comma-separated market IDs in `chainId-address` format).\n\nThis 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.\n\nThe 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.\n\nPass a `timestamp` query param (Unix seconds) to retrieve the market state at a specific point in time. Omit it for the current snapshot.\n\nFor 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 } }, "/v2/ve-pendle/data": { "get": { "deprecated": true, "description": "**Deprecated**: vePENDLE has been replaced by sPENDLE. This endpoint returns vePENDLE governance data and will not reflect the new sPENDLE staking system.\n\nReturns aggregate vePENDLE governance statistics, updated every 5 minutes.\n\nThe response includes:\n- **Revenue**: cumulative and monthly protocol revenue from swap fees\n- **PENDLE supply**: current circulating and total supply\n- **Voting epoch data**: per-pool vote counts, swap fees, and voter APR for both the current and previous epoch\n- **Pool caps**: the vePENDLE vote weight cap per pool for this epoch and the projected cap for the next epoch\n\nEpochs run weekly starting on Thursdays. Vote allocations and APRs reset at the start of each new epoch.", "operationId": "VePendleController_vePendleExtendedData", "parameters": [], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VePendleExtendedDataResponse" } } } } }, "summary": "Get vePendle statistics", "tags": [ "Ve Pendle" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 } }, "/v1/ve-pendle/market-fees-chart": { "get": { "deprecated": true, "description": "**Deprecated**: vePENDLE has been replaced by sPENDLE. The epoch-based fee distribution model no longer applies.\n\nReturns weekly trading fee revenue across all Pendle markets, grouped by voting epoch (epochs start on Thursdays).\n\nUseful for tracking protocol revenue trends and understanding which markets generate the most fee income.\n\nFilter by date range using `timestamp_start` and `timestamp_end` (Unix seconds).", "operationId": "VePendleController_allMarketTotalFees", "parameters": [ { "name": "timestamp_start", "required": false, "in": "query", "description": "Should be rounded up to time frame (in UTC)", "schema": { "format": "date-time", "type": "string" } }, { "name": "timestamp_end", "required": false, "in": "query", "description": "Should be rounded up to time frame (in UTC)", "schema": { "format": "date-time", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AllMarketTotalFeesResponse" } } } } }, "summary": "Get market fees chart", "tags": [ "Ve Pendle" ], "x-computing-unit": "8", "x-retail-api-rank": 6969 } }, "/v1/sdk/{chainId}/markets/{market}/tokens": { "get": { "description": "Returns the two sets of tokens relevant for a given market:\n\n- **SY input tokens**: tokens accepted by the SY wrapper for minting/redeeming (e.g. USDC for a USDC-based market).\n- **Zap tokens**: tokens that can be used as input when buying PT/YT or providing liquidity, routed via aggregators.\n\nCall this before building a Convert or Swap request to know which input tokens are valid for a given market.", "operationId": "SdkController_getMarketTokens", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "market", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MarketTokensResponse" } } } } }, "summary": "Get supported tokens for market", "tags": [ "SDK" ], "x-retail-api-rank": 6969 } }, "/v1/sdk/{chainId}/supported-aggregators": { "get": { "description": "Returns the list of DEX aggregators available on this chain for routing token swaps, along with the additional computing unit cost each one adds to SDK requests.\n\nUse this to decide which aggregators to include in Convert/Swap calls via the `aggregators` query param.\n\nYou can reduce any aggregator's CU cost to 0 by providing your own API key in the corresponding request header. See [Reducing Aggregator Costs](https://docs.pendle.finance/pendle-v2/Developers/Backend/HostedSdk#reduce-aggregator-computing-units) for details.", "operationId": "SdkController_getSupportedAggregators", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SupportedAggregatorsResponse" } } } } }, "summary": "Get supported aggregators for a chain", "tags": [ "SDK" ], "x-retail-api-rank": 6969 } }, "/v1/sdk/{chainId}/markets/{market}/swapping-prices": { "get": { "description": "Return price by swapping 1 unit underlying token to PT/ YT, and 1 unit of PT/YT to the underlying token.\n\nOne unit is defined as 10**decimal. The result is updated every block.\n\nImplied APY of the market is also included.", "operationId": "SdkController_getMarketSpotSwappingPrice", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "market", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Return the swap output. Data is returned with corresponding asset decimals. Null indicates that it's not possible to swap the quantity, either because the market has insufficient liquidity or the market has matured.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSpotSwappingPriceResponse" } } } } }, "summary": "Get real-time PT/YT swap price of a market", "tags": [ "SDK" ], "x-retail-api-rank": 1 } }, "/v1/sdk/{chainId}/limit-order/cancel-single": { "get": { "description": "Generate the transaction payload to cancel a specific limit order on-chain.\n\nPass the full signed order struct (from the original order creation) to identify which order to cancel. The order becomes invalid once the cancellation transaction is confirmed.", "operationId": "SdkController_cancelSingleLimitOrder", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "userAddress", "required": true, "in": "query", "description": "User Address", "schema": { "type": "string" } }, { "name": "salt", "required": true, "in": "query", "description": "BigInt string of salt", "schema": { "type": "string" } }, { "name": "expiry", "required": true, "in": "query", "description": "BigInt string of expiry", "schema": { "type": "string" } }, { "name": "nonce", "required": true, "in": "query", "description": "BigInt string of nonce", "schema": { "type": "string" } }, { "name": "orderType", "required": true, "in": "query", "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }", "schema": { "enum": [ 0, 1, 2, 3 ], "type": "number" } }, { "name": "token", "required": true, "in": "query", "description": "Token used by user to make order", "schema": { "type": "string" } }, { "name": "YT", "required": true, "in": "query", "description": "YT address", "schema": { "type": "string" } }, { "name": "maker", "required": true, "in": "query", "description": "Maker address", "schema": { "type": "string" } }, { "name": "receiver", "required": true, "in": "query", "description": "Receiver address", "schema": { "type": "string" } }, { "name": "makingAmount", "required": true, "in": "query", "description": "BigInt string of making amount", "schema": { "type": "string" } }, { "name": "lnImpliedRate", "required": true, "in": "query", "description": "BigInt string of lnImpliedRate (natural logarithm of the implied rate)", "schema": { "type": "string" } }, { "name": "failSafeRate", "required": true, "in": "query", "description": "BigInt string of failSafeRate", "schema": { "type": "string" } }, { "name": "permit", "required": true, "in": "query", "description": "Bytes string for permit", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SdkResponse" } } } } }, "summary": "Cancel one single limit order by order hash", "tags": [ "SDK" ], "x-computing-unit": "2", "x-retail-api-rank": 6969 } }, "/v1/sdk/{chainId}/limit-order/cancel-all": { "get": { "description": "Generate the transaction payload to cancel all active limit orders for a user in a single on-chain call.\n\nThis works by incrementing the user's nonce on-chain, which invalidates all previously signed orders at once. More efficient than cancelling orders one by one when clearing all open positions.", "operationId": "SdkController_cancelAllLimitOrders", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "userAddress", "required": true, "in": "query", "description": "User Address", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Cancel all limit orders", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SdkResponse" } } } } }, "summary": "Cancel all limit orders", "tags": [ "SDK" ], "x-computing-unit": "2", "x-retail-api-rank": 6969 } }, "/v1/sdk/{chainId}/redeem-interests-and-rewards": { "get": { "description": "Generate a transaction payload to claim all accrued interest and incentive rewards across multiple positions in a single call.\n\nSpecify which positions to claim from by passing arrays of:\n- `sys`: SY token addresses (to claim SY interest)\n- `yts`: YT token addresses (to claim YT interest and rewards)\n- `markets`: LP market addresses (to claim LP rewards)\n\nUseful for portfolio management bots or dashboards that batch-claim on behalf of users.", "operationId": "SdkController_redeemInterestsAndRewards", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "receiver", "required": true, "in": "query", "description": "The address to receive the output of the action", "schema": { "type": "string" } }, { "name": "sys", "required": false, "in": "query", "description": "Use comma separated values to search by multiple addresses", "schema": { "type": "string" } }, { "name": "yts", "required": false, "in": "query", "description": "Use comma separated values to search by multiple addresses", "schema": { "type": "string" } }, { "name": "markets", "required": false, "in": "query", "description": "Use comma separated values to search by multiple addresses", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Redeem rewards and interests from positions", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RedeemInterestsAndRewardsResponse" } } } } }, "summary": "Redeem rewards and interests from positions", "tags": [ "SDK" ], "x-computing-unit": "5", "x-retail-api-rank": 2 } }, "/v2/sdk/{chainId}/convert": { "get": { "description": "\nThe **Convert API** is the recommended endpoint for all Pendle transaction building. It supersedes the individual swap, add/remove liquidity, mint, redeem, transfer, and exit endpoints — handling 21 distinct operations through a unified interface.\n\nThe action is automatically detected from your `tokensIn` and `tokensOut` addresses. See the table below for all supported operations.\n\n| Action | tokensIn | tokensOut | Note |\n|-------------------------------------------------------|-----------------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Swap from PT to token (sell PT) | [PT] | [token] | Callable regardless of the market's expiry |\n| Swap from token to PT (buy PT) | [token] | [PT] | Only callable until the market's expiry |\n| Swap from YT to token (sell YT) | [YT] | [token] | Only callable until the market's expiry |\n| Swap from token to YT (buy YT) | [token] | [YT] | Only callable until the market's expiry |\n| Swap between PT and YT | [PT] or [YT] | [YT] or [PT] | Only callable until the market's expiry |\n| Add liquidity dual (using both token and PT) | [token, PT] | [LP] | Only callable until the market's expiry. |\n| Add liquidity single (using token or PT) | [token] or [PT] | [LP] | Only callable until the market's expiry. |\n| Add liquidity single ZPI (using token or PT, keep YT) | [token] or [PT] | [LP, YT] | Zero-price impact provision is supported where no price impact will incur, and users will receive LP and YT (less LP compared to normal mode). Only callable until the market's expiry. |\n| Remove liquidity dual (get back both token and PT) | [LP] | [token, PT] | Callable regardless of the market's expiry |\n| Remove liquidity single (get back either token or PT) | [LP] | [token] or [PT] | Callable regardless of the market's expiry |\n| Mint PT & YT | [token] | [PT, YT] | Only callable until YT's expiry |\n| Redeem PT & YT | [PT, YT] | [token] | If called before YT's expiry, both PT & YT of equal amounts are needed and will be burned. Else, only PT is needed and will be burned. |\n| Transfer liquidity between markets | [LP, PT, YT] | [LP] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. All provided inputs (LP, PT & YT) will be sold/redeemed to the underlying asset before being zapped into the destination market. |\n| Transfer liquidity ZPI | [LP, PT, YT] | [LP, YT] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. All provided inputs (LP, PT & YT) will be sold/redeemed to the underlying asset before being zapped into the destination market with no price impact. |\n| Mint SY | [token] | [SY] | |\n| Redeem SY | [SY] | [token] | |\n| Swap PT between markets (Roll over pts) | [PT] | [PT] | PT is redeemed for the underlying asset and used to buy the new PT. |\n| Exit market | [LP, PT, YT] | [token] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. |\n| Swap LP to PT between markets | [LP] | [PT] | Only callable until the market's expiry |\n| Pendle swap (swap multiple ERC20 tokens to 1 token) | [token1, token2, ...] | [token] | Support at most 3 tokens in |\n\n`tokensIn` and `tokensOut` are the input and output tokens for the action, should be seperate by comma with no spaces.\n\nExample if your action requires 2 tokensIn, you can pass `tokensIn=0x123,0x456`\n\nFor code examples and migration from individual SDK endpoints, see the [Hosted SDK documentation](https://docs.pendle.finance/pendle-v2/Developers/Backend/HostedSdk#examples).\n\n## Computing cost\n\nThis API will consume 5 computing units if no aggregator is used, with no additional data.\nEnabling aggregator will consume additional computing units, each aggregator cost differently, and could be check at: [Get supported aggregators](#tag/sdk/get/v1/sdk/{chainId}/supported-aggregators)\n\nRefer to our document for guide to reduce CU usage with aggregators: [Reduce CU Usage](https://docs.pendle.finance/pendle-v2/Developers/Backend/HostedSdk#reduce-aggregator-computing-units-v2-endpoints-only)\n", "operationId": "SdkController_convert", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "receiver", "required": false, "in": "query", "description": "Recipient address for transaction output", "schema": { "type": "string" } }, { "name": "slippage", "required": true, "in": "query", "description": "Maximum slippage tolerance (0-1, where 0.01 equals 1%)", "schema": { "type": "number" } }, { "name": "enableAggregator", "required": false, "in": "query", "description": "Enable swap aggregator to swap between tokens that cannot be natively converted from/to the underlying asset", "schema": { "default": false, "type": "boolean" } }, { "name": "aggregators", "required": false, "in": "query", "description": "List of aggregator names to use for the swap. If not provided, all aggregators will be used.List of supported aggregator can be found at: [getSupportedAggregators](#tag/sdk/get/v1/sdk/{chainId}/supported-aggregators)", "schema": { "example": "kyberswap,okx", "type": "string" } }, { "name": "tokensIn", "required": true, "in": "query", "description": "Input token addresses, seperate by comma with no spaces", "schema": { "example": "0x123,0x456", "type": "string" } }, { "name": "amountsIn", "required": true, "in": "query", "description": "Input token amounts in wei, seperate by comma with no spaces", "schema": { "example": "1000000000000000000,2000000000000000000", "type": "string" } }, { "name": "tokensOut", "required": true, "in": "query", "description": "Output token addresses, seperate by comma with no spaces", "schema": { "example": "0x123,0x456", "type": "string" } }, { "name": "redeemRewards", "required": false, "in": "query", "description": "Redeem rewards", "schema": { "default": false, "type": "boolean" } }, { "name": "needScale", "required": false, "in": "query", "description": "Aggregators needScale value, only set to true when amounts are updated onchain. When enabled, please make sure to buffer the amountIn by about 2%", "schema": { "default": false, "type": "boolean" } }, { "name": "additionalData", "required": false, "in": "query", "description": "Available fields: `impliedApy`, `effectiveApy`. Comma separated list of fields to return. For example: `field1,field2`. More fields will consume more computing units.", "schema": { "type": "string" } }, { "name": "useLimitOrder", "required": false, "in": "query", "description": "To use limit orders when converting, default to true", "schema": { "default": true, "type": "boolean" } } ], "responses": { "200": { "description": "The detected action and data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MultiRouteConvertResponse" } } } } }, "summary": "Universal convert function", "tags": [ "SDK" ], "x-computing-unit": "5+", "x-retail-api-rank": 0 } }, "/v3/sdk/{chainId}/convert": { "post": { "description": "\nThe **Convert API** is the recommended endpoint for all Pendle transaction building. It supersedes the individual swap, add/remove liquidity, mint, redeem, transfer, and exit endpoints — handling 21 distinct operations through a unified interface.\n\nThe action is automatically detected from your `tokensIn` and `tokensOut` addresses. See the table below for all supported operations.\n\n| Action | tokensIn | tokensOut | Note |\n|-------------------------------------------------------|-----------------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Swap from PT to token (sell PT) | [PT] | [token] | Callable regardless of the market's expiry |\n| Swap from token to PT (buy PT) | [token] | [PT] | Only callable until the market's expiry |\n| Swap from YT to token (sell YT) | [YT] | [token] | Only callable until the market's expiry |\n| Swap from token to YT (buy YT) | [token] | [YT] | Only callable until the market's expiry |\n| Swap between PT and YT | [PT] or [YT] | [YT] or [PT] | Only callable until the market's expiry |\n| Add liquidity dual (using both token and PT) | [token, PT] | [LP] | Only callable until the market's expiry. |\n| Add liquidity single (using token or PT) | [token] or [PT] | [LP] | Only callable until the market's expiry. |\n| Add liquidity single ZPI (using token or PT, keep YT) | [token] or [PT] | [LP, YT] | Zero-price impact provision is supported where no price impact will incur, and users will receive LP and YT (less LP compared to normal mode). Only callable until the market's expiry. |\n| Remove liquidity dual (get back both token and PT) | [LP] | [token, PT] | Callable regardless of the market's expiry |\n| Remove liquidity single (get back either token or PT) | [LP] | [token] or [PT] | Callable regardless of the market's expiry |\n| Mint PT & YT | [token] | [PT, YT] | Only callable until YT's expiry |\n| Redeem PT & YT | [PT, YT] | [token] | If called before YT's expiry, both PT & YT of equal amounts are needed and will be burned. Else, only PT is needed and will be burned. |\n| Transfer liquidity between markets | [LP, PT, YT] | [LP] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. All provided inputs (LP, PT & YT) will be sold/redeemed to the underlying asset before being zapped into the destination market. |\n| Transfer liquidity ZPI | [LP, PT, YT] | [LP, YT] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. All provided inputs (LP, PT & YT) will be sold/redeemed to the underlying asset before being zapped into the destination market with no price impact. |\n| Mint SY | [token] | [SY] | |\n| Redeem SY | [SY] | [token] | |\n| Swap PT between markets (Roll over pts) | [PT] | [PT] | PT is redeemed for the underlying asset and used to buy the new PT. |\n| Exit market | [LP, PT, YT] | [token] | tokensIn doesn't need to include all 3 tokens; any number of tokens will work. |\n| Swap LP to PT between markets | [LP] | [PT] | Only callable until the market's expiry |\n| Pendle swap (swap multiple ERC20 tokens to 1 token) | [token1, token2, ...] | [token] | Support at most 3 tokens in |\n\n`tokensIn` and `tokensOut` are the input and output tokens for the action, should be seperate by comma with no spaces.\n\nExample if your action requires 2 tokensIn, you can pass `tokensIn=0x123,0x456`\n\nFor code examples and migration from individual SDK endpoints, see the [Hosted SDK documentation](https://docs.pendle.finance/pendle-v2/Developers/Backend/HostedSdk#examples).\n\n## Computing cost\n\nThis API will consume 5 computing units if no aggregator is used, with no additional data.\nEnabling aggregator will consume additional computing units, each aggregator cost differently, and could be check at: [Get supported aggregators](#tag/sdk/get/v1/sdk/{chainId}/supported-aggregators)\n\nRefer to our document for guide to reduce CU usage with aggregators: [Reduce CU Usage](https://docs.pendle.finance/pendle-v2/Developers/Backend/HostedSdk#reduce-aggregator-computing-units-v2-endpoints-only)\n\n---\n\n**This is the v3 (POST) variant.** It accepts `inputs` and `outputs` as a JSON request body instead of query parameters — cleaner for multi-token inputs and easier to integrate in typed clients. **Prefer this over v2 (GET) for new integrations.**\n", "operationId": "SdkController_convertV3", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConvertV3Dto" } } } }, "responses": { "200": { "description": "The detected action and data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MultiRouteConvertResponse" } } } } }, "summary": "Universal convert function (recommended — POST body variant)", "tags": [ "SDK" ], "x-computing-unit": "5+", "x-retail-api-rank": 0 } }, "/v2/sdk/{chainId}/swap-pt-cross-chain": { "get": { "description": "Swap a bridged PT on a spoke chain back to a regular token using the fixed-price PT AMM.\n\nThis is specifically for **cross-chain PT redemption flows** where PT has been bridged to a non-primary chain. The fixed-price AMM prices PT based on time-to-maturity, independent of pool liquidity.\n\nSupports both:\n- Exact PT input → token output\n- Exact token output ← PT input (pass the required token amount; the system calculates PT needed)\n\nOnly valid on supported spoke chains.", "operationId": "SdkController_swapPtCrossChainV2", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "receiver", "required": false, "in": "query", "description": "Recipient address for transaction output", "schema": { "type": "string" } }, { "name": "slippage", "required": true, "in": "query", "description": "Maximum slippage tolerance (0-1, where 0.01 equals 1%)", "schema": { "type": "number" } }, { "name": "enableAggregator", "required": false, "in": "query", "description": "Enable swap aggregator to swap between tokens that cannot be natively converted from/to the underlying asset", "schema": { "default": false, "type": "boolean" } }, { "name": "aggregators", "required": false, "in": "query", "description": "List of aggregator names to use for the swap. If not provided, all aggregators will be used.List of supported aggregator can be found at: [getSupportedAggregators](#tag/sdk/get/v1/sdk/{chainId}/supported-aggregators)", "schema": { "example": "kyberswap,okx", "type": "string" } }, { "name": "pt", "required": true, "in": "query", "description": "PT token address", "schema": { "type": "string" } }, { "name": "exactPtIn", "required": true, "in": "query", "description": "Exact amount value PT in", "schema": { "type": "string" } }, { "name": "tokenOut", "required": true, "in": "query", "description": "Output token address", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Swap PT cross-chain using fixed price AMM", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SwapWithFixedPricePtAmmResponse" } } } } }, "summary": "Swap PT using fixed price AMM for cross-chain operations", "tags": [ "SDK" ], "x-computing-unit": "5", "x-retail-api-rank": 4 } }, "/v1/sdk/{chainId}/cross-chain-pt-metadata/{pt}": { "get": { "description": "Returns metadata for a PT that has been bridged to a spoke chain, including maturity, underlying asset details, and fixed-price AMM parameters.\n\nUse this to verify that a bridged PT is supported on the current chain and to fetch its pricing parameters before calling [Swap PT cross-chain](#tag/sdk/get/v2/{chainId}/swap-pt-cross-chain).", "operationId": "SdkController_getPtCrossChainMetadata", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "pt", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Metadata of a bridged PT on selected spoke chain", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PtCrossChainMetadataResponse" } } } } }, "summary": "PT cross-chain metadata", "tags": [ "SDK" ], "x-retail-api-rank": 6969 } }, "/v5/{chainId}/transactions/{address}": { "get": { "description": "Return transactions with: user action (long or short yield, add or remove liquidity), valuation, implied apy.\n\n**Pagination**: This endpoint supports cursor-based pagination using `resumeToken`. The response includes a `resumeToken` field that can be used in the next request to fetch the next page of results. This is more efficient than using `skip` for large datasets.", "operationId": "TransactionsController_transactionsV5", "parameters": [ { "name": "chainId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "type", "required": false, "in": "query", "description": "Transaction type to filter by. Valid values: `TRADES`, `LIQUIDITY`.", "schema": { "$ref": "#/components/schemas/TransactionType" } }, { "name": "minValue", "required": false, "in": "query", "description": "Minimum transaction value filter in USD", "schema": { "type": "number" } }, { "name": "txOrigin", "required": false, "in": "query", "description": "Address of the transaction executor", "schema": { "type": "string" } }, { "name": "action", "required": false, "in": "query", "description": "Specific transaction action to filter by. Valid values: `LONG_YIELD`, `SHORT_YIELD`, `ADD_LIQUIDITY`, `REMOVE_LIQUIDITY`.", "schema": { "$ref": "#/components/schemas/TransactionAction" } }, { "name": "resumeToken", "required": false, "in": "query", "description": "Resume token for pagination. Use this to continue a previous query.", "schema": { "type": "string" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 1000.", "schema": { "default": 10, "type": "number" } }, { "name": "skip", "required": false, "in": "query", "deprecated": true, "description": "Use `resumeToken` instead.", "schema": { "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TransactionsV5Response" } } } } }, "summary": "Get market transactions by address", "tags": [ "Transactions" ], "x-computing-unit": "5", "x-retail-api-rank": 6969 } }, "/v1/statistics/get-distinct-user-from-token": { "get": { "description": "Returns a list of unique wallet addresses that have interacted with a specific token across Pendle markets. \n\nUse the optional `chainId` parameter to filter results to a specific chain, or omit it to get users across all chains. \n\nCommon use cases include:\n- Token holder analysis\n- User adoption metrics\n- Market participation statistics", "operationId": "StatisticsController_getDistinctUserFromToken", "parameters": [ { "name": "token", "required": true, "in": "query", "description": "Token address to query. Can be any Pendle token (PT, YT, SY, LP). Address will be normalized to lowercase.", "schema": { "example": "0x0000000000000000000000000000000000000000", "type": "string" } }, { "name": "chainId", "required": false, "in": "query", "description": "Optional chain ID to filter results. If provided, returns only users who interacted with the token on the specified chain. If omitted, returns users across all chains where the token exists.", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Array of unique wallet addresses that have interacted with the specified token.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetDistinctUsersFromTokenEntity" }, "example": { "users": [ "0x1234567890123456789012345678901234567890", "0x0987654321098765432109876543210987654321", "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd" ] } } } } }, "summary": "Get distinct users for a specific token", "tags": [ "Statistics" ], "x-computing-unit": "3", "x-retail-api-rank": 6969 } }, "/v1/chains": { "get": { "operationId": "ChainsController_getSupportedChainIds", "parameters": [], "responses": { "200": { "description": "List of blockchain networks supported by Pendle, returned as decimal numbers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChainIdsResponse" } } } } }, "summary": "Get supported chain IDs", "tags": [ "Chains" ], "x-computing-unit": "1", "x-retail-api-rank": 6969 } }, "/v1/dashboard/positions/database/{user}": { "get": { "description": "Returns a complete snapshot of a user's Pendle positions across all supported chains, including PT, YT, LP, and SY holdings.\n\nFor each position the response includes token amounts, USD valuations, and claimable interest/reward amounts.\n\n**Caching**: claimable reward amounts are cached for up to 24 hours. For real-time claimable data, read directly from the reward contracts via RPC.\n\nUse the `chainId` query parameter to filter results to a specific chain.", "operationId": "DashboardController_getUserPositions", "parameters": [ { "name": "user", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "filterUsd", "required": false, "in": "query", "description": "Minimum USD value threshold to filter positions", "schema": { "example": 0.1, "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPositionsCrossChainResponse" } } } } }, "summary": "Get user positions by address", "tags": [ "Dashboard" ], "x-computing-unit": "4", "x-retail-api-rank": 6969 } }, "/v1/dashboard/merkle-claimed-rewards/{user}": { "get": { "description": "Returns the historical record of all merkle rewards that a user has already claimed.\n\nUseful for displaying claim history in a dashboard or verifying that a specific reward distribution has been collected.", "operationId": "DashboardController_getMerkleClaimedRewards", "parameters": [ { "name": "user", "required": true, "in": "path", "description": "Ethereum address of the user", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of merkle claimed rewards for the user", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MerkleClaimedRewardsResponse" } } } } }, "summary": "Get all merkle claimed rewards for a user", "tags": [ "Dashboard" ], "x-computing-unit": "2", "x-retail-api-rank": 6969 } }, "/v1/pnl/transactions": { "get": { "description": "Returns the on-chain transaction history for a user address across all Pendle operations.\n\nResults are paginated. Use the `resumeToken` from the response to fetch the next page.\n\nData may lag chain tip by a few minutes due to indexing.", "operationId": "TransactionsController_getTransactions", "parameters": [ { "name": "skip", "required": false, "in": "query", "description": "Number of results to skip. The parameter is capped at 1000.", "schema": { "default": 0, "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of results to return. The parameter is capped at 1000.", "schema": { "default": 10, "type": "number" } }, { "name": "chainId", "required": false, "in": "query", "description": "Chain ID", "schema": { "type": "number" } }, { "name": "user", "required": true, "in": "query", "schema": { "type": "string" } }, { "name": "market", "required": false, "in": "query", "description": "Market address", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TransactionsResponseEntity" } } } } }, "summary": "Get user transaction history", "tags": [ "Transactions" ], "x-computing-unit": "8", "x-retail-api-rank": 6969 } }, "/v1/pendle-emission": { "get": { "description": "Returns the latest confirmed PENDLE emission across all eligible markets. Each market includes a breakdown of emission by TVL, fee, discretionary, and co-bribing components.", "operationId": "PendleEmissionController_pendleEmission", "parameters": [], "responses": { "200": { "description": "The latest emission with per-market breakdown", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetPendleEmissionResponse" } } } } }, "summary": "Get Pendle Emission", "tags": [ "Pendle Emission" ], "x-computing-unit": "1", "x-retail-api-rank": 6969 } } }, "info": { "title": "Pendle V2 API Docs", "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": {} }, "tags": [], "servers": [ { "url": "http://127.0.0.1:9000" } ], "components": { "schemas": { "OrderFilledStatusResponse": { "type": "object", "properties": { "netInputFromMaker": { "type": "string", "description": "BigInt string of netInputFromMaker, the unit is the same as making amount" }, "netOutputToMaker": { "type": "string", "description": "BigInt string of netOutputToMaker, the unit is SY if the order is PT_FOR_TOKEN or YT_FOR_TOKEN, otherwise, the unit it PT or YT depends on type of order" }, "feeAmount": { "type": "string", "description": "BigInt string of feeAmount, in SY" }, "notionalVolume": { "type": "string", "description": "BigInt string of notionalVolume, in SY" } }, "required": [ "netInputFromMaker", "netOutputToMaker", "feeAmount", "notionalVolume" ] }, "OrderStateResponse": { "type": "object", "properties": { "orderType": { "type": "string" }, "exchangeRate": { "type": "string" }, "psAmountToTaker": { "type": "string" }, "psAmountFromTaker": { "type": "string" }, "ysAmountToTaker": { "type": "string" }, "ysAmountFromTaker": { "type": "string" }, "fee": { "type": "string" }, "psRate": { "type": "number" }, "ysRate": { "type": "number" }, "netToMakerIfFullyFilled": { "type": "string", "description": "In SY if the order is PY for token" }, "netFromMakerIfFullyFilled": { "type": "string", "description": "The difference with currentMakingAmount is that this is in SY if currentMakingAmount in tokenIn" }, "notionalVolume": { "type": "string" }, "matchableAmount": { "type": "string" }, "notionalVolumeUSD": { "type": "number" } }, "required": [ "orderType", "exchangeRate", "psAmountToTaker", "psAmountFromTaker", "ysAmountToTaker", "ysAmountFromTaker", "fee", "psRate", "ysRate", "netToMakerIfFullyFilled", "netFromMakerIfFullyFilled", "notionalVolume", "matchableAmount", "notionalVolumeUSD" ] }, "LimitOrderResponse": { "type": "object", "properties": { "id": { "type": "string", "description": "Hash of the order" }, "signature": { "type": "string", "description": "Signature of order, signed by maker" }, "chainId": { "type": "number", "description": "Chain id" }, "salt": { "type": "string", "description": "BigInt string of salt. Salt is a random generated number to distinguish between orders.Because of some technical reason, this number must be dividable by 12421" }, "expiry": { "type": "string", "description": "BigInt string of expiry, in second" }, "nonce": { "type": "string", "description": "BigInt string of nonce" }, "type": { "type": "number", "enum": [ 0, 1, 2, 3 ], "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }" }, "token": { "type": "string", "description": "Token used by user to make order" }, "yt": { "type": "string", "description": "YT address" }, "maker": { "type": "string", "description": "Maker address" }, "receiver": { "type": "string", "description": "Receiver address" }, "makingAmount": { "type": "string", "description": "BigInt string of making amount, the amount of token if the order is TOKEN_FOR_PT or TOKEN_FOR_YT, otherwise the amount of PT or YT" }, "currentMakingAmount": { "type": "string", "description": "BigInt string of remaining making amount, the unit is the same as makingAmount" }, "lnImpliedRate": { "type": "string", "description": "BigInt string of lnImpliedRate. Natural logarithm of the implied rate" }, "failSafeRate": { "type": "string", "description": "BigInt string of failSafeRate" }, "permit": { "type": "string", "description": "Bytes string for permit" }, "orderFilledStatus": { "description": "Order filled status", "allOf": [ { "$ref": "#/components/schemas/OrderFilledStatusResponse" } ] }, "isActive": { "type": "boolean" }, "isCanceled": { "type": "boolean" }, "createdAt": { "format": "date-time", "type": "string" }, "orderState": { "description": "Order state", "allOf": [ { "$ref": "#/components/schemas/OrderStateResponse" } ] }, "fullyExecutedTimestamp": { "format": "date-time", "type": "string", "description": "Fully filled timestamp" }, "canceledTimestamp": { "format": "date-time", "type": "string", "description": "Canceled timestamp" }, "latestEventTimestamp": { "format": "date-time", "type": "string", "description": "Timestamp of latest event" }, "sy": { "type": "string", "description": "SY address" }, "pt": { "type": "string", "description": "PT address" }, "makerBalance": { "type": "string", "description": "Min(maker balance, maker allowance). How much token the maker has available to use for this order" }, "failedMintSy": { "type": "boolean", "description": "Simulate result of the order to mint sy" }, "failedMintSyReason": { "type": "string", "description": "Error reason of the order to mint sy" }, "orderBookBalance": { "type": "string", "description": "Bigint string of amount shown on order book" }, "makingToken": { "type": "string", "description": "Making token address" }, "takingToken": { "type": "string", "description": "Taking token address" }, "status": { "type": "string", "enum": [ "FILLABLE", "PARTIAL_FILLABLE", "FAILED_TRANSFER_TOKEN", "EMPTY_MAKER_BALANCE", "CANCELLED", "FULLY_FILLED", "EXPIRED" ], "description": "LimitOrderStatus" } }, "required": [ "id", "signature", "chainId", "salt", "expiry", "nonce", "type", "token", "yt", "maker", "receiver", "makingAmount", "currentMakingAmount", "lnImpliedRate", "failSafeRate", "permit", "orderFilledStatus", "isActive", "isCanceled", "createdAt", "sy", "pt", "makerBalance", "failedMintSy", "failedMintSyReason", "orderBookBalance", "makingToken", "takingToken", "status" ] }, "LimitOrdersResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/LimitOrderResponse" } } }, "required": [ "total", "limit", "skip", "results" ] }, "LimitOrdersV2Response": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/LimitOrderResponse" } }, "resumeToken": { "type": "string" } }, "required": [ "total", "limit", "results", "resumeToken" ] }, "MakerResponse": { "type": "object", "properties": { "maker": { "type": "string" }, "sumOrderSizeUsd": { "type": "number" }, "numOrders": { "type": "number" } }, "required": [ "maker", "sumOrderSizeUsd", "numOrders" ] }, "MakersResponse": { "type": "object", "properties": { "result": { "type": "array", "items": { "$ref": "#/components/schemas/MakerResponse" } } }, "required": [ "result" ] }, "GenerateLimitOrderDataDto": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain Id" }, "YT": { "type": "string", "description": "YT address" }, "orderType": { "type": "number", "enum": [ 0, 1, 2, 3 ], "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }" }, "token": { "type": "string", "description": "Input token if type is TOKEN_FOR_PT or TOKEN_FOR_YT, output token otherwise" }, "maker": { "type": "string", "description": "Maker address" }, "makingAmount": { "type": "string", "description": "BigInt string of making amount, the amount of token if the order is TOKEN_FOR_PT or TOKEN_FOR_YT, otherwise the amount of PT or YT" }, "impliedApy": { "type": "number", "description": "Implied APY of this limit order" }, "expiry": { "type": "string", "description": "Timestamp of order's expiry, in seconds" } }, "required": [ "chainId", "YT", "orderType", "token", "maker", "makingAmount", "impliedApy", "expiry" ] }, "GenerateLimitOrderDataResponse": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain id" }, "YT": { "type": "string", "description": "YT address" }, "salt": { "type": "string", "description": "BigInt string of salt. Salt is a random generated number to distinguish between orders.Because of some technical reason, this number must be dividable by 12421" }, "expiry": { "type": "string", "description": "Limit order expiry, in string" }, "nonce": { "type": "string", "description": "Nonce of the limit order, this will help the maker to cancel all the limit order they created" }, "token": { "type": "string", "description": "Input token if type is TOKEN_FOR_PT or TOKEN_FOR_YT, output token otherwise" }, "orderType": { "type": "number", "enum": [ 0, 1, 2, 3 ], "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }" }, "failSafeRate": { "type": "string", "description": "BigInt string of failSafeRate" }, "maker": { "type": "string", "description": "Maker's address" }, "receiver": { "type": "string", "description": "Maker's address" }, "makingAmount": { "type": "string", "description": "BigInt string of making amount, the amount of token if the order is TOKEN_FOR_PT or TOKEN_FOR_YT, otherwise the amount of PT or YT" }, "permit": { "type": "string", "description": "" }, "lnImpliedRate": { "format": "int64", "type": "integer", "description": "ln(impliedRate) * 10**18, returned as bigint string" } }, "required": [ "chainId", "YT", "salt", "expiry", "nonce", "token", "orderType", "failSafeRate", "maker", "receiver", "makingAmount", "permit", "lnImpliedRate" ] }, "HttpErrorResponse": { "type": "object", "properties": { "message": { "type": "string" }, "statusCode": { "type": "number" }, "error": { "type": "string" } }, "required": [ "message", "statusCode", "error" ] }, "GenerateScaledOrderDataDto": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain Id" }, "YT": { "type": "string", "description": "YT address" }, "orderType": { "type": "number", "enum": [ 0, 1, 2, 3 ], "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }" }, "token": { "type": "string", "description": "Input token if type is TOKEN_FOR_PT or TOKEN_FOR_YT, output token otherwise" }, "maker": { "type": "string", "description": "Maker address" }, "makingAmount": { "type": "string", "description": "BigInt string of making amount, the amount of token if the order is TOKEN_FOR_PT or TOKEN_FOR_YT, otherwise the amount of PT or YT" }, "lowerImpliedApy": { "type": "number", "description": "Lower implied APY of this scaled order" }, "upperImpliedApy": { "type": "number", "description": "Upper implied APY of this scaled order" }, "orderCount": { "type": "number", "description": "Upper implied APY of this scaled order" }, "sizeDistribution": { "type": "string", "enum": [ "flat", "ascending", "descending" ], "description": "Scaled Order Distribution Type { }" }, "expiry": { "type": "string", "description": "Timestamp of order's expiry, in seconds" } }, "required": [ "chainId", "YT", "orderType", "token", "maker", "makingAmount", "lowerImpliedApy", "upperImpliedApy", "orderCount", "sizeDistribution", "expiry" ] }, "GenerateScaledOrderResponse": { "type": "object", "properties": { "orders": { "description": "List of generated limit orders", "type": "array", "items": { "$ref": "#/components/schemas/GenerateLimitOrderDataResponse" } } }, "required": [ "orders" ] }, "CreateLimitOrderDto": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain Id" }, "signature": { "type": "string", "description": "Signature of order, signed by maker" }, "salt": { "type": "string", "description": "BigInt string of salt" }, "expiry": { "type": "string", "description": "BigInt string of expiry" }, "nonce": { "type": "string", "description": "BigInt string of nonce" }, "type": { "type": "number", "enum": [ 0, 1, 2, 3 ], "description": "LimitOrderType { 0 : TOKEN_FOR_PT, 1 : PT_FOR_TOKEN, 2 : TOKEN_FOR_YT, 3 : YT_FOR_TOKEN }" }, "token": { "type": "string", "description": "Token used by user to make order" }, "yt": { "type": "string", "description": "YT address" }, "maker": { "type": "string", "description": "Maker address" }, "receiver": { "type": "string", "description": "Receiver address" }, "makingAmount": { "type": "string", "description": "BigInt string of making amount" }, "lnImpliedRate": { "type": "string", "description": "BigInt string of lnImpliedRate" }, "failSafeRate": { "type": "string", "description": "BigInt string of failSafeRate" }, "permit": { "type": "string", "description": "Bytes string for permit" } }, "required": [ "chainId", "signature", "salt", "expiry", "nonce", "type", "token", "yt", "maker", "receiver", "makingAmount", "lnImpliedRate", "failSafeRate", "permit" ] }, "LimitOrderTakerResponse": { "type": "object", "properties": { "order": { "$ref": "#/components/schemas/LimitOrderResponse" }, "makingAmount": { "type": "string", "description": "Amount to be used to fill the order, the unit is the same as the unit of limit order' making amount" }, "netFromTaker": { "type": "string", "description": "Amount from taker need to fully fill this order, the unit is SY if the market order is TOKEN_FOR_PT or TOKEN_FOR_YT, otherwise, the unit it PT or YT depends on type of order" }, "netToTaker": { "type": "string", "description": "Actual making amount to taker, the unit is SY if the market order is PT_FOR_TOKEN or YT_FOR_TOKEN, otherwise, the unit it PT or YT depends on type of order" } }, "required": [ "order", "makingAmount", "netFromTaker", "netToTaker" ] }, "LimitOrdersTakerResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/LimitOrderTakerResponse" } } }, "required": [ "total", "limit", "skip", "results" ] }, "OrderBookV2EntryResponse": { "type": "object", "properties": { "impliedApy": { "type": "number", "description": "Order's implied apy, rounded to precision" }, "limitOrderSize": { "format": "int64", "type": "integer", "description": "Bigint string of entry size, in PT/YT amounts to fill this entry" }, "ammSize": { "format": "int64", "type": "integer", "description": "Bigint string of entry size, in AMM LP tokens (if applicable)" } }, "required": [ "impliedApy", "limitOrderSize" ] }, "OrderBookV2Response": { "type": "object", "properties": { "longYieldEntries": { "type": "array", "items": { "$ref": "#/components/schemas/OrderBookV2EntryResponse" } }, "shortYieldEntries": { "type": "array", "items": { "$ref": "#/components/schemas/OrderBookV2EntryResponse" } } }, "required": [ "longYieldEntries", "shortYieldEntries" ] }, "PendleAssetType": { "type": "string", "enum": [ "PENDLE_LP", "SY", "PT", "YT" ] }, "GetAssetPricesCrossChainResponse": { "type": "object", "properties": { "prices": { "type": "object", "additionalProperties": { "type": "number" }, "example": { "1-0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650": 0.9989673642973003, "1-0xd393d1ddd6b8811a86d925f5e14014282581bc04": 1.001712 }, "description": "Assets prices mapped by chainId-address" }, "total": { "type": "number", "description": "Total number of assets" }, "skip": { "type": "number", "description": "Number of assets got skipped" }, "limit": { "type": "number", "nullable": true, "description": "Number of assets limited by the query" } }, "required": [ "prices", "total", "skip" ] }, "PriceOHLCVCSVResponse": { "type": "object", "properties": { "total": { "type": "number", "description": "Total number of data points available" }, "currency": { "type": "string", "deprecated": true, "description": "Always return USD" }, "timeFrame": { "type": "string", "description": "Time frame of each OHLCV data point (e.g., \"1h\", \"1d\", \"1w\")" }, "timestamp_start": { "type": "number", "description": "Start timestamp of the data range in seconds" }, "timestamp_end": { "type": "number", "description": "End timestamp of the data range in seconds" }, "results": { "type": "string", "example": "time,open,high,low,close,volume\n1756245600,42.4563,42.4563,42.4563,42.4563,0.0000", "description": "Resulting CSV string following the format: time,open,high,low,close,volume" } }, "required": [ "total", "currency", "timeFrame", "timestamp_start", "timestamp_end", "results" ] }, "AssetPricesResponse": { "type": "object", "properties": { "total": { "type": "number", "description": "The number of assets returned" }, "addresses": { "description": "Addresses of returned assets, can be mapped by index with priceUsd array", "type": "array", "items": { "type": "string" } }, "pricesUsd": { "type": "array", "description": "Price in usd of mapped asset, can be mapped by index with addresses array, return null if the asset doesnt have price", "example": [ 1, 2, null, 4 ], "items": { "type": "number", "nullable": true } } }, "required": [ "total", "addresses", "pricesUsd" ] }, "NotionalVolumeResponse": { "type": "object", "properties": { "timestamps": { "description": "List of timestamps, each will be mapped to a notional volume", "type": "array", "items": { "type": "string" } }, "volumes": { "description": "List of notional volumes corresponding to each timestamp. It has the same length with timestamps array", "type": "array", "items": { "type": "number" } }, "ammVolumes": { "description": "List of AMM volumes corresponding to each timestamp. It has the same length with timestamps array. Defaults to 0 if not available.", "type": "array", "items": { "type": "number" } }, "limitOrderVolumes": { "description": "List of Limit Order volumes corresponding to each timestamp. It has the same length with timestamps array. Defaults to 0 if not available.", "type": "array", "items": { "type": "number" } } }, "required": [ "timestamps", "volumes", "ammVolumes", "limitOrderVolumes" ] }, "OHLCVDataPoint": { "type": "object", "properties": { "time": { "format": "date-time", "type": "string", "description": "Timestamp of the OHLCV data point" }, "open": { "type": "number", "description": "Opening price at the start of the time period" }, "high": { "type": "number", "description": "Highest price during the time period" }, "low": { "type": "number", "description": "Lowest price during the time period" }, "close": { "type": "number", "description": "Closing price at the end of the time period" }, "volume": { "type": "number", "description": "Trading volume during the time period" } }, "required": [ "time", "open", "high", "low", "close", "volume" ] }, "PriceOHLCVResponse": { "type": "object", "properties": { "limit": { "type": "number", "description": "Maximum number of results returned" }, "total": { "type": "number", "description": "Total number of data points available" }, "currency": { "type": "string", "description": "Currency of the price data (e.g., USD)" }, "timeFrame": { "type": "string", "description": "Time frame of each OHLCV data point (e.g., \"hour\", \"day\", \"week\")" }, "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": { "type": "array", "items": { "$ref": "#/components/schemas/OHLCVDataPoint" } } }, "required": [ "limit", "total", "currency", "timeFrame", "results" ] }, "AssetDataCrossChain": { "type": "object", "properties": { "name": { "type": "string", "description": "asset name", "example": "PT FRAX-USDC" }, "decimals": { "type": "number", "example": 18, "description": "asset decimals" }, "address": { "type": "string", "example": "0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650", "description": "asset address" }, "symbol": { "type": "string", "example": "PT-FRAXUSDC_CurveLP Convex-30MAR2023", "description": "asset symbol" }, "tags": { "example": [ "PT" ], "description": "asset tags", "type": "array", "items": { "type": "string" } }, "expiry": { "type": "string", "example": "2023-03-30T00:00:00.000Z", "description": "asset expiry" }, "proIcon": { "type": "string", "example": "https://storage.googleapis.com/prod-pendle-bucket-a/images/uploads/0d3199a2-0565-4355-ad52-6bfdc67e3467.svg", "description": "asset pro icon" }, "chainId": { "type": "number", "description": "chain id", "example": 1 } }, "required": [ "name", "decimals", "address", "symbol", "tags", "expiry", "proIcon", "chainId" ] }, "GetAllAssetsCrossChainResponse": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/components/schemas/AssetDataCrossChain" } } }, "required": [ "assets" ] }, "AssetData": { "type": "object", "properties": { "name": { "type": "string", "description": "asset name", "example": "PT FRAX-USDC" }, "decimals": { "type": "number", "example": 18, "description": "asset decimals" }, "address": { "type": "string", "example": "0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650", "description": "asset address" }, "symbol": { "type": "string", "example": "PT-FRAXUSDC_CurveLP Convex-30MAR2023", "description": "asset symbol" }, "tags": { "example": [ "PT" ], "description": "asset tags", "type": "array", "items": { "type": "string" } }, "expiry": { "type": "string", "example": "2023-03-30T00:00:00.000Z", "description": "asset expiry" }, "proIcon": { "type": "string", "example": "https://storage.googleapis.com/prod-pendle-bucket-a/images/uploads/0d3199a2-0565-4355-ad52-6bfdc67e3467.svg", "description": "asset pro icon" } }, "required": [ "name", "decimals", "address", "symbol", "tags", "expiry", "proIcon" ] }, "GetAssetsResponse": { "type": "object", "properties": { "assets": { "description": "list of assets", "example": [ { "name": "PT FRAX-USDC", "decimals": 18, "address": "0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650", "symbol": "PT-FRAXUSDC_CurveLP Convex-30MAR2023", "tags": [ "PT" ], "expiry": "2023-03-30T00:00:00.000Z", "proIcon": "https://storage.googleapis.com/prod-pendle-bucket-a/images/assets/pro/acad6337-8ce4-47c2-87a7-c270aab01b3d.svg" }, { "name": "YT FRAX-USDC", "decimals": 18, "address": "0xc5cd692e9b4622ab8cdb57c83a0f99f874a169cd", "symbol": "YT-FRAXUSDC_CurveLP Convex-30MAR2023", "tags": [ "YT" ], "expiry": "2023-03-30T00:00:00.000Z", "proIcon": "https://storage.googleapis.com/prod-pendle-bucket-a/images/assets/pro/2239e536-439d-4c58-a417-805fb63c7ced.svg" } ], "type": "array", "items": { "$ref": "#/components/schemas/AssetData" } } }, "required": [ "assets" ] }, "GetAssetPricesResponse": { "type": "object", "properties": { "prices": { "type": "object", "additionalProperties": { "type": "number" }, "example": { "0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650": 0.9989673642973003, "0xd393d1ddd6b8811a86d925f5e14014282581bc04": 1.001712 } }, "total": { "type": "number", "description": "Total number of assets" }, "skip": { "type": "number", "description": "Number of assets got skipped" }, "limit": { "type": "number", "nullable": true, "description": "Number of assets limited by the query" } }, "required": [ "prices", "total", "skip" ] }, "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)" } } }, "AssetResponse": { "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" }, "baseType": { "type": "string" }, "types": { "type": "array", "items": { "type": "string" } }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "proSymbol": { "type": "string", "nullable": true }, "proIcon": { "type": "string", "nullable": true }, "zappable": { "type": "boolean", "nullable": true }, "simpleName": { "type": "string" }, "simpleSymbol": { "type": "string" }, "simpleIcon": { "type": "string" }, "proName": { "type": "string" } }, "required": [ "id", "chainId", "address", "symbol", "decimals", "name", "baseType", "types", "simpleName", "simpleSymbol", "simpleIcon", "proName" ] }, "AssetsResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } } }, "required": [ "total", "limit", "skip", "results" ] }, "AssetCSVResponse": { "type": "object", "properties": { "results": { "type": "string" } }, "required": [ "results" ] }, "VersionResponse": { "type": "object", "properties": { "major": { "type": "number" }, "minor": { "type": "number" }, "patch": { "type": "number" } }, "required": [ "major", "minor", "patch" ] }, "TokenInfoResponse": { "type": "object", "properties": { "chainId": { "type": "number" }, "address": { "type": "string" }, "decimals": { "type": "number" }, "name": { "type": "string" }, "symbol": { "type": "string" }, "logoURI": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } }, "extensions": { "type": "object" } }, "required": [ "chainId", "address", "decimals", "name", "symbol", "logoURI", "tags", "extensions" ] }, "UniswapTokenListResponse": { "type": "object", "properties": { "name": { "type": "string" }, "timestamp": { "type": "string" }, "version": { "$ref": "#/components/schemas/VersionResponse" }, "tokens": { "type": "array", "items": { "$ref": "#/components/schemas/TokenInfoResponse" } }, "tokenMap": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/TokenInfoResponse" } }, "keywords": { "type": "array", "items": { "type": "string" } }, "logoURI": { "type": "string" }, "tags": { "type": "object", "additionalProperties": { "$ref": "#/components/schemas/TagDefinitionResponse" } } }, "required": [ "name", "timestamp", "version", "tokens", "tokenMap", "keywords", "logoURI", "tags" ] }, "SolanaTokenFileResponse": { "type": "object", "properties": { "uri": { "type": "string" }, "type": { "type": "string" } }, "required": [ "uri", "type" ] }, "SolanaTokenPropertiesResponse": { "type": "object", "properties": { "files": { "type": "array", "items": { "$ref": "#/components/schemas/SolanaTokenFileResponse" } } }, "required": [ "files" ] }, "SolanaTokenResponse": { "type": "object", "properties": { "name": { "type": "string" }, "symbol": { "type": "string" }, "description": { "type": "string" }, "image": { "type": "string" }, "attributes": { "type": "array", "items": { "type": "string" } }, "properties": { "$ref": "#/components/schemas/SolanaTokenPropertiesResponse" } }, "required": [ "name", "symbol", "description", "image", "attributes", "properties" ] }, "SyBasicResponse": { "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" }, "baseType": { "type": "string" }, "types": { "type": "array", "items": { "type": "string" } }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "proSymbol": { "type": "string", "nullable": true }, "proIcon": { "type": "string", "nullable": true }, "zappable": { "type": "boolean", "nullable": true }, "simpleName": { "type": "string" }, "simpleSymbol": { "type": "string" }, "simpleIcon": { "type": "string" }, "proName": { "type": "string" }, "accountingAssetType": { "type": "number" }, "accountingAsset": { "type": "string", "description": "Accounting asset id" }, "underlyingAsset": { "type": "string", "description": "Underlying asset id" }, "rewardTokens": { "description": "Reward token ids", "type": "array", "items": { "type": "string" } }, "inputTokens": { "description": "Input token ids", "type": "array", "items": { "type": "string" } }, "outputTokens": { "description": "Output token ids", "type": "array", "items": { "type": "string" } } }, "required": [ "id", "chainId", "address", "symbol", "decimals", "name", "baseType", "types", "simpleName", "simpleSymbol", "simpleIcon", "proName", "accountingAssetType", "accountingAsset", "underlyingAsset", "rewardTokens", "inputTokens", "outputTokens" ] }, "WhitelistedSysResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/SyBasicResponse" } } }, "required": [ "results" ] }, "SyResponse": { "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" }, "baseType": { "type": "string" }, "types": { "type": "array", "items": { "type": "string" } }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "proSymbol": { "type": "string", "nullable": true }, "proIcon": { "type": "string", "nullable": true }, "zappable": { "type": "boolean", "nullable": true }, "simpleName": { "type": "string" }, "simpleSymbol": { "type": "string" }, "simpleIcon": { "type": "string" }, "proName": { "type": "string" }, "accountingAssetType": { "type": "number" }, "accountingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "underlyingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "rewardTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "inputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "outputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } } }, "required": [ "id", "chainId", "address", "symbol", "decimals", "name", "baseType", "types", "simpleName", "simpleSymbol", "simpleIcon", "proName", "accountingAssetType", "accountingAsset", "underlyingAsset", "rewardTokens", "inputTokens", "outputTokens" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "MarketPointsEntity": { "type": "object", "properties": { "id": { "type": "string", "description": "Market id" }, "points": { "description": "Points configs", "type": "array", "items": { "$ref": "#/components/schemas/PointMetadataEntity" } } }, "required": [ "id", "points" ] }, "GetPointsMarketsResponse": { "type": "object", "properties": { "markets": { "type": "array", "items": { "$ref": "#/components/schemas/MarketPointsEntity" } } }, "required": [ "markets" ] }, "MarketDetails": { "type": "object", "properties": { "liquidity": { "type": "number", "description": "market liquidity in USD", "example": 1234567.89 }, "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": { "$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 } }, "required": [ "liquidity", "pendleApy", "impliedApy", "feeRate", "yieldRange", "aggregatedApy", "maxBoostedApy" ] }, "MarketData": { "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/MarketDetails" } ] }, "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" } } }, "required": [ "name", "address", "expiry", "pt", "yt", "sy", "underlyingAsset", "details", "isNew", "isPrime", "timestamp" ] }, "GetActiveMarketsResponse": { "type": "object", "properties": { "markets": { "description": "active market list", "example": [ { "name": "crvUSD", "address": "0x386f90eb964a477498b528a39d9405e73ed4032b", "expiry": "2024-03-28T00:00:00.000Z", "pt": "1-0xb87511364014c088e30f872efc4a00d7efb843ac", "yt": "1-0xed97f94dd94255637a054098604e0201c442a3fd", "sy": "1-0xe05082b184a34668cd8a904d85fa815802bbb04c", "underlyingAsset": "1-0xb27d1729489d04473631f0afaca3c3a7389ac9f8", "details": { "liquidity": 1000000, "pendleApy": 0.05, "impliedApy": 0.05, "feeRate": 0.001, "yieldRange": { "min": 0.01, "max": 0.02 }, "aggregatedApy": 0.1, "maxBoostedApy": 0.1 }, "isNew": true, "isPrime": true, "timestamp": "2025-03-18T00:00:00.000Z", "categoryIds": [ "stables" ] }, { "name": "USD0++", "address": "0x64506968e80c9ed07bff60c8d9d57474effff2c9", "expiry": "2025-01-30T00:00:00.000Z", "pt": "1-0x61439b9575278054d69c9176d88fafaf8319e4b7", "yt": "1-0x9697e1ef258b847275e1b32f8a57b3a7e2f8ec50", "sy": "1-0x52453825c287ddef62d647ce51c0979d27c461f7", "underlyingAsset": "1-0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", "details": { "liquidity": 1000000, "pendleApy": 0.05, "impliedApy": 0.05, "feeRate": 0.001, "yieldRange": { "min": 0.01, "max": 0.02 }, "aggregatedApy": 0.1, "maxBoostedApy": 0.1 }, "isNew": false, "isPrime": false, "timestamp": "2025-02-18T00:00:00.000Z", "categoryIds": [ "rwa" ] } ], "type": "array", "items": { "$ref": "#/components/schemas/MarketData" } } }, "required": [ "markets" ] }, "GetInactiveMarketsResponse": { "type": "object", "properties": { "markets": { "description": "inactive market list", "example": [ { "name": "crvUSD", "address": "0x386f90eb964a477498b528a39d9405e73ed4032b", "expiry": "2024-03-28T00:00:00.000Z", "pt": "1-0xb87511364014c088e30f872efc4a00d7efb843ac", "yt": "1-0xed97f94dd94255637a054098604e0201c442a3fd", "sy": "1-0xe05082b184a34668cd8a904d85fa815802bbb04c", "underlyingAsset": "1-0xb27d1729489d04473631f0afaca3c3a7389ac9f8", "details": { "liquidity": 1000000, "pendleApy": 0.05, "impliedApy": 0.05, "feeRate": 0.001, "yieldRange": { "min": 0.01, "max": 0.02 }, "aggregatedApy": 0.1, "maxBoostedApy": 0.1 }, "isNew": true, "isPrime": true, "timestamp": "2025-03-18T00:00:00.000Z", "categoryIds": [ "stables" ] }, { "name": "USD0++", "address": "0x64506968e80c9ed07bff60c8d9d57474effff2c9", "expiry": "2025-01-30T00:00:00.000Z", "pt": "1-0x61439b9575278054d69c9176d88fafaf8319e4b7", "yt": "1-0x9697e1ef258b847275e1b32f8a57b3a7e2f8ec50", "sy": "1-0x52453825c287ddef62d647ce51c0979d27c461f7", "underlyingAsset": "1-0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", "details": { "liquidity": 1000000, "pendleApy": 0.05, "impliedApy": 0.05, "feeRate": 0.001, "yieldRange": { "min": 0.01, "max": 0.02 }, "aggregatedApy": 0.1, "maxBoostedApy": 0.1 }, "isNew": false, "isPrime": false, "timestamp": "2025-02-18T00:00:00.000Z", "categoryIds": [ "rwa" ] } ], "type": "array", "items": { "$ref": "#/components/schemas/MarketData" } } }, "required": [ "markets" ] }, "MarketApyHistoriesCSVResponse": { "type": "object", "properties": { "total": { "type": "number" }, "timestamp_start": { "type": "number" }, "timestamp_end": { "type": "number" }, "results": { "type": "string" } }, "required": [ "total", "timestamp_start", "timestamp_end", "results" ] }, "MarketExtendedInfoResponse": { "type": "object", "properties": { "floatingPt": { "type": "number" }, "floatingSy": { "type": "number" }, "sySupplyCap": { "type": "number", "description": "Sy supply cap. Only available for sy with cap, otherwise null. Number is in decimal format", "nullable": true }, "syCurrentSupply": { "type": "number", "description": "Sy current supply. Only available for sy with cap, otherwise null. Number is in decimal format", "nullable": true }, "pyUnit": { "type": "string" }, "ptEqualsPyUnit": { "type": "boolean" }, "underlyingAssetWorthMore": { "type": "string" }, "nativeWithdrawalURL": { "type": "string" }, "nativeDepositURL": { "type": "string" }, "defaultMigratePool": { "type": "string" }, "feeRate": { "type": "number" }, "yieldRange": { "$ref": "#/components/schemas/YieldRangeResponse" } }, "required": [ "floatingPt", "floatingSy", "pyUnit", "ptEqualsPyUnit" ] }, "MarketBasicMetadataResponse": { "type": "object", "properties": { "id": { "type": "string" }, "chainId": { "type": "number" }, "address": { "type": "string" }, "symbol": { "type": "string" }, "expiry": { "format": "date-time", "type": "string" }, "pt": { "$ref": "#/components/schemas/AssetResponse" }, "yt": { "$ref": "#/components/schemas/AssetResponse" }, "sy": { "$ref": "#/components/schemas/AssetResponse" }, "lp": { "$ref": "#/components/schemas/AssetResponse" }, "accountingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "underlyingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "basePricingAsset": { "nullable": true, "description": "Same as accountingAsset", "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "proSymbol": { "type": "string", "nullable": true }, "proIcon": { "type": "string", "nullable": true }, "assetRepresentation": { "type": "string" }, "isWhitelistedPro": { "type": "boolean" }, "isWhitelistedSimple": { "type": "boolean", "deprecated": true }, "votable": { "type": "boolean" }, "isActive": { "type": "boolean", "deprecated": true }, "isWhitelistedLimitOrder": { "type": "boolean" }, "accentColor": { "type": "string", "nullable": true }, "totalPt": { "type": "number", "nullable": true }, "totalSy": { "type": "number", "nullable": true }, "totalLp": { "type": "number", "nullable": true }, "liquidity": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/ValuationResponse" } ] }, "tradingVolume": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/ValuationResponse" } ] }, "underlyingInterestApy": { "type": "number", "nullable": true }, "underlyingRewardApy": { "type": "number", "nullable": true }, "underlyingApy": { "type": "number", "nullable": true }, "impliedApy": { "type": "number", "nullable": true }, "ytFloatingApy": { "type": "number", "nullable": true }, "ptDiscount": { "type": "number", "nullable": true }, "swapFeeApy": { "type": "number", "nullable": true }, "pendleApy": { "type": "number", "nullable": true }, "arbApy": { "type": "number", "nullable": true }, "aggregatedApy": { "type": "number", "nullable": true }, "maxBoostedApy": { "type": "number", "nullable": true }, "lpRewardApy": { "type": "number", "nullable": true }, "voterApy": { "type": "number", "nullable": true }, "ytRoi": { "type": "number", "nullable": true }, "ptRoi": { "type": "number", "nullable": true }, "dataUpdatedAt": { "format": "date-time", "type": "string", "nullable": true }, "categoryIds": { "type": "array", "items": { "type": "string" } }, "timestamp": { "format": "date-time", "type": "string" }, "whitelistedProAt": { "format": "date-time", "type": "string", "nullable": true }, "scalarRoot": { "type": "number" }, "initialAnchor": { "type": "number" }, "extendedInfo": { "description": "Additional market data, only available when market is whitelisted.", "allOf": [ { "$ref": "#/components/schemas/MarketExtendedInfoResponse" } ] }, "isFeatured": { "type": "boolean", "nullable": true }, "isPopular": { "type": "boolean", "nullable": true }, "tvlThresholdTimestamp": { "format": "date-time", "type": "string", "nullable": true }, "isNew": { "type": "boolean", "description": "Market which whitelisted in the last 2 weeks will have isNew==true" }, "name": { "type": "string" }, "simpleName": { "type": "string" }, "simpleSymbol": { "type": "string" }, "simpleIcon": { "type": "string" }, "proName": { "type": "string" }, "farmName": { "type": "string" }, "farmSymbol": { "type": "string" }, "farmSimpleName": { "type": "string" }, "farmSimpleSymbol": { "type": "string" }, "farmSimpleIcon": { "type": "string" }, "farmProName": { "type": "string" }, "farmProSymbol": { "type": "string" }, "farmProIcon": { "type": "string" } }, "required": [ "id", "chainId", "address", "symbol", "expiry", "pt", "yt", "sy", "lp", "accountingAsset", "underlyingAsset", "assetRepresentation", "isWhitelistedPro", "isWhitelistedSimple", "votable", "isActive", "isWhitelistedLimitOrder", "categoryIds", "timestamp", "scalarRoot", "initialAnchor", "extendedInfo", "isNew", "name", "simpleName", "simpleSymbol", "simpleIcon", "proName", "farmName", "farmSymbol", "farmSimpleName", "farmSimpleSymbol", "farmSimpleIcon", "farmProName", "farmProSymbol", "farmProIcon" ] }, "MarketsResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MarketBasicMetadataResponse" } } }, "required": [ "total", "limit", "skip", "results" ] }, "CurrenyAmountEntity": { "type": "object", "properties": { "currency": { "type": "string" }, "amount": { "type": "number", "nullable": true } }, "required": [ "currency" ] }, "FeaturedMarketEntity": { "type": "object", "properties": { "marketAddress": { "type": "string" }, "icon": { "type": "string" }, "tokenSymbol": { "type": "string" }, "symbol": { "type": "string" }, "accentColor": { "type": "string" }, "discountedPrice": { "$ref": "#/components/schemas/CurrenyAmountEntity" }, "fixedApy": { "type": "number" }, "currentPrice": { "$ref": "#/components/schemas/CurrenyAmountEntity" } }, "required": [ "marketAddress", "icon", "tokenSymbol", "symbol", "accentColor", "discountedPrice", "fixedApy", "currentPrice" ] }, "FeaturedMarketsResponseEntity": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/FeaturedMarketEntity" } } }, "required": [ "total", "limit", "skip", "results" ] }, "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" ] }, "ApyBreakdownResponse": { "type": "object", "properties": { "asset": { "$ref": "#/components/schemas/AssetBasicResponse" }, "absoluteApy": { "type": "number" }, "relativeApy": { "type": "number" }, "ytExclusive": { "type": "boolean", "nullable": true }, "lpExclusive": { "type": "boolean", "nullable": true }, "source": { "type": "string", "enum": [ "CONTRACT", "EXTERNAL_REWARD", "PORTAL_INCENTIVE", "PENDLE_CO_BRIBE", "PLASMA_INCENTIVE" ], "nullable": true } }, "required": [ "asset", "absoluteApy", "relativeApy" ] }, "EstimatedDailyPoolRewardResponse": { "type": "object", "properties": { "asset": { "$ref": "#/components/schemas/AssetBasicResponse" }, "amount": { "type": "number" } }, "required": [ "asset", "amount" ] }, "MarketResponse": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique identifier of the market in format \"{chainId}-{address}\"" }, "chainId": { "type": "number", "description": "Chain ID where the market is deployed" }, "address": { "type": "string", "description": "Contract address of the market" }, "symbol": { "type": "string", "description": "Symbol of the market" }, "expiry": { "format": "date-time", "type": "string", "description": "Expiry date of the PT/YT tokens" }, "pt": { "description": "Principal Token (PT) asset information", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "yt": { "description": "Yield Token (YT) asset information", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "sy": { "description": "Standardized Yield (SY) token asset information", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "lp": { "description": "Liquidity Pool (LP) token asset information", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "accountingAsset": { "description": "Asset used for accounting and pricing in this market", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "underlyingAsset": { "description": "The underlying asset that generates yield", "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "basePricingAsset": { "nullable": true, "description": "Same as accountingAsset", "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "rewardTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "inputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "outputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "proSymbol": { "type": "string", "nullable": true }, "proIcon": { "type": "string", "nullable": true }, "assetRepresentation": { "type": "string", "description": "String representation of the asset type for this market" }, "isWhitelistedPro": { "type": "boolean", "description": "Whether this market is whitelisted for pro interface" }, "isWhitelistedSimple": { "type": "boolean", "description": "Whether this market is whitelisted for simple interface", "deprecated": true }, "votable": { "type": "boolean", "description": "Whether this market can receive vePENDLE votes" }, "isActive": { "type": "boolean", "description": "Whether the market is currently active (not expired and not manually deactivated)", "deprecated": true }, "isWhitelistedLimitOrder": { "type": "boolean", "description": "Whether limit orders are enabled for this market" }, "accentColor": { "type": "string", "nullable": true }, "totalPt": { "type": "number", "nullable": true, "description": "Total PT in the market" }, "totalSy": { "type": "number", "nullable": true, "description": "Total SY in the market" }, "totalLp": { "type": "number", "nullable": true, "description": "Total supply of the LP token" }, "totalActiveSupply": { "type": "number", "nullable": true, "description": "Total active supply of the LP token, used for calculate boosting" }, "liquidity": { "nullable": true, "description": "Market liquidity, this is the liquidity of PT and SY in the AMM", "allOf": [ { "$ref": "#/components/schemas/ValuationResponse" } ] }, "tradingVolume": { "nullable": true, "description": "Market 24h trading volume", "allOf": [ { "$ref": "#/components/schemas/ValuationResponse" } ] }, "underlyingInterestApy": { "type": "number", "nullable": true, "description": "Annual percentage yield from the underlying asset interest" }, "underlyingRewardApy": { "type": "number", "nullable": true, "description": "Annual percentage yield from the underlying asset rewards" }, "underlyingRewardApyBreakdown": { "nullable": true, "type": "array", "items": { "$ref": "#/components/schemas/ApyBreakdownResponse" } }, "underlyingApy": { "type": "number", "nullable": true, "description": "APY of the underlying asset" }, "impliedApy": { "type": "number", "nullable": true, "description": "Implied APY of market" }, "ytFloatingApy": { "type": "number", "nullable": true, "description": "Floating APY for YT holders (underlyingApy - impliedApy)" }, "ptDiscount": { "type": "number", "nullable": true, "description": "PT discount relative to underlying asset" }, "swapFeeApy": { "type": "number", "nullable": true, "description": "Swap fee APY for LP holders, without boosting" }, "pendleApy": { "type": "number", "nullable": true, "description": "APY from Pendle rewards" }, "arbApy": { "type": "number", "nullable": true, "description": "APY from arbitrage opportunities" }, "aggregatedApy": { "type": "number", "nullable": true, "description": "APY including yield, swap fee and Pendle rewards without boosting" }, "maxBoostedApy": { "type": "number", "nullable": true, "description": "APY when maximum boost is applied" }, "lpRewardApy": { "type": "number", "nullable": true, "description": "APY from LP reward tokens" }, "voterApy": { "type": "number", "nullable": true, "description": "APY for voters (vePENDLE holders) from voting on this pool" }, "ytRoi": { "type": "number", "nullable": true, "description": "Return on investment for YT holders" }, "ptRoi": { "type": "number", "nullable": true, "description": "Return on investment for PT holders" }, "estimatedDailyPoolRewards": { "nullable": true, "type": "array", "items": { "$ref": "#/components/schemas/EstimatedDailyPoolRewardResponse" } }, "dataUpdatedAt": { "format": "date-time", "type": "string", "nullable": true }, "liquidityChange24h": { "type": "number", "nullable": true, "description": "24-hour percentage change in liquidity" }, "tradingVolumeChange24h": { "type": "number", "nullable": true, "description": "24-hour percentage change in trading volume" }, "underlyingInterestApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in underlying interest APY (in percentage points)" }, "underlyingRewardApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in underlying reward APY (in percentage points)" }, "underlyingApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in underlying APY (in percentage points)" }, "impliedApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in implied APY (in percentage points)" }, "ytFloatingApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in YT floating APY (in percentage points)" }, "ptDiscountChange24h": { "type": "number", "nullable": true, "description": "24-hour change in PT discount (in percentage points)" }, "swapFeeApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in swap fee APY (in percentage points)" }, "pendleApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in PENDLE APY (in percentage points)" }, "aggregatedApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in aggregated APY (in percentage points)" }, "lpRewardApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in LP reward APY (in percentage points)" }, "voterApyChange24h": { "type": "number", "nullable": true, "description": "24-hour change in voter APY (in percentage points)" }, "categoryIds": { "description": "Array of category IDs this market belongs to", "type": "array", "items": { "type": "string" } }, "timestamp": { "format": "date-time", "type": "string", "description": "Timestamp when the market data was last updated" }, "scalarRoot": { "type": "number" }, "initialAnchor": { "type": "number" }, "extendedInfo": { "description": "Additional market data, only available when market is whitelisted.", "allOf": [ { "$ref": "#/components/schemas/MarketExtendedInfoResponse" } ] }, "isFeatured": { "type": "boolean", "nullable": true }, "isPopular": { "type": "boolean", "nullable": true }, "tvlThresholdTimestamp": { "format": "date-time", "type": "string", "nullable": true }, "whitelistedProAt": { "format": "date-time", "type": "string", "nullable": true }, "isNew": { "type": "boolean", "description": "Market which whitelisted in the last 2 weeks will have isNew==true" }, "name": { "type": "string" }, "simpleName": { "type": "string" }, "simpleSymbol": { "type": "string" }, "simpleIcon": { "type": "string" }, "proName": { "type": "string" }, "farmName": { "type": "string" }, "farmSymbol": { "type": "string" }, "farmSimpleName": { "type": "string" }, "farmSimpleSymbol": { "type": "string" }, "farmSimpleIcon": { "type": "string" }, "farmProName": { "type": "string" }, "farmProSymbol": { "type": "string" }, "farmProIcon": { "type": "string" } }, "required": [ "id", "chainId", "address", "symbol", "expiry", "pt", "yt", "sy", "lp", "accountingAsset", "underlyingAsset", "rewardTokens", "inputTokens", "outputTokens", "assetRepresentation", "isWhitelistedPro", "isWhitelistedSimple", "votable", "isActive", "isWhitelistedLimitOrder", "categoryIds", "timestamp", "scalarRoot", "initialAnchor", "extendedInfo", "isNew", "name", "simpleName", "simpleSymbol", "simpleIcon", "proName", "farmName", "farmSymbol", "farmSimpleName", "farmSimpleSymbol", "farmSimpleIcon", "farmProName", "farmProSymbol", "farmProIcon" ] }, "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" ] }, "MarketHistoryResponse": { "type": "object", "properties": { "timestamp": { "format": "date-time", "type": "string" }, "liquidity": { "$ref": "#/components/schemas/ValuationResponse" }, "tradingVolume": { "$ref": "#/components/schemas/ValuationResponse" }, "totalTvl": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/ValuationResponse" } ] }, "underlyingInterestApy": { "type": "number" }, "underlyingRewardApy": { "type": "number" }, "underlyingApy": { "type": "number" }, "impliedApy": { "type": "number" }, "ytFloatingApy": { "type": "number" }, "ptDiscount": { "type": "number" }, "swapFeeApy": { "type": "number" }, "pendleApy": { "type": "number" }, "aggregatedApy": { "type": "number" }, "lpRewardApy": { "type": "number" }, "voterApy": { "type": "number" }, "totalPt": { "type": "number" }, "totalSy": { "type": "number" }, "totalLp": { "type": "number" }, "totalActiveSupply": { "type": "number" } }, "required": [ "timestamp", "liquidity", "tradingVolume", "underlyingInterestApy", "underlyingRewardApy", "underlyingApy", "impliedApy", "ytFloatingApy", "ptDiscount", "swapFeeApy", "pendleApy", "aggregatedApy", "lpRewardApy", "voterApy", "totalPt", "totalSy", "totalLp", "totalActiveSupply" ] }, "MarketHistoriesResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "timestamp_start": { "format": "date-time", "type": "string" }, "timestamp_end": { "format": "date-time", "type": "string" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MarketHistoryResponse" } } }, "required": [ "total", "timestamp_start", "results" ] }, "MarketApyHistoryResponse": { "type": "object", "properties": { "timestamp": { "format": "date-time", "type": "string", "description": "Timestamp of the APY data point" }, "underlyingApy": { "type": "number", "description": "APY of the underlying asset" }, "impliedApy": { "type": "number", "description": "Implied APY of market" } }, "required": [ "timestamp", "underlyingApy", "impliedApy" ] }, "MarketApyHistoriesResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "timestamp_start": { "format": "date-time", "type": "string" }, "timestamp_end": { "format": "date-time", "type": "string" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MarketApyHistoryResponse" } } }, "required": [ "total", "limit", "timestamp_start", "timestamp_end", "results" ] }, "GetMarketStatHistoryCSVResponse": { "type": "object", "properties": { "total": { "type": "number", "description": "total data point of the result" }, "timestamp_start": { "type": "number", "description": "timestamp start of the result" }, "timestamp_end": { "type": "number", "description": "timestamp end of the result" }, "results": { "type": "string", "description": "csv result with 4 column: timestamp,maxApy,baseApy,tvl. Timestamp is in second, tvl is in usd" } }, "required": [ "total", "timestamp_start", "timestamp_end", "results" ] }, "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" ] }, "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" ] }, "MarketHistoricalDataTableResponse": { "type": "object", "properties": { "total": { "type": "number" }, "timestamp_start": { "type": "number" }, "timestamp_end": { "type": "number" }, "timestamp": { "description": "Array of timestamp in second", "type": "array", "items": { "type": "number" } }, "maxApy": { "description": "Array of maxApy. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "baseApy": { "description": "Array of baseApy. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "underlyingApy": { "description": "Array of underlyingApy. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "impliedApy": { "description": "Array of impliedApy. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "tvl": { "description": "Array of tvl (market liquidity in USD)", "type": "array", "items": { "type": "number" } }, "totalTvl": { "description": "Array of total TVL (in USD)", "type": "array", "items": { "type": "number" } }, "underlyingInterestApy": { "description": "Array of underlying interest APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "underlyingRewardApy": { "description": "Array of underlying reward APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "ytFloatingApy": { "description": "Array of YT floating APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "swapFeeApy": { "description": "Array of swap fee APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "voterApr": { "description": "Array of voter APR. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "pendleApy": { "description": "Array of PENDLE APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "lpRewardApy": { "description": "Array of LP reward APY. 0.5 means 50%", "type": "array", "items": { "type": "number" } }, "totalPt": { "description": "Array of total PT amount", "type": "array", "items": { "type": "number" } }, "totalSy": { "description": "Array of total SY amount", "type": "array", "items": { "type": "number" } }, "totalSupply": { "description": "Array of total LP supply", "type": "array", "items": { "type": "number" } }, "ptPrice": { "description": "Array of PT price (in USD)", "type": "array", "items": { "type": "number" } }, "ytPrice": { "description": "Array of YT price (in USD)", "type": "array", "items": { "type": "number" } }, "syPrice": { "description": "Array of SY price (in USD)", "type": "array", "items": { "type": "number" } }, "lpPrice": { "description": "Array of LP price (in USD)", "type": "array", "items": { "type": "number" } }, "lastEpochVotes": { "description": "Array of last epoch votes", "type": "array", "items": { "type": "number" } }, "explicitSwapFee": { "description": "Array of explicit swap fee (in USD). Only available for daily and weekly timeframes", "type": "array", "items": { "type": "number" } }, "implicitSwapFee": { "description": "Array of implicit swap fee (in USD). Only available for daily and weekly timeframes", "type": "array", "items": { "type": "number" } }, "limitOrderFee": { "description": "Array of limit order fee (in USD). Only available for daily and weekly timeframes", "type": "array", "items": { "type": "number" } } }, "required": [ "total", "timestamp_start", "timestamp_end", "timestamp" ] }, "MarketImpliedApyDataPoint": { "type": "object", "properties": { "timestamp": { "type": "number" }, "impliedApy": { "type": "number" } }, "required": [ "timestamp", "impliedApy" ] }, "MarketImpliedApyResponseEntity": { "type": "object", "properties": { "total": { "type": "number" }, "timestamp_start": { "type": "number" }, "timestamp_end": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MarketImpliedApyDataPoint" } } }, "required": [ "total", "results" ] }, "MarketAssetsResponse": { "type": "object", "properties": { "pt": { "$ref": "#/components/schemas/AssetResponse" }, "yt": { "$ref": "#/components/schemas/AssetResponse" }, "sy": { "$ref": "#/components/schemas/AssetResponse" }, "lp": { "$ref": "#/components/schemas/AssetResponse" }, "accountingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "underlyingAsset": { "$ref": "#/components/schemas/AssetResponse" }, "basePricingAsset": { "description": "Same as accountingAsset", "deprecated": true, "allOf": [ { "$ref": "#/components/schemas/AssetResponse" } ] }, "rewardTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "inputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } }, "outputTokens": { "type": "array", "items": { "$ref": "#/components/schemas/AssetResponse" } } }, "required": [ "pt", "yt", "sy", "lp", "accountingAsset", "underlyingAsset", "basePricingAsset", "rewardTokens", "inputTokens", "outputTokens" ] }, "MarketCategoryResponse": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ] }, "GetAllMarketCategoriesResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/MarketCategoryResponse" } } }, "required": [ "results" ] }, "UtilizedProtocolResponse": { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string" }, "name": { "type": "string" }, "imageUrl": { "type": "string" } }, "required": [ "id", "url", "name", "imageUrl" ] }, "GetAllUtilizedProtocolsResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/UtilizedProtocolResponse" } } }, "required": [ "results" ] }, "VoteV2Response": { "type": "object", "properties": { "votes": { "type": "number", "description": "Absolute number of votes" }, "percentage": { "type": "number", "description": "Percentage of total votes" } }, "required": [ "votes", "percentage" ] }, "PoolV2Response": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique identifier of the pool (market)" }, "symbol": { "type": "string", "description": "Symbol of the pool (market)" }, "expiry": { "type": "string", "description": "Expiry date of the pool (market)" }, "currentVoterApr": { "type": "number", "description": "Voter APR for current epoch" }, "lastEpochVoterApr": { "type": "number", "description": "Voter APR from last epoch" }, "currentSwapFee": { "type": "number", "description": "Swap fees collected in current epoch (in USD)" }, "lastEpochSwapFee": { "type": "number", "description": "Swap fees collected in last epoch (in USD)" }, "projectedVoterApr": { "type": "number", "description": "Projected voter APR for next epoch" }, "projectedVotes": { "nullable": true, "description": "Projected votes for next epoch", "allOf": [ { "$ref": "#/components/schemas/VoteV2Response" } ] }, "currentVotes": { "nullable": true, "description": "Votes in current epoch", "allOf": [ { "$ref": "#/components/schemas/VoteV2Response" } ] }, "expectedCap": { "type": "string", "description": "Expected incentive cap for next epoch (BigInt string)" }, "currentCap": { "type": "string", "description": "Current incentive cap for this epoch (BigInt string)" } }, "required": [ "id", "symbol", "expiry" ] }, "VePendleDataResponse": { "type": "object", "properties": { "avgLockDuration": { "type": "number", "description": "Average lock duration in days" }, "totalPendleLocked": { "type": "number", "description": "Total amount of PENDLE tokens locked in vePENDLE" }, "vePendleSupply": { "type": "number", "description": "Total supply of vePENDLE tokens" }, "totalProjectedVotes": { "type": "number", "description": "Total projected votes for next epoch" }, "totalCurrentVotes": { "type": "number", "description": "Total votes in current epoch" }, "pools": { "description": "List of voting pools with their APY, fees, and voting data", "type": "array", "items": { "$ref": "#/components/schemas/PoolV2Response" } } }, "required": [ "avgLockDuration", "totalPendleLocked", "vePendleSupply", "totalProjectedVotes", "totalCurrentVotes", "pools" ] }, "PendleTokenSupplyResponse": { "type": "object", "properties": { "timestamp": { "format": "date-time", "type": "string", "description": "Timestamp of the token supply data" }, "totalPendleCirculating": { "type": "number", "description": "Total circulating supply of PENDLE tokens (not locked)" }, "totalPendleLocked": { "type": "number", "description": "Total amount of PENDLE tokens locked in vePENDLE" }, "totalPendleSupply": { "type": "number", "description": "Total supply of PENDLE tokens" } }, "required": [ "timestamp", "totalPendleCirculating", "totalPendleLocked", "totalPendleSupply" ] }, "GetMonthlyRevenueResponse": { "type": "object", "properties": { "revenues": { "description": "The revenues of the month in USD within the time range", "type": "array", "items": { "type": "number" } }, "epochStartDates": { "description": "The start dates of the month in Date within the time range", "type": "array", "items": { "type": "string" } }, "accumulatedRevenue": { "type": "number", "description": "all time revenues in USD" } }, "required": [ "revenues", "epochStartDates", "accumulatedRevenue" ] }, "VePendleExtendedDataResponse": { "type": "object", "properties": { "avgLockDuration": { "type": "number", "description": "Average lock duration in days" }, "totalPendleLocked": { "type": "number", "description": "Total amount of PENDLE tokens locked in vePENDLE" }, "vePendleSupply": { "type": "number", "description": "Total supply of vePENDLE tokens" }, "totalProjectedVotes": { "type": "number", "description": "Total projected votes for next epoch" }, "totalCurrentVotes": { "type": "number", "description": "Total votes in current epoch" }, "pools": { "description": "List of voting pools with their APY, fees, and voting data", "type": "array", "items": { "$ref": "#/components/schemas/PoolV2Response" } }, "tokenSupply": { "description": "Current circulating and total supply of PENDLE tokens", "allOf": [ { "$ref": "#/components/schemas/PendleTokenSupplyResponse" } ] }, "monthlyRevenue": { "description": "Monthly protocol revenue breakdown and trends", "allOf": [ { "$ref": "#/components/schemas/GetMonthlyRevenueResponse" } ] } }, "required": [ "avgLockDuration", "totalPendleLocked", "vePendleSupply", "totalProjectedVotes", "totalCurrentVotes", "pools" ] }, "PoolResponse": { "type": "object", "properties": { "id": { "type": "string" }, "chainId": { "type": "number" }, "address": { "type": "string" }, "symbol": { "type": "string" }, "expiry": { "type": "string" }, "protocol": { "type": "string", "nullable": true }, "underlyingPool": { "type": "string", "nullable": true }, "voterApy": { "type": "number" }, "accentColor": { "type": "string", "nullable": true }, "name": { "type": "string" }, "farmSimpleName": { "type": "string" }, "farmSimpleIcon": { "type": "string" }, "farmProName": { "type": "string" }, "farmProIcon": { "type": "string" } }, "required": [ "id", "chainId", "address", "symbol", "expiry", "voterApy", "name", "farmSimpleName", "farmSimpleIcon", "farmProName", "farmProIcon" ] }, "VoteResponse": { "type": "object", "properties": { "pool": { "$ref": "#/components/schemas/PoolResponse" }, "votes": { "type": "number" }, "percentage": { "type": "number" } }, "required": [ "pool", "votes", "percentage" ] }, "VoteSnapshotResponse": { "type": "object", "properties": { "votes": { "type": "array", "items": { "$ref": "#/components/schemas/VoteResponse" } }, "totalPools": { "type": "number" }, "totalVotes": { "type": "number" }, "epoch": { "format": "date-time", "type": "string" } }, "required": [ "votes", "totalPools", "totalVotes", "epoch" ] }, "PoolVoterApyResponse": { "type": "object", "properties": { "pool": { "$ref": "#/components/schemas/PoolResponse" }, "voterApy": { "type": "number" } }, "required": [ "pool", "voterApy" ] }, "PoolVoterApysResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/PoolVoterApyResponse" } }, "totalPools": { "type": "number" }, "timestamp": { "format": "date-time", "type": "string" } }, "required": [ "results", "totalPools", "timestamp" ] }, "PoolVoterAprSwapFeeResponse": { "type": "object", "properties": { "pool": { "$ref": "#/components/schemas/PoolResponse" }, "currentVoterApr": { "type": "number" }, "lastEpochVoterApr": { "type": "number" }, "currentSwapFee": { "type": "number" }, "lastEpochSwapFee": { "type": "number" }, "projectedVoterApr": { "type": "number" } }, "required": [ "pool", "currentVoterApr", "lastEpochVoterApr", "currentSwapFee", "lastEpochSwapFee", "projectedVoterApr" ] }, "PoolVoterAprsSwapFeesResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/PoolVoterAprSwapFeeResponse" } }, "totalPools": { "type": "number" }, "totalFee": { "type": "number" }, "timestamp": { "format": "date-time", "type": "string" } }, "required": [ "results", "totalPools", "totalFee", "timestamp" ] }, "VoterApyChartDataPoint": { "type": "object", "properties": { "time": { "format": "date-time", "type": "string" }, "voterApy": { "type": "number" } }, "required": [ "time", "voterApy" ] }, "PoolVoterApyChart": { "type": "object", "properties": { "values": { "type": "array", "items": { "$ref": "#/components/schemas/VoterApyChartDataPoint" } }, "pool": { "$ref": "#/components/schemas/PoolResponse" } }, "required": [ "values", "pool" ] }, "VoterApyChartResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/PoolVoterApyChart" } } }, "required": [ "results" ] }, "VePendleApyChartDataPoint": { "type": "object", "properties": { "time": { "format": "date-time", "type": "string" }, "vePendleBaseApy": { "type": "number" }, "vePendleMaxApy": { "type": "number" } }, "required": [ "time", "vePendleBaseApy", "vePendleMaxApy" ] }, "VePendleApyChartResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/VePendleApyChartDataPoint" } }, "timeFrame": { "type": "string" }, "timestamp_gte": { "format": "date-time", "type": "string" }, "timestamp_lte": { "format": "date-time", "type": "string" } }, "required": [ "results", "timeFrame", "timestamp_gte", "timestamp_lte" ] }, "VoteData": { "type": "object", "properties": { "txHash": { "type": "string" }, "timestamp": { "format": "date-time", "type": "string" }, "poolChainId": { "type": "number" }, "poolAddress": { "type": "string" }, "user": { "type": "string" }, "weight": { "type": "number" }, "vePendleVote": { "type": "number" } }, "required": [ "txHash", "timestamp", "poolChainId", "poolAddress", "user", "weight", "vePendleVote" ] }, "GetHistoricalVotesResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/VoteData" } } }, "required": [ "data" ] }, "MarketMetaData": { "type": "object", "properties": { "id": { "type": "string", "description": "market id" } }, "required": [ "id" ] }, "TotalFeesWithTimestamp": { "type": "object", "properties": { "time": { "format": "date-time", "type": "string", "description": "timestamp where total fee is being calculated" }, "totalFees": { "type": "number", "description": "total fees at given timestamp" } }, "required": [ "time", "totalFees" ] }, "MarketTotalFeesData": { "type": "object", "properties": { "market": { "description": "market metadata", "allOf": [ { "$ref": "#/components/schemas/MarketMetaData" } ] }, "values": { "description": "total fee at each timestamp", "type": "array", "items": { "$ref": "#/components/schemas/TotalFeesWithTimestamp" } } }, "required": [ "market", "values" ] }, "AllMarketTotalFeesResponse": { "type": "object", "properties": { "results": { "description": "all market total fees response", "type": "array", "items": { "$ref": "#/components/schemas/MarketTotalFeesData" } } }, "required": [ "results" ] }, "GetOngoingVotesResponse": { "type": "object", "properties": { "votes": { "type": "array", "items": { "$ref": "#/components/schemas/VoteResponse" } }, "totalPools": { "type": "number" }, "totalVotes": { "type": "number" } }, "required": [ "votes", "totalPools", "totalVotes" ] }, "GetVePendleCapResponse": { "type": "object", "properties": { "fee": { "type": "object" }, "currentCap": { "type": "object" }, "expectedCap": { "type": "object" } }, "required": [ "fee", "currentCap", "expectedCap" ] }, "MetadataQueryDto": { "type": "object", "properties": { "keys": { "type": "array", "items": { "type": "string" } } }, "required": [ "keys" ] }, "MetadataResponse": { "type": "object", "properties": { "results": { "type": "object" }, "total": { "type": "number" } }, "required": [ "results", "total" ] }, "MetadataValuesResponse": { "type": "object", "properties": { "values": { "type": "array", "items": { "type": "object", "nullable": true }, "description": "Values of given metadata keys in the same order with keys" } }, "required": [ "values" ] }, "GetMetadataByTemplateResponse": { "type": "object", "properties": { "keys": { "type": "array", "items": { "type": "string" } }, "values": { "type": "array", "items": { "type": "object" }, "description": "Values of given metadata keys in the same order with keys" } }, "required": [ "keys", "values" ] }, "MarketTokensResponse": { "type": "object", "properties": { "tokensMintSy": { "description": "tokens can be use for tokenMintSy", "type": "array", "items": { "type": "string" } }, "tokensRedeemSy": { "description": "tokens can be use for tokenRedeemSy", "type": "array", "items": { "type": "string" } }, "tokensIn": { "description": "input tokens of swap or zap function", "type": "array", "items": { "type": "string" } }, "tokensOut": { "description": "output tokens of swap or zap function", "type": "array", "items": { "type": "string" } } }, "required": [ "tokensMintSy", "tokensRedeemSy", "tokensIn", "tokensOut" ] }, "SupportedAggregator": { "type": "object", "properties": { "name": { "type": "string", "description": "Name of the aggregator, e.g., kyberswap, okx, odos, paraswap", "example": "kyberswap" }, "computingUnit": { "type": "number", "description": "Computing unit required for the aggregator", "example": 5 } }, "required": [ "name", "computingUnit" ] }, "SupportedAggregatorsResponse": { "type": "object", "properties": { "aggregators": { "description": "List of supported aggregators with their computing units", "type": "array", "items": { "$ref": "#/components/schemas/SupportedAggregator" } } }, "required": [ "aggregators" ] }, "GetSpotSwappingPriceResponse": { "type": "object", "properties": { "underlyingToken": { "type": "string", "description": "underlying token address that will be used for swapping" }, "underlyingTokenToPtRate": { "type": "object", "description": "number of PT by swapping 1 underlying token. If the swap can not be done, this value will be null", "nullable": true }, "ptToUnderlyingTokenRate": { "type": "object", "description": "number of underlying token by swapping 1 PT. If the swap can not be done, this value will be null", "nullable": true }, "underlyingTokenToYtRate": { "type": "object", "description": "number of YT by swapping 1 underlying token. If the swap can not be done, this value will be null", "nullable": true }, "ytToUnderlyingTokenRate": { "type": "object", "description": "number of underlying token by swapping 1 YT. If the swap can not be done, this value will be null", "nullable": true }, "impliedApy": { "type": "number", "description": "implied apy of the given market" } }, "required": [ "underlyingToken", "underlyingTokenToPtRate", "ptToUnderlyingTokenRate", "underlyingTokenToYtRate", "ytToUnderlyingTokenRate", "impliedApy" ] }, "TransactionDto": { "type": "object", "properties": { "data": { "type": "string", "description": "Transaction data" }, "to": { "type": "string", "description": "Transaction receiver" }, "from": { "type": "string", "description": "Transaction sender" }, "value": { "type": "string", "description": "Transaction value" } }, "required": [ "data", "to", "from", "value" ] }, "TokenAmountResponse": { "type": "object", "properties": { "token": { "type": "string" }, "amount": { "type": "string" } }, "required": [ "token", "amount" ] }, "PriceImpactBreakDownData": { "type": "object", "properties": { "internalPriceImpact": { "type": "number" }, "externalPriceImpact": { "type": "number" } }, "required": [ "internalPriceImpact", "externalPriceImpact" ] }, "ImpliedApy": { "type": "object", "properties": { "before": { "type": "number" }, "after": { "type": "number" } }, "required": [ "before", "after" ] }, "FeeUsd": { "type": "object", "properties": { "usd": { "type": "number" } }, "required": [ "usd" ] }, "SwapData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "impliedApy": { "$ref": "#/components/schemas/ImpliedApy" }, "effectiveApy": { "type": "number" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "SwapResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/SwapData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "AddLiquidityData": { "type": "object", "properties": { "amountLpOut": { "type": "string" }, "amountYtOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "impliedApy": { "$ref": "#/components/schemas/ImpliedApy" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountLpOut", "amountYtOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "AddLiquidityResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/AddLiquidityData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "RemoveLiquidityData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "impliedApy": { "$ref": "#/components/schemas/ImpliedApy" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "RemoveLiquidityResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/RemoveLiquidityData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "MintData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown" ] }, "MintResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/MintData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "RedeemData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown" ] }, "RedeemResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/RedeemData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "MintSyData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown" ] }, "MintSyResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/MintSyData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "RedeemSyData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown" ] }, "RedeemSyResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/RedeemSyData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "TransferLiquidityData": { "type": "object", "properties": { "amountLpOut": { "type": "string" }, "amountYtOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountLpOut", "amountYtOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "ContractParamInfo": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } } }, "required": [ "method", "contractCallParamsName", "contractCallParams" ] }, "ParamsBreakdown": { "type": "object", "properties": { "selfCall1": { "$ref": "#/components/schemas/ContractParamInfo" }, "selfCall2": { "$ref": "#/components/schemas/ContractParamInfo" }, "reflectCall": { "$ref": "#/components/schemas/ContractParamInfo" } }, "required": [ "selfCall1", "reflectCall" ] }, "TransferLiquidityResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/TransferLiquidityData" }, "paramsBreakdown": { "$ref": "#/components/schemas/ParamsBreakdown" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data", "paramsBreakdown" ] }, "RollOverPtData": { "type": "object", "properties": { "amountPtOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "effectiveApy": { "type": "number" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountPtOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "RollOverPtResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/RollOverPtData" }, "paramsBreakdown": { "$ref": "#/components/schemas/ParamsBreakdown" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data", "paramsBreakdown" ] }, "AddLiquidityDualData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "amountTokenUsed": { "type": "string" }, "amountPtUsed": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "amountTokenUsed", "amountPtUsed", "priceImpact", "priceImpactBreakDown" ] }, "AddLiquidityDualResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/AddLiquidityDualData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "RemoveLiquidityDualData": { "type": "object", "properties": { "amountTokenOut": { "type": "string" }, "amountPtOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountTokenOut", "amountPtOut", "priceImpact", "priceImpactBreakDown" ] }, "RemoveLiquidityDualResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/RemoveLiquidityDualData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "SdkResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx" ] }, "PendleSwapInput": { "type": "object", "properties": { "token": { "type": "string", "description": "Input token address" }, "amount": { "type": "string", "description": "Amount of input tokens used for swapping" } }, "required": [ "token", "amount" ] }, "PendleSwapDtoV2": { "type": "object", "properties": { "receiver": { "type": "string", "description": "The address to receive the output of the action" }, "inputs": { "type": "array", "items": { "$ref": "#/components/schemas/PendleSwapInput" } }, "tokenOut": { "type": "string", "description": "Output token address" }, "slippage": { "type": "number", "description": "Max slippage accepted. A value from 0 to 1 (0.01 is 1%)" }, "aggregators": { "type": "string", "description": "List of aggregator names to use for the swap. If not provided, all aggregators will be used.List of supported aggregator can be found at: [getSupportedAggregators](#/SDK/SdkController_getSupportedAggregators)", "example": "kyberswap,okx" } }, "required": [ "inputs", "tokenOut", "slippage" ] }, "PendleSwapData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown" ] }, "PendleSwapResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/PendleSwapData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "ExitMarketData": { "type": "object", "properties": { "amountOut": { "type": "string" }, "priceImpact": { "type": "number" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "amountOut", "priceImpact", "priceImpactBreakDown", "fee" ] }, "ExitMarketResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/ExitMarketData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "RedeemInterestsAndRewardsResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx" ] }, "ConvertData": { "type": "object", "properties": { "aggregatorType": { "type": "string" }, "priceImpact": { "type": "number" }, "impliedApy": { "$ref": "#/components/schemas/ImpliedApy" }, "priceImpactBreakDown": { "$ref": "#/components/schemas/PriceImpactBreakDownData" }, "effectiveApy": { "type": "number" }, "paramsBreakdown": { "description": "Parameter breakdown for transfer liquidity", "allOf": [ { "$ref": "#/components/schemas/ParamsBreakdown" } ] }, "fee": { "description": "Fee in USD", "allOf": [ { "$ref": "#/components/schemas/FeeUsd" } ] } }, "required": [ "aggregatorType", "priceImpact", "priceImpactBreakDown" ] }, "ConvertResponse": { "type": "object", "properties": { "contractParamInfo": { "description": "Contract params info", "allOf": [ { "$ref": "#/components/schemas/ContractParamInfo" } ] }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "outputs": { "description": "Output token amounts from the action", "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/ConvertData" } }, "required": [ "contractParamInfo", "tx", "outputs", "data" ] }, "MultiRouteConvertResponse": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "swap", "add-liquidity", "remove-liquidity", "exit-market", "transfer-liquidity", "roll-over-pt", "add-liquidity-dual", "remove-liquidity-dual", "mint-py", "redeem-py", "mint-sy", "redeem-sy", "pendle-swap", "convert-lp-to-pt" ], "description": "The action that was performed" }, "inputs": { "description": "Input token amounts for the action", "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "requiredApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "routes": { "type": "array", "items": { "$ref": "#/components/schemas/ConvertResponse" } }, "rewards": { "description": "Reward token amounts from redeem action", "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } } }, "required": [ "action", "inputs", "routes" ] }, "TokenAmountDto": { "type": "object", "properties": { "token": { "type": "string", "description": "Token address" }, "amount": { "type": "string", "description": "Token amount in wei" } }, "required": [ "token", "amount" ] }, "OKXCustomParamsDto": { "type": "object", "properties": { "fromTokenReferrerWalletAddress": { "type": "string" }, "toTokenReferrerWalletAddress": { "type": "string" }, "feePercent": { "type": "number" }, "positiveSlippagePercent": { "type": "number" } } }, "ConvertV3Dto": { "type": "object", "properties": { "receiver": { "type": "string", "description": "Recipient address for transaction output" }, "slippage": { "type": "number", "description": "Maximum slippage tolerance (0-1, where 0.01 equals 1%)" }, "enableAggregator": { "type": "boolean", "default": false, "description": "Enable swap aggregator to swap between tokens that cannot be natively converted from/to the underlying asset" }, "aggregators": { "description": "List of aggregator names to use for the swap. If not provided, default aggregators will be used.List of supported aggregator can be found at: [getSupportedAggregators](#tag/sdk/get/v1/sdk/{chainId}/supported-aggregators)", "type": "array", "items": { "type": "string" } }, "inputs": { "description": "List of input tokens and their amounts", "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountDto" } }, "outputs": { "description": "Output token addresses", "type": "array", "items": { "type": "string" } }, "redeemRewards": { "type": "boolean", "description": "Redeem rewards", "default": false }, "needScale": { "type": "boolean", "description": "Aggregators needScale value, only set to true when amounts are updated onchain. When enabled, please make sure to buffer the amountIn by about 2%", "default": false }, "additionalData": { "type": "string", "description": "Available fields: `impliedApy`, `effectiveApy`. Comma separated list of fields to return. For example: `field1,field2`. More fields will consume more computing units." }, "useLimitOrder": { "type": "boolean", "description": "To use limit orders when converting, default to true", "default": true }, "okxSwapParams": { "$ref": "#/components/schemas/OKXCustomParamsDto" } }, "required": [ "slippage", "inputs", "outputs" ] }, "SwapPtCrossChainData": { "type": "object", "properties": { "netTokenOut": { "type": "string", "description": "Net token output amount" }, "netPtIn": { "type": "string", "description": "Net PT input amount" } }, "required": [ "netTokenOut", "netPtIn" ] }, "SwapPtCrossChainResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/SwapPtCrossChainData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "SwapWithFixedPricePtAmmData": { "type": "object", "properties": { "netTokenOut": { "type": "string", "description": "Net token output amount" } }, "required": [ "netTokenOut" ] }, "SwapWithFixedPricePtAmmResponse": { "type": "object", "properties": { "method": { "type": "string", "description": "Method name" }, "contractCallParamsName": { "description": "Contract call parameters name", "type": "array", "items": { "type": "string" } }, "contractCallParams": { "description": "Contract call parameters", "type": "array", "items": { "type": "array" } }, "tx": { "description": "Transaction data", "allOf": [ { "$ref": "#/components/schemas/TransactionDto" } ] }, "tokenApprovals": { "type": "array", "items": { "$ref": "#/components/schemas/TokenAmountResponse" } }, "data": { "$ref": "#/components/schemas/SwapWithFixedPricePtAmmData" } }, "required": [ "method", "contractCallParamsName", "contractCallParams", "tx", "data" ] }, "PtCrossChainMetadataResponse": { "type": "object", "properties": { "pairedTokensOut": { "description": "Array of token addresses that the PT can be swapped to", "type": "array", "items": { "type": "string" } }, "ammAddress": { "type": "string", "description": "The address of the AMM" } }, "required": [ "pairedTokensOut" ] }, "MarketBasicResponse": { "type": "object", "properties": { "id": { "type": "string" }, "chainId": { "type": "number" }, "address": { "type": "string" }, "symbol": { "type": "string" }, "expiry": { "format": "date-time", "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "chainId", "address", "symbol", "expiry", "name" ] }, "AssetAmountResponse": { "type": "object", "properties": { "asset": { "$ref": "#/components/schemas/AssetResponse" }, "amount": { "type": "number" }, "price": { "$ref": "#/components/schemas/ValuationResponse" } }, "required": [ "asset", "amount", "price" ] }, "TransactionResponse": { "type": "object", "properties": { "id": { "type": "string" }, "chainId": { "type": "number" }, "txHash": { "type": "string" }, "blockNumber": { "type": "number" }, "timestamp": { "format": "date-time", "type": "string" }, "action": { "type": "string" }, "origin": { "type": "string" }, "market": { "$ref": "#/components/schemas/MarketBasicResponse" }, "inputs": { "type": "array", "items": { "$ref": "#/components/schemas/AssetAmountResponse" } }, "outputs": { "type": "array", "items": { "$ref": "#/components/schemas/AssetAmountResponse" } }, "user": { "type": "string" }, "valuation": { "$ref": "#/components/schemas/ValuationResponse" }, "implicitSwapFeeSy": { "type": "number" }, "explicitSwapFeeSy": { "type": "number" }, "impliedApy": { "type": "number" }, "assetPrices": { "type": "object" }, "gasUsed": { "type": "number" } }, "required": [ "id", "chainId", "txHash", "blockNumber", "timestamp", "action", "origin", "market", "inputs", "outputs", "user", "valuation", "implicitSwapFeeSy", "explicitSwapFeeSy", "impliedApy", "assetPrices", "gasUsed" ] }, "TransactionsResponse": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionResponse" } } }, "required": [ "total", "limit", "skip", "results" ] }, "TransactionType": { "type": "string", "enum": [ "TRADES", "LIQUIDITY" ] }, "TransactionAction": { "type": "string", "enum": [ "LONG_YIELD", "SHORT_YIELD", "ADD_LIQUIDITY", "REMOVE_LIQUIDITY" ] }, "NotionalV5": { "type": "object", "properties": { "pt": { "type": "number", "description": "Notional amount of PT traded" } }, "required": [ "pt" ] }, "TransactionV5Response": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique identifier of the transaction" }, "market": { "type": "string", "description": "Market address where the transaction occurred" }, "timestamp": { "format": "date-time", "type": "string", "description": "Timestamp when the transaction occurred" }, "chainId": { "type": "number", "description": "Chain ID where the transaction occurred" }, "txHash": { "type": "string", "description": "Transaction hash on the blockchain" }, "value": { "type": "number", "description": "Transaction value in USD" }, "type": { "type": "string", "description": "Transaction type (e.g., TRADES, ADD_LIQUIDITY, REMOVE_LIQUIDITY)" }, "action": { "type": "string", "description": "Transaction action (e.g., BUY_PT, SELL_PT, ADD_LIQUIDITY_DUAL)" }, "txOrigin": { "type": "string", "description": "Original transaction sender address" }, "impliedApy": { "type": "number", "description": "Weighted average implied APY for this transaction" }, "notional": { "description": "Notional amounts traded (only for TRADES type)", "allOf": [ { "$ref": "#/components/schemas/NotionalV5" } ] } }, "required": [ "id", "market", "timestamp", "chainId", "txHash", "value", "type", "action", "impliedApy" ] }, "TransactionsV5Response": { "type": "object", "properties": { "total": { "type": "number", "description": "Total number of transactions available" }, "resumeToken": { "type": "string", "description": "Resume token for pagination. Use this to continue a previous query. Use this token in the next request. Can be undefined if the query is at the end of the results." }, "limit": { "type": "number", "description": "Maximum number of results returned" }, "skip": { "type": "number", "description": "Number of results skipped for pagination" }, "results": { "description": "List of transactions", "type": "array", "items": { "$ref": "#/components/schemas/TransactionV5Response" } } }, "required": [ "total", "limit", "skip", "results" ] }, "TransactionsV4Response": { "type": "object", "properties": { "total": { "type": "number" }, "limit": { "type": "number" }, "skip": { "type": "number" }, "results": { "type": "array", "items": { "type": "string" } }, "resumeToken": { "type": "string", "description": "Resume token for pagination. Use this to continue a previous query. Use this token in the next request. Can be undefined if the query is at the end of the results." } }, "required": [ "total", "limit", "skip", "results" ] }, "TvlAndTradingVolumeResponseEntity": { "type": "object", "properties": { "tvl": { "type": "number" }, "tradingVolume": { "type": "number" } }, "required": [ "tvl", "tradingVolume" ] }, "GetDistinctUsersFromTokenEntity": { "type": "object", "properties": { "users": { "description": "Array of unique wallet addresses (lowercase) that have interacted with the specified token. Addresses are deduplicated across both Sentio and internal data sources.", "example": [ "0x1234567890123456789012345678901234567890", "0x0987654321098765432109876543210987654321", "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd" ], "type": "array", "items": { "type": "string" } } }, "required": [ "users" ] }, "EulerUserResponse": { "type": "object", "properties": { "user": { "type": "string", "description": "Euler user address" }, "subAccount": { "type": "string", "description": "Euler sub account address" }, "asset": { "type": "string", "description": "Euler vault address" } }, "required": [ "user", "subAccount", "asset" ] }, "MorphoUserResponse": { "type": "object", "properties": { "user": { "type": "string", "description": "Morpho user address" }, "marketId": { "type": "string", "description": "Morpho user address" } }, "required": [ "user", "marketId" ] }, "SiloUserResponse": { "type": "object", "properties": { "user": { "type": "string", "description": "Silo user address" }, "asset": { "type": "string", "description": "Silo user address" } }, "required": [ "user", "asset" ] }, "MorphoConfigResponse": { "type": "object", "properties": { "id": { "type": "string", "description": "Morpho config id" }, "morphoAddress": { "type": "string", "description": "Morpho config address" } }, "required": [ "id", "morphoAddress" ] }, "WlpDistinctUsersResponse": { "type": "object", "properties": { "wlpUsersTotal": { "type": "number", "description": "WLP token address" }, "eulerUsersTotal": { "type": "number", "description": "WLP token address" }, "morphoUsersTotal": { "type": "number", "description": "WLP token address" }, "siloUsersTotal": { "type": "number", "description": "WLP token address" }, "wlpUsers": { "description": "Array of distinct user addresses that have interacted with WLP", "type": "array", "items": { "type": "string" } }, "eulerUsers": { "description": "Array of Euler users", "type": "array", "items": { "$ref": "#/components/schemas/EulerUserResponse" } }, "morphoUsers": { "description": "Array of Morpho users", "type": "array", "items": { "$ref": "#/components/schemas/MorphoUserResponse" } }, "siloUsers": { "description": "Array of Silo users", "type": "array", "items": { "$ref": "#/components/schemas/SiloUserResponse" } }, "wlpAddress": { "type": "string", "description": "WLP token address" }, "morphoConfigs": { "description": "Morpho config address", "type": "array", "items": { "$ref": "#/components/schemas/MorphoConfigResponse" } } }, "required": [ "wlpUsersTotal", "eulerUsersTotal", "morphoUsersTotal", "siloUsersTotal", "wlpUsers", "eulerUsers", "morphoUsers", "siloUsers", "wlpAddress", "morphoConfigs" ] }, "LiquidLockerPoolResponse": { "type": "object", "properties": { "name": { "type": "string" }, "lpHolder": { "type": "string" }, "receiptToken": { "type": "string" }, "users": { "type": "array", "items": { "type": "string" } }, "errorMessage": { "type": "string" } }, "required": [ "name", "lpHolder", "receiptToken", "users", "errorMessage" ] }, "LiquidLockerPoolsResponse": { "type": "object", "properties": { "total": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/LiquidLockerPoolResponse" } } }, "required": [ "total", "results" ] }, "WlpHolderMappingResponse": { "type": "object", "properties": { "holder": { "type": "string", "description": "The address of the holder" }, "asset": { "type": "string", "description": "The address of the asset" }, "moneyMarket": { "type": "string", "description": "The address of the money market" } }, "required": [ "holder", "asset", "moneyMarket" ] }, "GetAllRelatedInfoFromLpAndWlpResponse": { "type": "object", "properties": { "distinctUsers": { "description": "Distinct users for the LP token", "type": "array", "items": { "type": "string" } }, "liquidLockerPools": { "description": "Liquid locker pools info for LP token", "type": "array", "items": { "$ref": "#/components/schemas/LiquidLockerPoolResponse" } }, "wlpDistinctUsersResponse": { "description": "WLP users and related info for WLP token, only available for wrapped market", "allOf": [ { "$ref": "#/components/schemas/WlpDistinctUsersResponse" } ] }, "wlpHolderMappings": { "description": "WLP holder mappings for WLP token", "type": "array", "items": { "$ref": "#/components/schemas/WlpHolderMappingResponse" } } }, "required": [ "distinctUsers", "liquidLockerPools", "wlpDistinctUsersResponse", "wlpHolderMappings" ] }, "MerkleRewardsResponse": { "type": "object", "properties": { "accruedAmount": { "type": "string" }, "rewardBreakdowns": { "nullable": true, "description": "Only available for arbitrum-grant campaign", "type": "array", "items": { "type": "string" } }, "updatedAt": { "format": "date-time", "type": "string" } }, "required": [ "accruedAmount", "rewardBreakdowns", "updatedAt" ] }, "MerkleProofResponse": { "type": "object", "properties": { "proof": { "type": "array", "items": { "type": "string" } }, "accruedAmount": { "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "verifyCallData": { "type": "string", "description": "Calldata to verify the proof" }, "merkleRoot": { "type": "string", "description": "Merkle root hash of the merkle tree" } }, "required": [ "proof", "accruedAmount", "updatedAt", "merkleRoot" ] }, "NotFoundResponse": { "type": "object", "properties": { "message": { "type": "string" }, "statusCode": { "type": "number" } }, "required": [ "message", "statusCode" ] }, "TokenProof": { "type": "object", "properties": { "token": { "type": "string" }, "proof": { "type": "array", "items": { "type": "string" } }, "accruedAmount": { "type": "string" }, "verifyCallData": { "type": "string", "description": "Calldata to verify the proof" } }, "required": [ "token", "proof", "accruedAmount" ] }, "MultiTokenMerkleProofResponse": { "type": "object", "properties": { "proof": { "type": "array", "items": { "$ref": "#/components/schemas/TokenProof" } }, "merkleRoot": { "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "chainId": { "type": "number" }, "distributorAddress": { "type": "string" }, "campaignId": { "type": "string" } }, "required": [ "proof", "merkleRoot", "updatedAt", "chainId", "distributorAddress", "campaignId" ] }, "MerkleProofV2Response": { "type": "object", "properties": { "total": { "type": "number" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MultiTokenMerkleProofResponse" } } }, "required": [ "total", "results" ] }, "SyTokenOutRouteResponse": { "type": "object", "properties": { "toSyAddress": { "type": "string" }, "defaultTokenOut": { "type": "string" } }, "required": [ "toSyAddress", "defaultTokenOut" ] }, "SyTokenOutRouteListResponse": { "type": "object", "properties": { "tokenOutRoutes": { "type": "array", "items": { "$ref": "#/components/schemas/SyTokenOutRouteResponse" } } }, "required": [ "tokenOutRoutes" ] }, "GetLiquidityTransferableMarketsResponse": { "type": "object", "properties": { "marketAddresses": { "description": "list of liquidity transferable markets", "type": "array", "items": { "type": "string" } } }, "required": [ "marketAddresses" ] }, "CrossChainPtData": { "type": "object", "properties": { "spokePt": { "type": "string", "description": "spoke pt address" }, "hubPt": { "type": "string", "description": "hub pt address" }, "hubChainId": { "type": "number", "description": "hub chain id" } }, "required": [ "spokePt", "hubPt", "hubChainId" ] }, "ChainIdSimplifiedData": { "type": "object", "properties": { "chainId": { "type": "number" }, "sys": { "description": "list of SY addresses", "type": "array", "items": { "type": "string" } }, "markets": { "description": "list of market addresses", "type": "array", "items": { "type": "string" } }, "pts": { "description": "list of PT addresses", "type": "array", "items": { "type": "string" } }, "yts": { "description": "list of YT addresses", "type": "array", "items": { "type": "string" } }, "crossPts": { "description": "list of cross chain pt data", "type": "array", "items": { "$ref": "#/components/schemas/CrossChainPtData" } } }, "required": [ "chainId", "sys", "markets", "pts", "yts", "crossPts" ] }, "GetSimplifiedDataResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ChainIdSimplifiedData" } } }, "required": [ "data" ] }, "GetSafePendleAddressesResponse": { "type": "object", "properties": { "sys": { "description": "list of safe SY addresses", "type": "array", "items": { "type": "string" } }, "pts": { "description": "list of safe PT addresses", "type": "array", "items": { "type": "string" } }, "yts": { "description": "list of safe YT addresses", "type": "array", "items": { "type": "string" } } }, "required": [ "sys", "pts", "yts" ] }, "ChainIdsResponse": { "type": "object", "properties": { "chainIds": { "type": "array", "items": { "type": "number" } } }, "required": [ "chainIds" ] }, "ClaimTokenAmount": { "type": "object", "properties": { "token": { "type": "string", "description": "Token id", "example": "1-0x123..." }, "amount": { "type": "string", "description": "Amount of tokens", "example": "1000000000000000000" } }, "required": [ "token", "amount" ] }, "Position": { "type": "object", "properties": { "balance": { "type": "string", "description": "Balance of the position", "example": "1000000000000000000" }, "activeBalance": { "type": "string", "description": "Active balance of the position (for LP only)", "example": "1000000000000000000" }, "valuation": { "type": "number", "description": "Valuation of the position in USD", "example": 10 }, "claimTokenAmounts": { "description": "Array of claimable rewards", "type": "array", "items": { "$ref": "#/components/schemas/ClaimTokenAmount" } } }, "required": [ "balance", "valuation" ] }, "CrossPtPosition": { "type": "object", "properties": { "spokePt": { "type": "string", "description": "Spoke PT", "example": "0x123..." }, "balance": { "type": "string", "description": "Balance of the position", "example": "1000000000000000000" } }, "required": [ "spokePt", "balance" ] }, "MarketPosition": { "type": "object", "properties": { "marketId": { "type": "string", "description": "Unique identifier of the market", "example": "1-0xabc..." }, "pt": { "description": "Principal token (PT) position", "allOf": [ { "$ref": "#/components/schemas/Position" } ] }, "yt": { "description": "Yield token (YT) position", "allOf": [ { "$ref": "#/components/schemas/Position" } ] }, "lp": { "description": "Liquidity provider (LP) token position", "allOf": [ { "$ref": "#/components/schemas/Position" } ] }, "crossPtPositions": { "description": "Array of cross PT positions", "type": "array", "items": { "$ref": "#/components/schemas/CrossPtPosition" } } }, "required": [ "marketId", "pt", "yt", "lp", "crossPtPositions" ] }, "SyPosition": { "type": "object", "properties": { "syId": { "type": "string", "description": "Unique identifier of the market", "example": "1-0xabc" }, "balance": { "type": "string", "description": "Sy token (SY) balance in wei", "example": "1000000000000000000" }, "claimTokenAmounts": { "description": "Array of claimable rewards", "type": "array", "items": { "$ref": "#/components/schemas/ClaimTokenAmount" } } }, "required": [ "syId", "balance" ] }, "UserPositionsResponse": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain ID", "example": 1 }, "totalOpen": { "type": "number", "description": "Total number of open positions", "example": 100 }, "totalClosed": { "type": "number", "description": "Total number of closed positions", "example": 100 }, "totalSy": { "type": "number", "description": "Total number of SY positions", "example": 100 }, "openPositions": { "description": "Array of user token positions", "type": "array", "items": { "$ref": "#/components/schemas/MarketPosition" } }, "closedPositions": { "description": "Array of closed user token positions", "type": "array", "items": { "$ref": "#/components/schemas/MarketPosition" } }, "syPositions": { "description": "Array of user SY positions", "type": "array", "items": { "$ref": "#/components/schemas/SyPosition" } }, "updatedAt": { "format": "date-time", "type": "string", "description": "Date time of the last update", "example": "2021-01-01T00:00:00.000Z" }, "errorMessage": { "type": "string", "description": "Error message when there is something wrong", "example": "Error message" } }, "required": [ "chainId", "totalOpen", "totalClosed", "totalSy", "openPositions", "closedPositions", "syPositions", "updatedAt" ] }, "UserPositionsCrossChainResponse": { "type": "object", "properties": { "positions": { "description": "Array of user positions", "type": "array", "items": { "$ref": "#/components/schemas/UserPositionsResponse" } } }, "required": [ "positions" ] }, "MerkleUserCampaignResponse": { "type": "object", "properties": { "user": { "type": "string" }, "token": { "type": "string" }, "merkleRoot": { "type": "string" }, "chainId": { "type": "number" }, "assetId": { "type": "string" }, "amount": { "type": "string" }, "toTimestamp": { "format": "date-time", "type": "string" }, "fromTimestamp": { "format": "date-time", "type": "string" } }, "required": [ "user", "token", "merkleRoot", "chainId", "assetId", "amount", "toTimestamp", "fromTimestamp" ] }, "MerkleClaimableRewardsResponse": { "type": "object", "properties": { "claimableRewards": { "description": "Array of unclaimed merkle campaigns", "type": "array", "items": { "$ref": "#/components/schemas/MerkleUserCampaignResponse" } } }, "required": [ "claimableRewards" ] }, "MerkleClaimedRewardsResponse": { "type": "object", "properties": { "claimedRewards": { "description": "Array of claimed merkle campaigns", "type": "array", "items": { "$ref": "#/components/schemas/MerkleUserCampaignResponse" } } }, "required": [ "claimedRewards" ] }, "SpokePtData": { "type": "object", "properties": { "spokeChainId": { "type": "number", "description": "Spoke PT chain ID", "example": 1 }, "spokeAddress": { "type": "string", "description": "Spoke PT address", "example": "0x1234567890123456789012345678901234567890" } }, "required": [ "spokeChainId", "spokeAddress" ] }, "PtCrossChainData": { "type": "object", "properties": { "hubPtChainId": { "type": "number", "description": "Hub PT chain ID" }, "hubPtAddress": { "type": "string", "description": "Hub PT address" }, "spokePts": { "description": "Spoke PTs", "type": "array", "items": { "$ref": "#/components/schemas/SpokePtData" } } }, "required": [ "hubPtChainId", "hubPtAddress", "spokePts" ] }, "GetAllCrossPtsResponse": { "type": "object", "properties": { "result": { "description": "Data", "type": "array", "items": { "$ref": "#/components/schemas/PtCrossChainData" } } }, "required": [ "result" ] }, "ValuationEntity": { "type": "object", "properties": { "usd": { "type": "number" }, "asset": { "type": "number" }, "eth": { "type": "number" } }, "required": [ "usd", "asset", "eth" ] }, "SpendUnitData": { "type": "object", "properties": { "unit": { "type": "number", "description": "Balance of user in wei" }, "spent_v2": { "description": "Total spent to purchase this asset", "allOf": [ { "$ref": "#/components/schemas/ValuationEntity" } ] } }, "required": [ "unit", "spent_v2" ] }, "PriceAssetData": { "type": "object", "properties": { "pt": { "type": "number", "description": "PT price in the market's accounting asset at the time of the transaction" }, "yt": { "type": "number", "description": "YT price in the market's accounting asset at the time of the transaction" }, "lp": { "type": "number", "description": "LP price in the market's accounting asset at the time of the transaction" } }, "required": [ "pt", "yt", "lp" ] }, "PnLTransactionEntity": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain ID where the transaction occurred" }, "market": { "type": "string", "description": "LP market contract address" }, "user": { "type": "string", "description": "User wallet address" }, "timestamp": { "format": "date-time", "type": "string", "description": "Block timestamp of the transaction" }, "action": { "type": "string", "enum": [ "addLiquidityDualTokenAndPt", "addLiquiditySinglePt", "addLiquiditySingleToken", "addLiquiditySingleTokenKeepYt", "removeLiquidityDualTokenAndPt", "removeLiquidityToPt", "removeLiquiditySingleToken", "mintPy", "redeemPy", "swapYtToPt", "swapPtToYt", "redeemYtRewards", "redeemYtYield", "redeemMarketRewards", "buyPt", "sellPt", "transferPtIn", "transferPtOut", "buyYt", "sellYt", "transferYtIn", "transferYtOut", "transferLpIn", "transferLpOut", "sellYtLimitOrder", "buyYtLimitOrder", "sellPtLimitOrder", "buyPtLimitOrder" ], "description": "Type of Pendle operation performed (swap, liquidity, limit order, mint/redeem, transfer, or reward claim)" }, "ptData": { "description": "PT token balance change and cost basis for this transaction", "allOf": [ { "$ref": "#/components/schemas/SpendUnitData" } ] }, "ytData": { "description": "YT token balance change and cost basis for this transaction", "allOf": [ { "$ref": "#/components/schemas/SpendUnitData" } ] }, "lpData": { "description": "LP token balance change and cost basis for this transaction", "allOf": [ { "$ref": "#/components/schemas/SpendUnitData" } ] }, "priceInAsset": { "description": "Prices of PT, YT, and LP in the market's accounting asset at the time of the transaction", "allOf": [ { "$ref": "#/components/schemas/PriceAssetData" } ] }, "profit": { "description": "Profit or loss of the transaction", "allOf": [ { "$ref": "#/components/schemas/ValuationEntity" } ] }, "txValueAsset": { "type": "number", "description": "Total value of the transaction in asset" }, "assetUsd": { "type": "number", "description": "Market asset price in USD" }, "assetEth": { "type": "number", "description": "Market asset price in ETH" }, "ptExchangeRate": { "type": "number", "description": "PT exchange rate at the time of the transaction" }, "effectivePtExchangeRate": { "type": "number", "description": "Effective PT exchange rate of this transaction" }, "ptExchangeRateAfter": { "type": "number", "description": "PT exchange rate of market after the transaction" }, "txHash": { "type": "string", "description": "Transaction hash" } }, "required": [ "chainId", "market", "user", "timestamp", "action", "ptData", "ytData", "lpData", "priceInAsset", "profit", "txValueAsset", "assetUsd", "assetEth", "ptExchangeRate" ] }, "TransactionsResponseEntity": { "type": "object", "properties": { "total": { "type": "number", "description": "Total number of matching transactions" }, "results": { "description": "Paginated list of transactions", "type": "array", "items": { "$ref": "#/components/schemas/PnLTransactionEntity" } } }, "required": [ "total", "results" ] }, "BlockEntity": { "type": "object", "properties": { "blockNumber": { "type": "number", "description": "Block number" }, "blockTimestamp": { "type": "number", "description": "Block timestamp in seconds" } }, "required": [ "blockNumber", "blockTimestamp" ] }, "IntegrationAssetEntity": { "type": "object", "properties": { "id": { "type": "string", "description": "Asset address" }, "symbol": { "type": "string", "description": "Asset symbol" }, "name": { "type": "string", "description": "Asset name" }, "decimals": { "type": "number", "description": "Asset decimals" } }, "required": [ "id", "symbol", "name", "decimals" ] }, "IntegrationAssetResponse": { "type": "object", "properties": { "asset": { "description": "Asset data", "allOf": [ { "$ref": "#/components/schemas/IntegrationAssetEntity" } ] } }, "required": [ "asset" ] }, "PairEntity": { "type": "object", "properties": { "id": { "type": "string", "description": "Pendle LPT address" }, "dexKey": { "type": "string", "description": "Dex key. Result is always pendle.", "example": "pendle" }, "asset0Id": { "type": "string", "description": "PT address" }, "asset1Id": { "type": "string", "description": "SY address" } }, "required": [ "id", "dexKey", "asset0Id", "asset1Id" ] }, "IntegrationPairResponse": { "type": "object", "properties": { "pair": { "description": "Pair data", "allOf": [ { "$ref": "#/components/schemas/PairEntity" } ] } }, "required": [ "pair" ] }, "Reserves": { "type": "object", "properties": { "asset0": { "type": "string", "description": "Reserve of asset0" }, "asset1": { "type": "string", "description": "Reserve of asset1" } }, "required": [ "asset0", "asset1" ] }, "SwapEvent": { "type": "object", "properties": { "block": { "description": "Block data", "allOf": [ { "$ref": "#/components/schemas/BlockEntity" } ] }, "txnId": { "type": "string", "description": "Transaction hash" }, "txnIndex": { "type": "number", "description": "Transaction index" }, "eventIndex": { "type": "number", "description": "Event index" }, "maker": { "type": "string", "description": "Transaction maker" }, "pairId": { "type": "string", "description": "Pair ID" }, "reserves": { "description": "Reserves after the swap", "allOf": [ { "$ref": "#/components/schemas/Reserves" } ] }, "eventType": { "type": "string", "description": "Type of event", "enum": [ "swap", "join", "exit" ], "example": "swap" }, "asset0In": { "type": "string", "description": "Amount of token0 in" }, "asset1In": { "type": "string", "description": "Amount of token1 in" }, "asset0Out": { "type": "string", "description": "Amount of token0 out" }, "asset1Out": { "type": "string", "description": "Amount of token1 out" }, "priceNative": { "type": "string", "description": "Price of asset0 quoted in asset1" } }, "required": [ "block", "txnId", "txnIndex", "eventIndex", "maker", "pairId", "reserves", "eventType", "asset0In", "asset1In", "asset0Out", "asset1Out", "priceNative" ] }, "JoinExitEvent": { "type": "object", "properties": { "block": { "description": "Block data", "allOf": [ { "$ref": "#/components/schemas/BlockEntity" } ] }, "txnId": { "type": "string", "description": "Transaction hash" }, "txnIndex": { "type": "number", "description": "Transaction index" }, "eventIndex": { "type": "number", "description": "Event index" }, "maker": { "type": "string", "description": "Transaction maker" }, "pairId": { "type": "string", "description": "Pair ID" }, "reserves": { "description": "Reserves after the swap", "allOf": [ { "$ref": "#/components/schemas/Reserves" } ] }, "eventType": { "type": "string", "description": "Type of event", "enum": [ "swap", "join", "exit" ], "example": "join", "examples": [ "join", "exit" ] }, "amount0": { "type": "string", "description": "Amount of token0" }, "amount1": { "type": "string", "description": "Amount of token1" } }, "required": [ "block", "txnId", "txnIndex", "eventIndex", "maker", "pairId", "reserves", "eventType", "amount0", "amount1" ] }, "IntegrationEventResponse": { "type": "object", "properties": { "events": { "description": "List of events", "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/SwapEvent" }, { "$ref": "#/components/schemas/JoinExitEvent" } ] } } }, "required": [ "events" ] }, "MerklRewardResponse": { "type": "object", "properties": { "sumAmount": { "type": "string", "description": "Chain ID", "example": 1 }, "fromEpoch": { "type": "number", "description": "From epoch", "example": 1732294694 }, "toEpoch": { "type": "number", "description": "To epoch", "example": 1732294694 }, "hash": { "type": "string", "description": "Hash of the distribution file", "example": "0x1234567890abcdef" }, "rewardToken": { "type": "string", "description": "Reward token address being distributed", "example": "0xE0688A2FE90d0f93F17f273235031062a210d691" }, "rewards": { "type": "object", "description": "User rewards mapping", "example": { "0x9f76a95AA7535bb0893cf88A146396e00ed21A12": { "epoch-1": { "amount": "40000000000000000000", "timestamp": "1732294694" } }, "0xfdA462548Ce04282f4B6D6619823a7C64Fdc0185": { "epoch-2": { "amount": "100000000000000000000", "timestamp": "1741370722" } } } } }, "required": [ "sumAmount", "fromEpoch", "toEpoch", "hash", "rewardToken", "rewards" ] }, "MerklDataResponse": { "type": "object", "properties": { "tvl": { "type": "string", "description": "Total Value Locked as a string", "example": "1000000000000000000000" }, "apr": { "type": "string", "description": "Annual Percentage Rate in decimal format", "example": "0.15" }, "opportunityName": { "type": "string", "description": "Optional opportunity name", "example": "Pendle Market Maker Incentive" } }, "required": [ "tvl", "apr" ] }, "MarketEmission": { "type": "object", "properties": { "chainId": { "type": "number", "description": "Chain ID of the market" }, "address": { "type": "string", "description": "Contract address of the market" }, "totalIncentive": { "type": "number", "description": "Total PENDLE emission allocated to this market" }, "tvlIncentive": { "type": "number", "description": "Emission allocated based on TVL proportion" }, "feeIncentive": { "type": "number", "description": "Emission allocated based on fee proportion" }, "discretionaryIncentive": { "type": "number", "description": "Discretionary emission manually assigned to this market" }, "cobribingIncentive": { "type": "number", "description": "Co-bribing emission allocated to this market" } }, "required": [ "chainId", "address", "totalIncentive", "tvlIncentive", "feeIncentive", "discretionaryIncentive", "cobribingIncentive" ] }, "GetPendleEmissionResponse": { "type": "object", "properties": { "markets": { "description": "List of markets with their emission breakdown", "type": "array", "items": { "$ref": "#/components/schemas/MarketEmission" } } }, "required": [ "markets" ] }, "TagDefinitionResponse": { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" } }, "required": [ "name", "description" ] } } } }