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

# Get base products

> Returns a paginated list of base products (product templates) used for
swag experiences. Page-number pagination (`page[number]`, `page[size]`).

The brand filter for base products is named `brandIds` (the JSON:API
`filter[brandId]` family is not yet applied to base products).




## OpenAPI

````yaml get /v3/base-products
openapi: 3.0.3
info:
  title: Snappy Public API v3
  version: 3.0.0
  contact:
    name: Snappy Support
    email: info@snappy.com
  description: >-
    Welcome to the Snappy API reference documentation!

    You can use this API to integrate with Snappy and spread smiles to your
    employees/clients/customers and much more.

    So let's get started!
servers:
  - url: https://api.snappy.com/public-api
    description: Base API URL
  - url: https://mtls-api.snappy.com/public-api
    description: >-
      ## mTLS URL

      You can also use mTLS to enhance your API security. To get your specific
      certificates please contact our support.

      Once you configure the certificated correctly, you need to also update
      endpoints to use the following secure api base URL:
security:
  - apiKeyAuth: []
tags:
  - name: Base Products
    description: Browse and retrieve base products and base variants (swag).
paths:
  /v3/base-products:
    get:
      tags:
        - Base Products
      summary: List base products
      description: |
        Returns a paginated list of base products (product templates) used for
        swag experiences. Page-number pagination (`page[number]`, `page[size]`).

        The brand filter for base products is named `brandIds` (the JSON:API
        `filter[brandId]` family is not yet applied to base products).
      operationId: listBaseProducts
      parameters:
        - $ref: '#/components/parameters/BaseBrandIds'
        - $ref: '#/components/parameters/BaseFields'
        - $ref: '#/components/parameters/PageNumber'
        - $ref: '#/components/parameters/BaseProductPageSize'
      responses:
        '200':
          description: Paginated list of base products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseProductListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  parameters:
    BaseBrandIds:
      name: brandIds
      in: query
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
      description: |
        Exact filter by brand id(s). Comma-separated.
    BaseFields:
      name: fields
      in: query
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
      description: |
        Optional base-product/base-variant field expansions. Comma-separated.
    PageNumber:
      name: page[number]
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
      description: 1-indexed page number for page-number paginated endpoints.
    BaseProductPageSize:
      name: page[size]
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 40
      description: Number of base products per page (max 100, default 40).
  schemas:
    BaseProductListResponse:
      type: object
      description: Paginated base product list response.
      required:
        - data
        - links
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/BaseProduct'
        links:
          $ref: '#/components/schemas/PaginationLinks'
    BaseProduct:
      type: object
      description: |
        Base product (swag template). Minimal shape - extended schema to be
        finalized as the swag track lands.
      required:
        - id
        - title
        - media
        - category
        - type
      properties:
        id:
          type: string
          example: bp_a1b2c3
        title:
          type: string
        media:
          type: array
          items:
            $ref: '#/components/schemas/Media'
        category:
          $ref: '#/components/schemas/Category'
        type:
          $ref: '#/components/schemas/ProductType'
        brand:
          allOf:
            - $ref: '#/components/schemas/Brand'
          nullable: true
    PaginationLinks:
      type: object
      description: |
        Top-level JSON:API-style pagination links for paginated list
        responses. `first` is always present. `next` is `null` on the final
        page. `prev` is `null` on the first page (and on cursor-paginated
        endpoints where backward navigation is not supported).
      required:
        - first
        - next
        - prev
      properties:
        first:
          type: string
          nullable: true
          description: Link to the first page.
          example: /v3/collections/abc/products?page[size]=100
        next:
          type: string
          nullable: true
          description: Link to the next page, or `null` if no further pages.
          example: >-
            /v3/collections/abc/products?page[cursor]=cursor_abc123&page[size]=100
        prev:
          type: string
          nullable: true
          description: Link to the previous page, or `null` when not applicable.
    ErrorResponse:
      type: object
      description: |
        Standard error envelope. `errorCode` follows the
        `{status}_{DOMAIN}_{sequence}` format. `errors[]` lists field-level
        details with dot-separated paths (e.g. `query.filter[price][gte]`,
        `path.collectionId`).
      required:
        - status
        - errorCode
        - message
        - errors
      properties:
        status:
          type: integer
          example: 404
        errorCode:
          type: string
          example: 404_PROD_001
        message:
          type: string
          example: Product Not Found
        errors:
          type: array
          items:
            type: object
            required:
              - errorCode
              - message
              - path
            properties:
              errorCode:
                type: string
                example: 404_PROD_001
              message:
                type: string
                example: Product with id 'q1w2e3r4t5' was not found
              path:
                type: string
                description: Dot-separated path to the field that caused the error.
                example: path.productId
    Media:
      type: object
      description: |
        A media item. For images, `src` is on the media CDN
        (`https://media.snappy.com`) and accepts `w`, `h`, `q`, `f` query
        parameters. For videos, `src` is returned as-is.

        First-version limitation: only square images (`w === h`) are
        supported. Default resolution is 1000×1000.
      required:
        - type
        - src
      properties:
        type:
          type: string
          enum:
            - image
            - video
          example: image
        src:
          type: string
          format: uri
          example: https://media.snappy.com/image/asset123?w=1000&h=1000&q=80&f=auto
    Category:
      type: object
      required:
        - fullName
      properties:
        fullName:
          type: string
          description: Full taxonomy path separated by " / ".
          example: gifts / electronics / iphones
    ProductType:
      type: string
      description: |
        Product type. Used both as the value of `Product.type` and as the
        filter value for `filter[type]`.
      enum:
        - physical
        - digital
        - giftCard
        - donation
      example: physical
    Brand:
      type: object
      description: >-
        Product brand. May be `null` (per the parent property) when no brand
        applies.
      required:
        - id
        - name
        - description
      properties:
        id:
          type: string
          example: 621f9d4b1e675adcbc196159
        name:
          type: string
          example: Apple
        description:
          type: string
          nullable: true
          example: Cute pet brand
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Partner API key. Finalized per partner integration agreement.

````