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

# List Portfolio Products

> List tradable products for a given portfolio.

Use the Prime SDK or CLI to test this endpoint by following the [quickstart](/prime/introduction/quickstart) guide and running with the following examples

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    ProductsService productsService = PrimeServiceFactory.createProductsService(client);

    ListPortfolioProductsRequest request = new ListPortfolioProductsRequest.Builder()
        .portfolioId("PORTFOLIO_ID_HERE")
        .build();

    ListPortfolioProductsResponse response = productsService.listPortfolioProducts(request);
    ```

    For more information, please visit the [Prime Java SDK](https://github.com/coinbase-samples/prime-sdk-java).
  </Tab>

  <Tab title=".NET">
    ```csharp wrap theme={null}
    var productsService = new ProductsService(client);

    var request = new ListPortfolioProductsRequest("PORTFOLIO_ID_HERE");

    var response = productsService.ListPortfolioProducts(request);
    ```

    For more information, please visit the [Prime .NET SDK](https://github.com/coinbase-samples/prime-sdk-dotnet).
  </Tab>

  <Tab title="Go">
    ```go wrap theme={null}
    productsService := products.NewProductsService(client)

    request := &products.ListProducts{
        PortfolioId: "PORTFOLIO_ID_HERE",
    }

    response, err := productsService.ListProducts(context.Background(), request)
    ```

    For more information, please visit the [Prime Go SDK](https://github.com/coinbase-samples/prime-sdk-go).
  </Tab>

  <Tab title="Python">
    ```python wrap theme={null}
    prime_client = PrimeClient(credentials)

    request = ListProducts(
        portfolio_id="PORTFOLIO_ID_HERE",
    )

    response = prime_client.list_products(request)
    ```

    For more information, please visit the [Prime Python SDK](https://github.com/coinbase-samples/prime-sdk-py).
  </Tab>

  <Tab title="CLI">
    ```bash wrap theme={null}
    primectl list-products --help
    ```

    For more information, please visit the [Prime CLI](https://github.com/coinbase-samples/prime-cli).
  </Tab>

  <Tab title="TS/JS">
    ```typescript wrap theme={null}
    const productsService = new ProductsService(client);

    productsService.listProducts({
        portfolioId: 'PORTFOLIO_ID_HERE'
    }).then(async (response) => {
        console.log('Products: ', response);
    })
    ```

    For more information, please visit the [Prime TS SDK](https://github.com/coinbase-samples/prime-sdk-ts).
  </Tab>
</Tabs>


## OpenAPI

````yaml GET /v1/portfolios/{portfolio_id}/products
openapi: 3.0.1
info:
  title: REST API
  description: >-
    The Coinbase Prime REST API provides programmatic access to trading,
    custody, staking, market data, and account management functionality.
  version: '0.1'
servers:
  - url: https://api.prime.coinbase.com/
security: []
tags:
  - name: PrimeRESTAPI
paths:
  /v1/portfolios/{portfolio_id}/products:
    get:
      tags:
        - Products
      summary: List Portfolio Products
      description: List tradable products for a given portfolio.
      operationId: PrimeRESTAPI_GetPortfolioProducts
      parameters:
        - name: portfolio_id
          in: path
          description: The portfolio ID
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          description: Cursor used for pagination (last consumed record)
          schema:
            type: string
        - name: limit
          in: query
          description: Number of items to retrieve
          schema:
            type: integer
            format: int32
        - name: sort_direction
          in: query
          description: Sorting order
          schema:
            type: string
            default: DESC
            enum:
              - DESC
              - ASC
        - name: product_type
          in: query
          description: >-
            Filter by product type (SPOT, FUTURE). If unset, returns all types
            available for your portfolio. Futures products require additional
            entitlements.

             - UNKNOWN_PRODUCT_TYPE: Unknown product type
             - SPOT: Spot product
             - FUTURE: Future product
          schema:
            type: string
            enum:
              - SPOT
              - FUTURE
        - name: contract_expiry_type
          in: query
          description: >-
            Filter by contract expiry type (EXPIRING or PERPETUAL). Only
            applicable when product_type = FUTURE. If unset, returns all futures
            kinds.

             - CONTRACT_EXPIRY_TYPE_UNSPECIFIED: Unspecified contract expiry type
             - CONTRACT_EXPIRY_TYPE_EXPIRING: Expiring futures contract
             - CONTRACT_EXPIRY_TYPE_PERPETUAL: Perpetual futures contract (no expiry)
          schema:
            type: string
            default: CONTRACT_EXPIRY_TYPE_UNSPECIFIED
            enum:
              - CONTRACT_EXPIRY_TYPE_UNSPECIFIED
              - CONTRACT_EXPIRY_TYPE_EXPIRING
              - CONTRACT_EXPIRY_TYPE_PERPETUAL
        - name: expiring_contract_status
          in: query
          description: >-
            Filter by expiry status for expiring futures. If unset, returns all
            expiring futures.

             - EXPIRING_CONTRACT_STATUS_UNKNOWN: Unknown/unset — returns all expiring contracts (backward compatible default)
             - EXPIRING_CONTRACT_STATUS_UNEXPIRED: Only unexpired contracts (contract_expiry is in the future)
             - EXPIRING_CONTRACT_STATUS_EXPIRED: Only expired contracts (contract_expiry is in the past)
             - EXPIRING_CONTRACT_STATUS_ALL: All contracts regardless of expiry status
          schema:
            type: string
            enum:
              - EXPIRING_CONTRACT_STATUS_UNEXPIRED
              - EXPIRING_CONTRACT_STATUS_EXPIRED
              - EXPIRING_CONTRACT_STATUS_ALL
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/coinbase.public_rest_api.GetPortfolioProductsResponse
components:
  schemas:
    coinbase.public_rest_api.GetPortfolioProductsResponse:
      type: object
      properties:
        products:
          type: array
          items:
            $ref: '#/components/schemas/coinbase.public_rest_api.Product'
        pagination:
          $ref: '#/components/schemas/coinbase.public_rest_api.PaginatedResponse'
    coinbase.public_rest_api.Product:
      type: object
      properties:
        id:
          type: string
          description: The product ID, written as `BASE-QUOTE`
          example: BTC-USD
        base_increment:
          type: string
          description: >-
            The smallest permitted unit of denomination for the base asset
            (varies by product)
          example: '1'
        quote_increment:
          type: string
          description: >-
            The smallest permitted unit of denomination for the quote asset
            (varies by product)
          example: '1'
        base_min_size:
          type: string
          description: >-
            The minimum size (in base asset units) for which an order can be
            placed
          example: '100'
        quote_min_size:
          type: string
          description: >-
            The minimum size (in quote asset units) for which an order can be
            placed
          example: '100'
        base_max_size:
          type: string
          description: >-
            The maximum size (in base asset units) for which an order can be
            placed
          example: '1000'
        quote_max_size:
          type: string
          description: >-
            The maximum size (in quote asset units) for which an order can be
            placed
          example: '1000'
        permissions:
          title: Permissions for the product based on portfolio
          type: array
          description: Permissions given to the user for a product
          example: PRODUCT_PERMISSION_READ
          items:
            $ref: '#/components/schemas/coinbase.public_rest_api.ProductPermissions'
        price_increment:
          type: string
          description: The smallest permitted price increment for the product
          example: '0.01'
        rfq_product_details:
          $ref: '#/components/schemas/coinbase.public_rest_api.RFQProductDetails'
        product_type:
          $ref: '#/components/schemas/coinbase.public_rest_api.ProductType'
        fcm_trading_session_details:
          $ref: >-
            #/components/schemas/coinbase.public_rest_api.FcmTradingSessionDetails
        future_product_details:
          $ref: '#/components/schemas/coinbase.public_rest_api.FutureProductDetails'
    coinbase.public_rest_api.PaginatedResponse:
      required:
        - has_next
        - next_cursor
        - sort_direction
      type: object
      properties:
        next_cursor:
          type: string
          description: Cursor to navigate to next page
        sort_direction:
          $ref: '#/components/schemas/coinbase.public_rest_api.SortDirection'
        has_next:
          type: boolean
          description: >-
            A boolean value indicating whether there are more items to paginate
            through
    coinbase.public_rest_api.ProductPermissions:
      type: string
      enum:
        - PRODUCT_PERMISSION_READ
        - PRODUCT_PERMISSION_TRADE
        - PRODUCT_PERMISSION_LENDING
    coinbase.public_rest_api.RFQProductDetails:
      type: object
      properties:
        tradable:
          type: boolean
          description: Whether the product is tradable via RFQ
        min_notional_size:
          type: string
          description: 'Deprecated: Value will be an empty string'
        max_notional_size:
          type: string
          description: 'Deprecated: Value will be an empty string'
        min_base_size:
          type: string
          description: Minimum base size for RFQ
        max_base_size:
          type: string
          description: Maximum base size for RFQ
        min_quote_size:
          type: string
          description: Minimum quote size for RFQ
        max_quote_size:
          type: string
          description: Maximum quote size for RFQ
    coinbase.public_rest_api.ProductType:
      title: ProductType represents the general type of product
      type: string
      description: |-
        - UNKNOWN_PRODUCT_TYPE: Unknown product type
         - SPOT: Spot product
         - FUTURE: Future product
      enum:
        - SPOT
        - FUTURE
    coinbase.public_rest_api.FcmTradingSessionDetails:
      title: >-
        FcmTradingSessionDetails contains trading session details for FCM
        products
      type: object
      properties:
        session_open:
          title: Whether the trading session is currently open
          type: boolean
          description: Whether the trading session is currently open
        open_time:
          title: Trading session open time
          type: string
          description: Trading session open time
          format: date-time
        close_time:
          title: Trading session close time
          type: string
          description: Trading session close time
          format: date-time
        session_state:
          $ref: '#/components/schemas/coinbase.public_rest_api.FcmTradingSessionState'
        after_hours_order_entry_disabled:
          title: Whether after-hours order entry is disabled
          type: boolean
          description: Whether after-hours order entry is disabled
        closed_reason:
          $ref: >-
            #/components/schemas/coinbase.public_rest_api.FcmTradingSessionClosedReason
        maintenance:
          $ref: >-
            #/components/schemas/coinbase.public_rest_api.FcmScheduledMaintenance
        settlement_timestamp:
          title: Settlement timestamp from previous trading day
          type: string
          description: Settlement timestamp from previous trading day
          format: date-time
        settlement_price:
          title: Settlement price from previous trading day
          type: string
          description: Settlement price from previous trading day
    coinbase.public_rest_api.FutureProductDetails:
      title: FutureProductDetails contains details specific to futures products
      type: object
      properties:
        contract_code:
          title: Contract code identifier
          type: string
          description: Contract code identifier
          example: BTCH25
        contract_size:
          title: Contract size
          type: string
          description: Contract size
          example: '1'
        contract_expiry:
          title: Contract expiry timestamp
          type: string
          description: Contract expiry timestamp
          format: date-time
        contract_root_unit:
          title: Contract root unit (underlying asset)
          type: string
          description: Contract root unit (underlying asset)
          example: BTC
        contract_expiry_type:
          $ref: '#/components/schemas/coinbase.public_rest_api.ContractExpiryType'
        risk_managed_by:
          $ref: '#/components/schemas/coinbase.public_rest_api.RiskManagementType'
        venue:
          title: The venue this product trades on (e.g., cme, cde)
          type: string
          description: The venue this product trades on
          example: cde
        group_description:
          title: Descriptive name for the product group
          type: string
          description: Descriptive name for the product group
          example: Nano Bitcoin
        contract_expiry_timezone:
          title: IANA time zone for contract expiration
          type: string
          description: IANA time zone for contract expiration
          example: Europe/London
        group_short_description:
          title: Short version of the group description
          type: string
          description: Short version of the group description
          example: Nano BTC
        perpetual_details:
          $ref: >-
            #/components/schemas/coinbase.public_rest_api.PerpetualProductDetails
    coinbase.public_rest_api.SortDirection:
      type: string
      default: DESC
      enum:
        - DESC
        - ASC
    coinbase.public_rest_api.FcmTradingSessionState:
      title: >-
        FcmTradingSessionState represents the current state of an FCM trading
        session
      type: string
      description: |-
        - FCM_TRADING_SESSION_STATE_UNDEFINED: Undefined session state
         - FCM_TRADING_SESSION_STATE_PRE_OPEN: Pre-open state, orders can be placed and cancelled
         - FCM_TRADING_SESSION_STATE_PRE_OPEN_NO_CANCEL: Pre-open state, orders cannot be cancelled
         - FCM_TRADING_SESSION_STATE_OPEN: Trading session is open
         - FCM_TRADING_SESSION_STATE_CLOSE: Trading session is closed
         - FCM_TRADING_SESSION_STATE_HALTED: Trading session is halted
      default: FCM_TRADING_SESSION_STATE_UNDEFINED
      enum:
        - FCM_TRADING_SESSION_STATE_UNDEFINED
        - FCM_TRADING_SESSION_STATE_PRE_OPEN
        - FCM_TRADING_SESSION_STATE_PRE_OPEN_NO_CANCEL
        - FCM_TRADING_SESSION_STATE_OPEN
        - FCM_TRADING_SESSION_STATE_CLOSE
        - FCM_TRADING_SESSION_STATE_HALTED
    coinbase.public_rest_api.FcmTradingSessionClosedReason:
      title: >-
        FcmTradingSessionClosedReason represents the reason for FCM trading
        session closure
      type: string
      description: |-
        - FCM_TRADING_SESSION_CLOSED_REASON_UNDEFINED: Undefined closed reason
         - FCM_TRADING_SESSION_CLOSED_REASON_REGULAR_MARKET_CLOSE: Regular market close
         - FCM_TRADING_SESSION_CLOSED_REASON_EXCHANGE_MAINTENANCE: Exchange maintenance
         - FCM_TRADING_SESSION_CLOSED_REASON_VENDOR_MAINTENANCE: Vendor maintenance
      default: FCM_TRADING_SESSION_CLOSED_REASON_UNDEFINED
      enum:
        - FCM_TRADING_SESSION_CLOSED_REASON_UNDEFINED
        - FCM_TRADING_SESSION_CLOSED_REASON_REGULAR_MARKET_CLOSE
        - FCM_TRADING_SESSION_CLOSED_REASON_EXCHANGE_MAINTENANCE
        - FCM_TRADING_SESSION_CLOSED_REASON_VENDOR_MAINTENANCE
    coinbase.public_rest_api.FcmScheduledMaintenance:
      title: >-
        FcmScheduledMaintenance contains scheduled maintenance window
        information
      type: object
      properties:
        start_time:
          title: Maintenance window start time
          type: string
          description: Maintenance window start time
          format: date-time
        end_time:
          title: Maintenance window end time
          type: string
          description: Maintenance window end time
          format: date-time
    coinbase.public_rest_api.ContractExpiryType:
      title: ContractExpiryType represents the expiry type of a futures contract
      type: string
      description: |-
        - CONTRACT_EXPIRY_TYPE_UNSPECIFIED: Unspecified contract expiry type
         - CONTRACT_EXPIRY_TYPE_EXPIRING: Expiring futures contract
         - CONTRACT_EXPIRY_TYPE_PERPETUAL: Perpetual futures contract (no expiry)
      default: CONTRACT_EXPIRY_TYPE_UNSPECIFIED
      enum:
        - CONTRACT_EXPIRY_TYPE_UNSPECIFIED
        - CONTRACT_EXPIRY_TYPE_EXPIRING
        - CONTRACT_EXPIRY_TYPE_PERPETUAL
    coinbase.public_rest_api.RiskManagementType:
      title: RiskManagementType represents how risk is managed for a product
      type: string
      description: |-
        - RISK_MANAGEMENT_TYPE_UNSPECIFIED: Unspecified risk management type
         - RISK_MANAGEMENT_TYPE_MANAGED_BY_FCM: Risk is managed by FCM (Futures Commission Merchant)
         - RISK_MANAGEMENT_TYPE_MANAGED_BY_VENUE: Risk is managed by the venue
      default: RISK_MANAGEMENT_TYPE_UNSPECIFIED
      enum:
        - RISK_MANAGEMENT_TYPE_UNSPECIFIED
        - RISK_MANAGEMENT_TYPE_MANAGED_BY_FCM
        - RISK_MANAGEMENT_TYPE_MANAGED_BY_VENUE
    coinbase.public_rest_api.PerpetualProductDetails:
      title: >-
        PerpetualProductDetails contains details specific to perpetual futures
        products
      type: object
      properties:
        open_interest:
          title: Open interest for the perpetual product
          type: string
          description: Open interest
          example: '1000000'
        funding_rate:
          title: Current funding rate
          type: string
          description: Current funding rate
          example: '0.0001'
        funding_time:
          title: Next funding time
          type: string
          description: Next funding time
          format: date-time
        max_leverage:
          title: Maximum leverage allowed
          type: string
          description: Maximum leverage allowed
          example: '5'
        underlying_type:
          title: Underlying type (e.g. SPOT, INDEX)
          type: string
          description: The type of underlying for the perpetual product
          example: SPOT

````