Pendle Transactions API

The Transactions API from Pendle — 2 operation(s) for transactions.

OpenAPI Specification

pendle-transactions-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Pendle V2 API Docs Assets Transactions API
  description: "\n## Terms used in the documentation/API\n\nBelow are some terms used in the documentation/API:\n\n- Pendle Assets/Tokens: PT, YT, LP, SY\n- Non-Pendle Assets: other tokens that are not Pendle assets, such as USDC, USDT, DAI, etc.\n- Asset ID/Token Id: Is the combination of chain id and token address, e.g. 1-0x5fe30ac5cb1abb0e44cdffb2916c254aeb368650\n- Computing unit: Cost of an API call, this is use to rate limit the API calls. More on it at [our document](https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview#rate-limiting)\n- APY/APR/ROI Format: All APY, APR, and ROI values are returned as decimals. For example, 0.5 means 50%, 0.05 means 5%, 1.2 means 120%\n- Percentage Change Format: All percentage change values (e.g., 24h changes) are returned as decimals. For example, 0.05 means 5% change\n- Logarithmic Values: Some fields like `lnImpliedRate` are natural logarithms. To get the actual rate, use e^(value)\n\n## Recommended way to fetch data\n\nWe have a lot of markets, if you call an API for each market, it will be very slow and you will likely get rate limited. Therefore, in some APIs we support fetch all data at once (example the get all markets data, get all assets data/prices), you could use that to fetch all data at once. They also support filter by asset id, type, so if you don't want to fetch, you can filter it down to the specific ones you want.\n\nFor detailed documentation, visit:\n\n[https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview](https://docs.pendle.finance/pendle-v2/Developers/Backend/ApiOverview)\n\n## Support\n\n- We have a telegram for developers to ask about the API at [https://t.me/peepo_the_engineer_bot](https://t.me/peepo_the_engineer_bot)\n- We have an announcement channel for API updates at [https://t.me/pendledevelopers](https://t.me/pendledevelopers), follow it to get the latest updates on the API.\n\n## FAQ\n\n- How to fetch prices for assets?\n  * Use [Get asset prices by IDs](#tag/assets/get/v1/prices/assets)\n\n- What if i want real time prices?\n  * Price in our systems are calculate every 15 seconds. However, if you want real time prices, use [Swapping price](#tag/sdk/get/v1/sdk/{chainId}/markets/{market}/swapping-prices), it return price for PT/YT when swapping with underlying token and vice versa, we don't have real time prices for other assets.\n\n- Can i use the SDK to get price, instead of using the `swapping-price` endpoint?\n  * **Don't use the SDK to get price**, we don't recommend it. SDK endpoints are designed for you to get the calldata for **sending transaction**, not for getting the price. Also, SDK endpoints are very costly and will get rate limited easily if you use it to get price of many tokens. \n\n- How to get token names, expiries, etc?\n  * Use [Get asset metadata by IDs](#tag/assets/get/v1/assets/all)\n\n- Do you have historical data, breakdown to minutes?\n  * No we don't, all historical data is aggregated to hourly/daily/weekly data.\n"
  version: '1.0'
  contact: {}
servers:
- url: http://127.0.0.1:9000
tags:
- name: Transactions
paths:
  /v5/{chainId}/transactions/{address}:
    get:
      description: 'Return transactions with: user action (long or short yield, add or remove liquidity), valuation, implied apy.


        **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/pnl/transactions:
    get:
      description: 'Returns the on-chain transaction history for a user address across all Pendle operations.


        Results are paginated. Use the `resumeToken` from the response to fetch the next page.


        Data 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
components:
  schemas:
    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
    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
    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
    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
    TransactionAction:
      type: string
      enum:
      - LONG_YIELD
      - SHORT_YIELD
      - ADD_LIQUIDITY
      - REMOVE_LIQUIDITY
    ValuationEntity:
      type: object
      properties:
        usd:
          type: number
        asset:
          type: number
        eth:
          type: number
      required:
      - usd
      - asset
      - eth
    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
    TransactionType:
      type: string
      enum:
      - TRADES
      - LIQUIDITY
    NotionalV5:
      type: object
      properties:
        pt:
          type: number
          description: Notional amount of PT traded
      required:
      - pt
    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