> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pods.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# List strategies

> Get paginated list of available DeFi yield strategies for the authenticated customer. Default `details=FULL` returns APY metrics plus enriched token, chain, and protocol metadata. Use `details=BASIC` for a slimmer payload without APY enrichment.



## OpenAPI

````yaml /openapi.yaml get /strategies
openapi: 3.0.0
info:
  version: 2.0.0
  title: Pods API
  description: >
    # Pods API Documentation


    Pods API is a comprehensive DeFi aggregation platform that enables
    cross-chain and same-chain transactions for yield strategies.


    ## Key Features


    - **Cross-Chain Swaps**: Swap tokens across different blockchain networks

    - **Same-Chain Swaps**: Optimal routing for swaps within the same network

    - **Yield Strategies**: Access to multiple DeFi protocols (Aave, Morpho,
    Lido, etc.)

    - **Wallet Tracking**: Monitor positions and yields across protocols

    - **Transaction Monitoring**: Real-time status updates for cross-chain
    transactions


    ## Authentication


    Most API endpoints require authentication using an API key in the
    `x-api-key` header:


    ```

    x-api-key: your-api-key-here

    ```


    Obtain your API key from the Pods dashboard.


    **Exceptions:**

    - `GET /health` is public and does not require authentication.

    - Customer dashboard endpoints (e.g. `GET /customers/me`,
    `/customers/:id/tokens`, `/customers/:id/token-groups`) require a **Bearer**
    token (Supabase or Magic JWT). API key alone is not sufficient for these
    routes because they enforce user role checks.


    ## Base URL


    Production: `https://api.pods.finance`


    ## Rate Limits


    - 100 requests per minute per API key

    - 1000 requests per hour per API key


    ## Quote Expiration


    Quotes expire after 5 minutes. The `deadline` field is a Unix timestamp in
    seconds and `deadlineDate` is an ISO 8601 string (UTC); request a new quote
    when the deadline has passed.


    ## Error Handling


    All errors follow a consistent format. The HTTP status line is the source of
    truth — the body does **not** include `httpStatus`:


    ```json

    {
      "error": {
        "code": "ERROR_CODE",
        "message": "Human-readable error message",
        "details": {}
      }
    }

    ```


    ## Common Error Codes


    - **QUOTE_NOT_FOUND** (404): Quote not found or expired

    - **ACTION_NOT_FOUND** (404): Action not found

    - **STRATEGY_NOT_FOUND** (404): Strategy not found

    - **INVALID_ACTION_TYPE** (400): Action type is not supported for this
    endpoint

    - **QUOTE_EXPIRED** (400): Quote has expired

    - **QUOTE_VALIDATION_ERROR** (400): Quote validation failed

    - **PROVIDER_NOT_FOUND** (404): Swap provider not found

    - **NO_ROUTE_FOUND** (400): No swap route available between specified chains

    - **INVALID_PREFERRED_PROVIDER** (400): Unknown preferredProvider name

    - **PREFERRED_PROVIDER_NOT_ELIGIBLE** (400): preferredProvider is not
    eligible for this swap route

    - **PREFERRED_PROVIDER_QUOTE_UNAVAILABLE** (400): No quote was returned for
    the requested preferredProvider

    - **QUOTE_GENERATION_FAILED** (400): Could not generate quote for specified
    parameters

    - **FEE_SPONSORSHIP_NOT_ALLOWED** (403): Fee sponsorship is not allowed for
    this customer

    - **INVALID_TX_HASH** (400): Invalid transaction hash format

    - **TX_UPDATE_FAILED** (500): Failed to update transaction status

    - **INVALID_AMOUNT_PARAMS** (400): Cannot specify both amountIn and
    amountOut simultaneously

    - **MISSING_AMOUNT_PARAMS** (400): Either amountIn or amountOut is required

    - **INVALID_SLIPPAGE** (400): slippage must be a number between 0.0001 and
    0.5 (fraction of 1, e.g. 0.01 = 1%)

    - **AMOUNT_IN_TOO_LOW** (400): AmountIn is below the minimum for this route

    - **AMOUNT_IN_TOO_HIGH** (400): AmountIn exceeds available liquidity for
    this route. Try a smaller amount.

    - **AMOUNT_IN_TOO_LOW_OFFRAMP** (400): AmountIn must be greater than 1 USDC

    - **AMOUNT_IN_TOO_HIGH_OFFRAMP** (400): AmountIn must be less than 5k USDC

    - **AMOUNT_OUT_TOO_LOW_OFFRAMP** (400): AmountOut must be greater than 5
    BRLA

    - **AMOUNT_OUT_TOO_HIGH_OFFRAMP** (400): AmountOut must be less than 26k
    BRLA

    - **AMOUNT_IN_TOO_LOW_ONRAMP** (400): AmountIn must be greater than 5 BRLA

    - **AMOUNT_IN_TOO_HIGH_ONRAMP** (400): AmountIn must be less than 75k BRLA

    - **AMOUNT_OUT_TOO_LOW_ONRAMP** (400): AmountOut must be greater than 1 USDC

    - **AMOUNT_OUT_TOO_HIGH_ONRAMP** (400): AmountOut must be less than 15k USDC

    - **TRANSFER_VALIDATION_FAILED** (400): Token transfer validation failed

    - **REFUND_PROCESSING_FAILED** (500): Failed to process refund transaction

    - **INSUFFICIENT_AMOUNT_FOR_REFUND** (400): Transferred amount insufficient
    to cover refund fee

    - **FORBIDDEN** (403): Access denied

    - **INTERNAL_SERVER_ERROR** (500): An unexpected error occurred

    - **BYTECODE_GENERATION_FAILED** (500): Failed to generate transaction
    bytecode

    - **SWAP_EXECUTION_FAILED** (500): Failed to execute swap transaction

    - **KAMINO_SERVICE_UNAVAILABLE** (503): Lending service is temporarily
    unavailable. Please try again later.

    - **KAMINO_BAD_REQUEST** (400): Invalid request to lending service

    - **DEPOSIT_NOT_FOUND** (404): Bitcoin deposit not found

    - **SYMBIOSIS_API_ERROR** (502): Error communicating with Symbiosis API


    ## Support


    - Documentation: https://docs.pods.finance

    - Support: support@pods.finance
  contact:
    name: Pods Support
    email: support@pods.finance
    url: https://pods.finance
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.pods.finance
    description: Production server
security: []
tags:
  - name: Health
    description: Health check endpoints
  - name: KYC
    description: Reusable Sumsub KYC import and status endpoints
  - name: Swap v2
    description: Token swap operations (latest version)
  - name: Tracking
    description: Execution tracking for swaps, transfers, and strategy operations
  - name: Strategies
    description: DeFi yield strategy operations
  - name: Ondo
    description: Ondo Global Markets (tokenized stocks & ETFs)
  - name: Tokens
    description: Token catalog (requires wallet product type)
  - name: Transfer
    description: Token transfer transaction generation
  - name: Wallets
    description: Wallet position tracking
  - name: Customers
    description: Customer account management (Bearer auth)
  - name: Quotes
    description: Quote history and management
  - name: Smart Account
    description: ERC-4337 Gnosis Safe smart account provisioning
paths:
  /strategies:
    get:
      tags:
        - Strategies
      summary: List strategies
      description: >-
        Get paginated list of available DeFi yield strategies for the
        authenticated customer. Default `details=FULL` returns APY metrics plus
        enriched token, chain, and protocol metadata. Use `details=BASIC` for a
        slimmer payload without APY enrichment.
      parameters:
        - schema:
            type: string
            default: '1'
            description: Page number
          required: false
          name: page
          in: query
        - schema:
            type: string
            default: '100'
            description: Results per page
          required: false
          name: limit
          in: query
        - schema:
            type: string
            enum:
              - BASIC
              - FULL
            default: FULL
            description: >-
              Response detail level. FULL (default) includes APY fields and
              enriched protocolInfo/chain/token metadata.
          required: false
          name: details
          in: query
        - schema:
            type: string
            description: Filter by network slug
            example: polygon
          required: false
          name: network
          in: query
        - schema:
            type: string
            description: Filter by protocol name
            example: Aave
          required: false
          name: protocol
          in: query
        - schema:
            type: string
            description: Filter by category slug
          required: false
          name: category
          in: query
      responses:
        '200':
          description: Strategies retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/StrategyListItem'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                required:
                  - data
                  - pagination
      security:
        - ApiKeyAuth: []
components:
  schemas:
    StrategyListItem:
      allOf:
        - $ref: '#/components/schemas/StrategyListBasicItem'
        - type: object
          properties:
            apy:
              type: number
              example: 0.0285
            avgApy:
              type: number
              example: 0.0406
            grossAPY:
              type: number
              example: 0.0285
            inceptionApy:
              type: number
              example: 0.1468
            netAPY:
              type: number
              example: 0.0285
          required:
            - protocolInfo
            - chain
            - assetToken
            - underlyingToken
            - apy
            - avgApy
            - grossAPY
            - inceptionApy
            - netAPY
      description: Strategy item returned by GET /strategies when details=FULL (default)
    Pagination:
      type: object
      properties:
        page:
          type: number
          example: 1
        limit:
          type: number
          example: 10
        total:
          type: number
          example: 24
        totalPages:
          type: number
          example: 3
        hasMore:
          type: boolean
          example: true
      required:
        - page
        - limit
        - total
        - totalPages
        - hasMore
      description: Standard list pagination metadata
    StrategyListBasicItem:
      type: object
      properties:
        id:
          type: string
          example: Aave-USDC-polygon
        slug:
          type: string
          example: Aave-USDC-polygon
        asset:
          type: string
          description: Strategy asset contract address
        assetDecimals:
          type: number
          example: 6
        assetName:
          type: string
          example: USDC
        availableActions:
          type: array
          items:
            type: string
          example:
            - lend
            - withdraw
        implementationSelector:
          type: string
          example: AavePolygon
        network:
          type: string
          example: polygon
        networkId:
          type: string
          example: '137'
        protocol:
          type: string
          example: Aave
        underlyingAsset:
          type: string
        underlyingDecimals:
          type: number
        isDefault:
          type: boolean
        paused:
          type: boolean
        startDate:
          type: string
        fee:
          type: string
          example: '0'
        performanceFeeBps:
          type: string
          example: '0'
        metadata:
          type: object
          properties: {}
        marketData:
          allOf:
            - $ref: '#/components/schemas/StrategyMarketData'
            - nullable: true
        protocolInfo:
          $ref: '#/components/schemas/StrategyProtocolInfo'
        chain:
          $ref: '#/components/schemas/StrategyChain'
        assetToken:
          $ref: '#/components/schemas/StrategyToken'
        underlyingToken:
          $ref: '#/components/schemas/StrategyToken'
        logourl:
          type: string
        category:
          type: array
          items:
            type: string
      required:
        - id
        - slug
        - asset
        - assetDecimals
        - assetName
        - availableActions
        - implementationSelector
        - network
        - networkId
        - protocol
        - underlyingAsset
        - underlyingDecimals
        - isDefault
        - paused
        - startDate
        - fee
        - performanceFeeBps
        - metadata
      description: Strategy item returned by GET /strategies when details=BASIC
    StrategyMarketData:
      type: object
      properties:
        lastRefreshedAt:
          type: string
          format: date-time
        samples:
          type: array
          items:
            type: object
            properties:
              at:
                type: string
                format: date-time
              tvl:
                type: string
              tvlUsd:
                type: number
            required:
              - at
              - tvl
              - tvlUsd
          maxItems: 2
        tvl:
          type: string
        tvlChange24h:
          type: number
          nullable: true
        tvlUsd:
          type: number
        usdRate:
          type: number
    StrategyProtocolInfo:
      type: object
      properties:
        name:
          type: string
          example: Aave
        logo:
          type: string
          format: uri
          example: https://icons.llamao.fi/icons/protocols/aave
      required:
        - name
        - logo
    StrategyChain:
      type: object
      properties:
        name:
          type: string
          example: polygon
        id:
          type: number
          example: 137
        explorer:
          type: object
          properties:
            name:
              type: string
              example: Polygonscan
            url:
              type: string
              format: uri
              example: https://polygonscan.com
          required:
            - name
            - url
        logo:
          type: string
          nullable: true
          format: uri
      required:
        - name
        - id
        - explorer
    StrategyToken:
      type: object
      properties:
        name:
          type: string
          example: USD Coin
        address:
          type: string
          example: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359'
        symbol:
          type: string
          example: USDC
        decimals:
          type: number
          example: 6
        logo:
          type: string
          nullable: true
          format: uri
      required:
        - name
        - address
        - symbol
        - decimals
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Obtain from your Pods dashboard.

````