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

# List catalog products



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/catalog-products
openapi: 3.0.3
info:
  title: SegmentFlow.ai API
  description: Unified SegmentFlow.ai API documentation
  version: 1.0.0
servers:
  - url: http://localhost:3001
    description: Local development
  - url: https://api-staging.segmentflow.ai
    description: Staging
  - url: https://api.segmentflow.ai
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Profiles
    description: Profiles (Contacts)
  - name: Events
    description: Server-side business event tracking
  - name: Assets
    description: Assets
  - name: BackgroundJobs
    description: Background job progress
  - name: Brand-Kit
    description: Brand kits
  - name: Catalog-Products
    description: Catalog products
  - name: Templates
    description: Templates
  - name: Broadcasts
    description: Broadcasts
  - name: Segments
    description: Segments
  - name: Journeys
    description: Journeys
  - name: Emails
    description: Email sends
paths:
  /api/v1/catalog-products:
    get:
      tags:
        - Catalog-Products
      summary: List catalog products
      operationId: Catalog-Products_CatalogProducts_List
      parameters:
        - schema:
            default: 1
            type: integer
            minimum: 1
            maximum: 9007199254740991
          in: query
          name: page
          required: false
        - schema:
            default: 20
            type: integer
            minimum: 1
            maximum: 100
          in: query
          name: limit
          required: false
        - schema:
            type: string
            maxLength: 200
          in: query
          name: search
          required: false
        - schema:
            type: string
            enum:
              - shopify
              - woocommerce
              - manual
          in: query
          name: source
          required: false
        - schema:
            type: string
            enum:
              - active
              - hidden
              - archived
          in: query
          name: status
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: featured
          required: false
        - schema:
            type: string
            maxLength: 200
          in: query
          name: category
          required: false
        - schema:
            type: string
            maxLength: 500
          in: query
          name: tags
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: missingImage
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: missingDescription
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: missingCategoryOrTags
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: discounted
          required: false
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: staleSync
          required: false
        - schema:
            default: createdAt
            type: string
            enum:
              - title
              - price
              - createdAt
              - updatedAt
          in: query
          name: sort
          required: false
        - schema:
            default: desc
            type: string
            enum:
              - asc
              - desc
          in: query
          name: order
          required: false
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalProductListResponse'
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ExternalProductListResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            $ref: '#/components/schemas/ExternalProductResponse'
        pagination:
          type: object
          properties:
            page:
              type: number
            limit:
              type: number
            totalCount:
              type: number
            totalPages:
              type: number
          required:
            - page
            - limit
            - totalCount
            - totalPages
          additionalProperties: false
      required:
        - success
        - data
        - pagination
      additionalProperties: false
      description: Paginated Unified API catalog product list response.
    ErrorResponse:
      type: object
      properties:
        errorCode:
          $ref: '#/components/schemas/SegmentflowErrorCode'
          description: >-
            Stable machine-readable error code. SDKs map this to typed exception
            classes.
          example: TEMPLATE_NAME_EXISTS
        message:
          type: string
          description: >-
            Human-readable error message. May change between releases; do not
            parse.
          example: Template name 'Hello' already exists in this organization.
        details:
          description: >-
            Optional structured detail. `issues` carries per-field validation
            problems; other keys are reserved.
          type: object
          properties:
            issues:
              type: array
              items:
                $ref: '#/components/schemas/ErrorIssue'
          additionalProperties:
            description: Any JSON value.
            nullable: true
            x-stainless-any: true
      required:
        - errorCode
        - message
      additionalProperties: false
      description: 'Canonical error envelope (ADR-0008): `{ errorCode, message, details? }`.'
    ExternalProductResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        externalId:
          type: string
          nullable: true
        source:
          type: string
          enum:
            - shopify
            - woocommerce
            - manual
        status:
          type: string
          enum:
            - active
            - hidden
            - archived
        title:
          type: string
        handle:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        price:
          type: string
        compareAtPrice:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
        primaryImageId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          nullable: true
        primaryImageUrl:
          type: string
          nullable: true
        primaryImageExternalId:
          type: string
          nullable: true
        primaryImageAltText:
          type: string
          nullable: true
        primaryImageIssue:
          type: object
          properties:
            code:
              type: string
              enum:
                - size_exceeded
                - download_failed
                - invalid_content_type
                - ssrf_rejected
                - fetch_error
            message:
              type: string
            sourceUrl:
              type: string
              nullable: true
            occurredAt:
              type: string
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
            details:
              type: object
              additionalProperties:
                description: Any JSON value.
                nullable: true
                x-stainless-any: true
          required:
            - code
            - message
            - occurredAt
          additionalProperties: false
          nullable: true
        imageIds:
          type: array
          items:
            type: string
        galleryImages:
          type: array
          items:
            type: object
            properties:
              externalId:
                type: string
                nullable: true
              url:
                type: string
              altText:
                type: string
                nullable: true
              position:
                type: integer
                minimum: 0
                maximum: 9007199254740991
            required:
              - externalId
              - url
              - altText
              - position
            additionalProperties: false
        productUrl:
          type: string
          nullable: true
        category:
          type: string
          nullable: true
        tags:
          type: array
          items:
            type: string
        sku:
          type: string
          nullable: true
        vendor:
          type: string
          nullable: true
        featured:
          type: boolean
        lastSyncedAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
          nullable: true
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        updatedAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
      required:
        - id
        - externalId
        - source
        - status
        - title
        - handle
        - description
        - price
        - compareAtPrice
        - currency
        - primaryImageId
        - primaryImageUrl
        - primaryImageExternalId
        - primaryImageAltText
        - primaryImageIssue
        - imageIds
        - galleryImages
        - productUrl
        - category
        - tags
        - sku
        - vendor
        - featured
        - lastSyncedAt
        - createdAt
        - updatedAt
      additionalProperties: false
      description: >-
        Unified API catalog product response without organization-internal
        fields.
    SegmentflowErrorCode:
      type: string
      enum:
        - BAD_REQUEST
        - UNAUTHORIZED
        - FORBIDDEN
        - NOT_FOUND
        - CONFLICT
        - GONE
        - UNPROCESSABLE_ENTITY
        - TOO_MANY_REQUESTS
        - VALIDATION_ERROR
        - INTERNAL_ERROR
        - NOT_IMPLEMENTED
        - SERVICE_UNAVAILABLE
        - DATABASE_ERROR
        - IDEMPOTENCY_KEY_TOO_LONG
        - IDEMPOTENCY_KEY_REUSED
        - IDEMPOTENCY_IN_FLIGHT
        - JOURNEY_NOT_FOUND
        - JOURNEY_WRONG_ENTRY_NODE
        - JOURNEY_MISSING_RECIPIENT_EMAIL
        - JOURNEY_MISSING_REQUIRED_VARIABLES
        - JOURNEY_RECIPIENT_ERASED
        - JOURNEY_RUN_NOT_FOUND
        - BROADCAST_NOT_FOUND
        - BROADCAST_SCHEDULING_NOT_IMPLEMENTED
        - BROADCAST_INVALID_STATE
        - BROADCAST_SEND_NOT_ALLOWED
        - PREPARED_SEND_NOT_FOUND
        - PREPARED_SEND_EXPIRED
        - PREPARED_SEND_CROSS_USER
        - PREPARED_SEND_CORRUPT
        - PREPARED_SEND_CONCURRENT_REDEEM
        - PREPARED_SEND_VALIDATION_FAILED
        - TEMPLATE_NOT_FOUND
        - TEMPLATE_NAME_EXISTS
        - PROFILE_NOT_FOUND
        - PROFILE_SUBSCRIPTION_GROUP_NOT_FOUND
        - PROFILE_TRAITS_WRITE_UNSUPPORTED
        - MISSING_CREDENTIAL
        - INVALID_API_KEY
        - INVALID_OAUTH_TOKEN
        - AMBIGUOUS_CREDENTIAL
        - INSUFFICIENT_SCOPE
        - MULTIPLE_CREDENTIALS_PRESENT
        - BEARER_CREDENTIAL_REMOVED
        - SESSION_ROLE_INSUFFICIENT
        - API_KEY_SCOPE_INSUFFICIENT
        - BILLING_DISABLED
        - BILLING_NOT_CONFIGURED
      description: >-
        Stable machine-readable error code. SDK codegen maps these to typed
        exception classes.
    ErrorIssue:
      type: object
      properties:
        path:
          anyOf:
            - type: string
            - type: array
              items:
                anyOf:
                  - type: string
                  - type: number
          description: >-
            Where in the request the issue occurred. String for simple paths;
            array for nested paths.
          example: name
        code:
          type: string
          description: >-
            Stable, machine-readable kind of issue (e.g. 'required',
            'invalid_type').
          example: duplicate
        message:
          type: string
          description: Human-readable description of the issue.
          example: Template name already exists in this organization.
      required:
        - path
        - code
        - message
      additionalProperties: false
      description: A single validation issue inside an error response's `details.issues[]`.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Unified API key for server-side SDK and API integrations

````