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

# List products with pagination

> Lists products for the authenticated organization with search, store filters, and pagination. The backend filters products by organization before returning rows. Public schema excludes internal sync snapshots and system product payloads.

Scope notes: Requires product read scope and authenticated organization isolation.

Read-only endpoint.



## OpenAPI

````yaml /public_openapi_v1.json get /products/paging
openapi: 3.0.0
info:
  title: Sellfern Public API
  version: 1.0.0
  description: OpenAPI spec for Sellfern Public V1 developer docs.
  contact:
    name: Sellfern Support
    email: support@sellfern.com
servers:
  - url: https://api.sellfern.com
    description: Production API
security:
  - ApiKeyAuth: []
tags:
  - name: Organizations And Stores
  - name: Orders
  - name: Order Items
  - name: Products And Catalog
  - name: Webhooks
paths:
  /products/paging:
    get:
      tags:
        - Products And Catalog
      summary: List products with pagination
      description: >-
        Lists products for the authenticated organization with search, store
        filters, and pagination. The backend filters products by organization
        before returning rows. Public schema excludes internal sync snapshots
        and system product payloads.


        Scope notes: Requires product read scope and authenticated organization
        isolation.


        Read-only endpoint.
      parameters:
        - name: search
          in: query
          required: false
          schema:
            type: string
          description: Search by SKU or title.
        - name: excludeAuto
          in: query
          required: false
          schema:
            type: boolean
            default: true
          description: Exclude automatically generated SKUs.
        - name: missingDesignLink
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: Only include products missing a design link.
        - name: stores
          in: query
          required: false
          schema:
            type: string
          description: Store filter accepted by the backend.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
          description: Page number, 1-indexed.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
          description: Number of results per page.
        - name: sortField
          in: query
          required: false
          schema:
            type: string
            default: id
          description: Product field to sort by.
        - name: sortOrder
          in: query
          required: false
          schema:
            type: string
            enum:
              - asc
              - desc
              - ASC
              - DESC
            default: DESC
          description: Sort direction.
      responses:
        '200':
          description: Paginated products returned successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    required:
                      - data
                      - total
                      - page
                      - limit
                      - totalPages
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/PublicProduct'
                      total:
                        type: integer
                        example: 125
                      page:
                        type: integer
                        example: 1
                      limit:
                        type: integer
                        example: 50
                      totalPages:
                        type: integer
                        example: 3
                  meta:
                    $ref: '#/components/schemas/ResponseMeta'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitedError'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    PublicProduct:
      type: object
      properties:
        id:
          type: integer
          example: 1001
        sku:
          type: string
          nullable: true
          example: TSHIRT-BLACK-M
        spu:
          type: string
          nullable: true
          example: TSHIRT
        title:
          type: string
          nullable: true
          example: Classic T-Shirt - Black / M
        description:
          type: string
          nullable: true
        price:
          type: number
          nullable: true
          description: Product sale price or configured catalog price, when present.
        design_link:
          type: string
          nullable: true
          description: Design asset link configured for fulfillment operations.
        tags:
          type: array
          nullable: true
          items:
            type: string
        images:
          type: array
          nullable: true
          items:
            type: string
        videos:
          type: array
          nullable: true
          items:
            type: string
        stores:
          type: array
          nullable: true
          items:
            type: string
        platforms:
          type: array
          nullable: true
          items:
            type: string
        labels:
          type: array
          nullable: true
          items:
            type: string
        sizes:
          type: array
          nullable: true
          items:
            type: string
        organization_id:
          type: integer
          description: Authenticated organization that owns the product.
        created_at:
          type: string
          format: date-time
          nullable: true
        updated_at:
          type: string
          format: date-time
          nullable: true
    ResponseMeta:
      type: object
      properties:
        request_id:
          type: string
          description: Request identifier, when available.
  responses:
    UnauthorizedError:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            type: object
            required:
              - success
              - error
            properties:
              success:
                type: boolean
                example: false
              error:
                type: object
                required:
                  - code
                  - message
                properties:
                  code:
                    type: string
                    example: unauthorized
                  message:
                    type: string
                    example: Missing or invalid API key.
              meta:
                $ref: '#/components/schemas/ResponseMeta'
    ForbiddenError:
      description: API key lacks the required scope.
      content:
        application/json:
          schema:
            type: object
            required:
              - success
              - error
            properties:
              success:
                type: boolean
                example: false
              error:
                type: object
                required:
                  - code
                  - message
                properties:
                  code:
                    type: string
                    example: missing_scope
                  message:
                    type: string
                    example: Missing required scope.
              meta:
                $ref: '#/components/schemas/ResponseMeta'
    RateLimitedError:
      description: Rate limit exceeded.
      content:
        application/json:
          schema:
            type: object
            required:
              - success
              - error
            properties:
              success:
                type: boolean
                example: false
              error:
                type: object
                required:
                  - code
                  - message
                properties:
                  code:
                    type: string
                    example: rate_limited
                  message:
                    type: string
                    example: Rate limit exceeded.
              meta:
                $ref: '#/components/schemas/ResponseMeta'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Sellfern public API key scoped to the authenticated organization. Do not
        use user JWTs for public integrations.

````