Kamino Kamino Lend Yield API

The Kamino Lend Yield API from Kamino — 7 operation(s) for kamino lend yield.

OpenAPI Specification

kamino-kamino-lend-yield-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 1.0.0
  title: Kamino Public Airdrop Kamino Lend Yield API
  description: 'The Kamino API provides a comprehensive way to interact with Kamino without reading directly from the blockchain.


    The API also provides the ability to fetch data that might not be available from just reading the chain.


    The API is rate-limited for unauthenticated users. If you feel you need to make more requests or run into rate-limit issues, please reach out.

    '
servers:
- url: https://api.kamino.finance
tags:
- name: Kamino Lend Yield
paths:
  /kamino-market/{marketPubkey}/reserves/{reservePubkey}/borrow-and-staking-apys/history:
    get:
      summary: Get KLend reserve borrow APY and staking APY history
      description: Get historical borrow interest APY and staking APY data for reserves that contain LST tokens with staking yield. Used for Multiply underlying APY calculations.
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend market public key
            example: 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF
        required: true
        description: Kamino Lend market public key
        name: marketPubkey
        in: path
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend reserve public key
            example: FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM
        required: true
        description: Kamino Lend reserve public key
        name: reservePubkey
        in: path
      - schema:
          type: string
          enum:
          - mainnet-beta
          - devnet
          - localnet
          default: mainnet-beta
          description: Solana cluster environment
          example: mainnet-beta
        required: false
        description: Solana cluster environment
        name: env
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          default: '1970-01-01T00:00:00.000Z'
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-01-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: start
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-02-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: end
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BorrowAndStakingApyResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /kamino-market/{marketPubkey}/reserves/{reservePubkey}/borrow-and-staking-apys/history/median:
    get:
      summary: Get KLend reserve borrow APY and median staking APY history
      description: Get historical borrow interest APY and median staking APY data for reserves that contain LST tokens with staking yield. Uses median staking APY values for more stable calculations.
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend market public key
            example: 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF
        required: true
        description: Kamino Lend market public key
        name: marketPubkey
        in: path
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend reserve public key
            example: FBSyPnxtHKLBZ4UeeUyAnbtFuAmTHLtso9YtsqRDRWpM
        required: true
        description: Kamino Lend reserve public key
        name: reservePubkey
        in: path
      - schema:
          type: string
          enum:
          - mainnet-beta
          - devnet
          - localnet
          default: mainnet-beta
          description: Solana cluster environment
          example: mainnet-beta
        required: false
        description: Solana cluster environment
        name: env
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          default: '1970-01-01T00:00:00.000Z'
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-01-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: start
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-02-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: end
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BorrowAndStakingApyResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-fees:
    get:
      summary: Get interest fees earned per obligation
      description: Get historical interest fees earned for a specific obligation. Returns total fees earned and historical fee breakdown by token.
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend market public key
            example: 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF
        required: true
        description: Kamino Lend market public key
        name: marketPubkey
        in: path
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend obligation public key
            example: 63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o
        required: true
        description: Kamino Lend obligation public key
        name: obligationPubkey
        in: path
      - schema:
          type: string
          enum:
          - mainnet-beta
          - devnet
          - localnet
          default: mainnet-beta
          description: Solana cluster environment
          example: mainnet-beta
        required: false
        description: Solana cluster environment
        name: env
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          default: '1970-01-01T00:00:00.000Z'
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-01-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: start
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-02-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: end
        in: query
      - schema:
          type: string
          default: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
          description: KLend program ID
          example: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
        required: false
        description: KLend program ID
        name: programId
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InterestRateEarnedResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: string
                    description: Error message describing why it was not found
                    example: Account could not be found
                required:
                - metadata
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v2/kamino-market/{marketPubkey}/obligations/{obligationPubkey}/interest-paid:
    get:
      summary: Get interest fees paid per obligation
      description: Get historical interest fees paid for a specific obligation. Returns total fees paid and historical fee breakdown by token.
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend market public key
            example: 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF
        required: true
        description: Kamino Lend market public key
        name: marketPubkey
        in: path
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Kamino Lend obligation public key
            example: 63QrAB1okxCc4FpsgcKYHjYTp1ua8ch6mLReyKRdc22o
        required: true
        description: Kamino Lend obligation public key
        name: obligationPubkey
        in: path
      - schema:
          type: string
          enum:
          - mainnet-beta
          - devnet
          - localnet
          default: mainnet-beta
          description: Solana cluster environment
          example: mainnet-beta
        required: false
        description: Solana cluster environment
        name: env
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          default: '1970-01-01T00:00:00.000Z'
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-01-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: start
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-02-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: end
        in: query
      - schema:
          type: string
          default: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
          description: KLend program ID
          example: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD
        required: false
        description: KLend program ID
        name: programId
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InterestRatePaidResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: string
                    description: Error message describing why it was not found
                    example: Account could not be found
                required:
                - metadata
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /klend/users/{pubkey}/rewards:
    get:
      summary: Get user KLend rewards
      description: Fetches KLend reward data for a specific user and points source
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          $ref: '#/components/schemas/AddressBase58'
        required: true
        description: Valid base58-encoded address
        name: pubkey
        in: path
      - schema:
          type: string
          description: Points source identifier
          example: Season1
          examples:
          - Season1
          - Season2
          - Season3
          - Season4
        required: false
        description: Points source identifier
        name: source
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KlendUserRewardMetrics'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: High-level error message describing the failure
                    example: Invalid query params
                  details:
                    type: array
                    items:
                      type: object
                      additionalProperties:
                        nullable: true
                    description: Detailed validation issues (present only for validation errors)
                required:
                - error
                description: Bad request response (400)
                example:
                  error: Invalid query request
                  details:
                  - code: invalid_union
                    errors:
                    - - code: custom
                        path: []
                        message: Invalid date string
                    - - expected: number
                        code: invalid_type
                        path: []
                        message: 'Invalid input: expected number, received string'
                    path:
                    - start
                    message: Invalid input
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /klend/rewards:
    get:
      summary: Get KLend rewards
      description: Fetches all active KLend reward metrics for a specific points source
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          type: string
          description: Points source identifier
          example: Season1
          examples:
          - Season1
          - Season2
          - Season3
          - Season4
        required: false
        description: Points source identifier
        name: source
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KlendRewardMetrics'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: High-level error message describing the failure
                    example: Invalid query params
                  details:
                    type: array
                    items:
                      type: object
                      additionalProperties:
                        nullable: true
                    description: Detailed validation issues (present only for validation errors)
                required:
                - error
                description: Bad request response (400)
                example:
                  error: Invalid query request
                  details:
                  - code: invalid_union
                    errors:
                    - - code: custom
                        path: []
                        message: Invalid date string
                    - - expected: number
                        code: invalid_type
                        path: []
                        message: 'Invalid input: expected number, received string'
                    path:
                    - start
                    message: Invalid input
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /klend/{depositReservePubkey}/{borrowReservePubkey}/rewards/history:
    get:
      summary: Get KLend reward history
      description: Fetches historical KLend reward metrics for a specific deposit and borrow reserve pair
      tags:
      - Kamino Lend Yield
      parameters:
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Deposit reserve public key
        required: true
        description: Deposit reserve public key
        name: depositReservePubkey
        in: path
      - schema:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Borrow reserve public key
        required: true
        description: Borrow reserve public key
        name: borrowReservePubkey
        in: path
      - schema:
          anyOf:
          - type: string
          - type: number
          default: '1970-01-01T00:00:00.000Z'
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-01-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: start
        in: query
      - schema:
          anyOf:
          - type: string
          - type: number
          description: Date input (ISO 8601 string or epoch in ms)
          examples:
          - '2024-01-01T00:00:00.000Z'
          - 1704067200000
          example: 2020-02-01T00:00Z
        required: false
        description: Date input (ISO 8601 string or epoch in ms)
        name: end
        in: query
      - schema:
          type: string
          enum:
          - hour
          - day
          description: Frequency of historical data aggregation
          example: hour
          examples:
          - hour
          - day
        required: false
        description: Frequency of historical data aggregation
        name: frequency
        in: query
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KlendRewardHistory'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: High-level error message describing the failure
                    example: Invalid query params
                  details:
                    type: array
                    items:
                      type: object
                      additionalProperties:
                        nullable: true
                    description: Detailed validation issues (present only for validation errors)
                required:
                - error
                description: Bad request response (400)
                example:
                  error: Invalid query request
                  details:
                  - code: invalid_union
                    errors:
                    - - code: custom
                        path: []
                        message: Invalid date string
                    - - expected: number
                        code: invalid_type
                        path: []
                        message: 'Invalid input: expected number, received string'
                    path:
                    - start
                    message: Invalid input
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    TotalFeesObligation:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/TotalInterestFees'
      description: Total interest fees earned per obligation
      example:
        uy9LQEjELMp8r3qpb7fJhu2Y32ydAxTEo74VAEZ6EHQs:
          ts: 1762128000000
          solFees: '0.00001610553929183891699891935039215032176993'
          usdFees: '0.003058858072628656437082436052718601394968'
    HistoricalFeesObligation:
      type: object
      additionalProperties:
        type: array
        items:
          $ref: '#/components/schemas/TokenInterestFees'
      description: Historical breakdown of interest fees earned over time
    Decimal:
      type: string
      description: Decimal value represented as string
      example: '1234.56789'
    TokenInterestFees:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/InterestFees'
      description: Historical fees breakdown by reserve. Key is the reserve address.
      example:
        d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q:
          ts: 1760745600000
          solFees: '0'
          usdFees: '0'
          nativeFees: '0'
    KlendRewardHistoryRow:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
          description: Timestamp of the data point
        depositReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Deposit reserve public key, if applicable
        borrowReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Borrow reserve public key, if applicable
        rewardToken:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Mint address of the reward token
        rewardApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Annual Percentage Yield from rewards at this point in time
            example: '0.2'
      required:
      - timestamp
      - depositReserve
      - borrowReserve
      - rewardToken
      - rewardApy
    TotalInterestFees:
      type: object
      properties:
        ts:
          type: number
          description: Timestamp in milliseconds
          example: 1762128000000
        solFees:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total fees in SOL
            example: '0.00001610553929183891699891935039215032176993'
        usdFees:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total fees in USD
            example: '0.003058858072628656437082436052718601394968'
      required:
      - ts
      - solFees
      - usdFees
    KlendUserRewardMetric:
      type: object
      properties:
        depositReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Deposit reserve public key, if applicable
        borrowReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Borrow reserve public key, if applicable
        market:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Market public key
        rewardMint:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Mint address of the reward token
        lastCalculated:
          type: string
          format: date
          description: Timestamp of the last calculation
        tokensEarned:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total number of reward tokens earned by the user
        tokensPerSecond:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Number of reward tokens distributed per second to the user
        stakingBoost:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Staking boost percentage applied to the user
        effectiveStakingBoost:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Effective staking boost percentage for the user
        baseApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Base Annual Percentage Yield from rewards for the user
            example: '0.2'
        boostedApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Boosted Annual Percentage Yield from rewards for the user
            example: '0.2'
        maxApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Max Annual Percentage Yield from rewards for the user
            example: '0.2'
        usdAmount:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total USD amount of rewards earned by the user without boost
        usdAmountBoosted:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total USD amount of rewards earned by the user with boost applied
      required:
      - depositReserve
      - borrowReserve
      - market
      - rewardMint
      - lastCalculated
      - tokensEarned
      - tokensPerSecond
      - stakingBoost
      - effectiveStakingBoost
      - baseApy
      - boostedApy
      - maxApy
      - usdAmount
      - usdAmountBoosted
    KlendUserRewardMetrics:
      type: object
      properties:
        avgBaseApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Weighted average Base Annual Percentage Yield for the user
            example: '0.2'
        avgBoostedApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Weighted average Boosted Annual Percentage Yield for the user
            example: '0.2'
        avgMaxApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Weighted average Max Annual Percentage Yield for the user
            example: '0.2'
        rewards:
          type: array
          items:
            $ref: '#/components/schemas/KlendUserRewardMetric'
          description: List of klend user reward metrics
      required:
      - avgBaseApy
      - avgBoostedApy
      - avgMaxApy
      - rewards
    SnapshotDateTime:
      type: string
      format: date-time
      description: Timestamp of the metrics snapshot
      example: '2023-06-29T15:15:26.464Z'
    KlendRewardMetric:
      type: object
      properties:
        depositReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Deposit reserve public key, if applicable
        borrowReserve:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - nullable: true
            description: Borrow reserve public key, if applicable
        market:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Market public key
        rewardToken:
          allOf:
          - $ref: '#/components/schemas/AddressBase58'
          - description: Mint address of the reward token
        lastCalculated:
          type: string
          format: date-time
          description: Timestamp of the last calculation
        apy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Annual Percentage Yield from rewards
            example: '0.2'
        tokensPerSecond:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Number of reward tokens distributed per second
        activePositionsUsd:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Total USD value of active positions receiving rewards
      required:
      - depositReserve
      - borrowReserve
      - market
      - rewardToken
      - lastCalculated
      - apy
      - tokensPerSecond
      - activePositionsUsd
    AddressBase58:
      type: string
      description: Valid base58-encoded address
      example: VEG1EMtttdHunMbSza8uoms1R18VXmYSph2bBpHcSJd
    KlendRewardHistory:
      type: array
      items:
        $ref: '#/components/schemas/KlendRewardHistoryRow'
      description: List of historical klend reward metrics
    BorrowAndStakingApyResponse:
      type: object
      properties:
        createdOn:
          allOf:
          - $ref: '#/components/schemas/SnapshotDateTime'
          - description: Timestamp of the snapshot
            example: '2023-10-17T15:00:06.009Z'
        borrowInterestApy:
          $ref: '#/components/schemas/Apy'
        stakingApy:
          allOf:
          - $ref: '#/components/schemas/Apy'
          - description: Staking APY
            example: '0.066527842899023711405366628964490454572'
      required:
      - createdOn
      - borrowInterestApy
      - stakingApy
    KlendRewardMetrics:
      type: array
      items:
        $ref: '#/components/schemas/KlendRewardMetric'
      description: List of klend reward metrics
    InterestRateEarnedResponse:
      type: object
      properties:
        totalFeesEarnedObligation:
          $ref: '#/components/schemas/TotalFeesObligation'
        historicalFeesObligation:
          $ref: '#/components/schemas/HistoricalFeesObligation'
      required:
      - totalFeesEarnedObligation
      - historicalFeesObligation
    InterestFees:
      type: object
      properties:
        ts:
          type: number
          description: Timestamp in milliseconds
          example: 1762128000000
        solFees:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Fees in SOL
            example: '0.00001610553929183891699891935039215032176993'
        usdFees:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Fees in USD
            example: '0.003058858072628656437082436052718601394968'
        nativeFees:
          allOf:
          - $ref: '#/components/schemas/Decimal'
          - description: Fees in native token units
            example: '0'
      required:
      - ts
      - solFees
      - usdFees
      - nativeFees
    Error:
      type: object
      properties:
        error:
          type: string
          description: Error message for internal server failure
          example: An internal error occurred
      required:
      - error
      description: Internal server error response (500)
      example:
        error: An internal error occurred
    Apy:
      type: string
      description: Borrow interest APY
      example: '0.027610992938039702'
      examples:
      - '0.123'
      - '0'
      - '1'
      - '1.23'
      - '-0.5'
      - '999999.999999'
    InterestRatePaidResponse:
      type: object
      properties:
        totalFeesPaidObligation:
          allOf:
          - $ref: '#/components/schemas/TotalFeesObligation'
          - description: Total interest fees paid per obligation
        historicalFeesObligation:
          allOf:
          - $ref: '#/components/schemas/HistoricalFeesObligation'
          - description: Historical breakdown of interest fees paid over time
      required:
      - totalFeesPaidObligation
      - historicalFeesObligation