Snipcart Products API

Manage product catalog and inventory

OpenAPI Specification

snipcart-products-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Snipcart REST AbandonedCarts Products API
  description: 'The Snipcart REST API provides programmatic access to your store''s data including orders, customers, products, discounts, notifications, abandoned carts, domains, refunds, user sessions, and custom shipping methods. Authentication uses HTTP Basic Auth with a secret API key generated from the merchant dashboard. All requests must include an Accept: application/json header.

    '
  version: '3.0'
  contact:
    name: Snipcart Support
    url: https://snipcart.com
  license:
    name: Proprietary
    url: https://snipcart.com/terms-of-service
servers:
- url: https://app.snipcart.com/api
  description: Snipcart API
security:
- basicAuth: []
tags:
- name: Products
  description: Manage product catalog and inventory
paths:
  /products:
    get:
      summary: List products
      operationId: listProducts
      description: Returns a list of products with options to filter by date range and sort by sales metrics.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - name: from
        in: query
        schema:
          type: string
          format: date-time
      - name: to
        in: query
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: Paginated list of products
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/PaginatedResponse'
                - type: object
                  properties:
                    items:
                      type: array
                      items:
                        $ref: '#/components/schemas/Product'
    post:
      summary: Fetch and create product
      operationId: fetchProduct
      description: Fetches the URL passed in parameter and generates products found on the page (HTML buttons or JSON definitions).
      tags:
      - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - fetchUrl
              properties:
                fetchUrl:
                  type: string
                  format: uri
                  description: URL of page containing product definitions
      responses:
        '200':
          description: Created or updated product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
  /products/{id}:
    get:
      summary: Get product
      operationId: getProduct
      description: Retrieves a product by its identifier (Snipcart-generated or user-defined ID).
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/productId'
      responses:
        '200':
          description: Product details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '404':
          description: Product not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      summary: Update product
      operationId: updateProduct
      description: Updates specific product attributes, particularly inventory values such as stock levels.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/productId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                stock:
                  type: integer
                allowOutOfStockPurchases:
                  type: boolean
      responses:
        '200':
          description: Updated product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
    delete:
      summary: Archive product
      operationId: archiveProduct
      description: Archives the product, removing it from listings. Automatically restored if added to a cart again.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/productId'
      responses:
        '200':
          description: Product archived successfully
        '404':
          description: Product not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Product:
      type: object
      properties:
        id:
          type: string
        userDefinedId:
          type: string
        name:
          type: string
        price:
          type: number
          format: float
        url:
          type: string
          format: uri
        description:
          type: string
        stock:
          type: integer
          description: Available stock quantity
        allowOutOfStockPurchases:
          type: boolean
        totalSales:
          type: integer
    PaginatedResponse:
      type: object
      properties:
        totalItems:
          type: integer
        offset:
          type: integer
        limit:
          type: integer
        items:
          type: array
          items:
            type: object
    Error:
      type: object
      properties:
        message:
          type: string
        details:
          type: array
          items:
            type: string
  parameters:
    productId:
      name: id
      in: path
      required: true
      description: Unique product identifier
      schema:
        type: string
    limit:
      name: limit
      in: query
      required: false
      description: Number of results to return per page
      schema:
        type: integer
        default: 25
    offset:
      name: offset
      in: query
      required: false
      description: Zero-based offset for pagination
      schema:
        type: integer
        default: 0
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'Use your secret API key as the username with an empty password. Base64-encode as {API_KEY}: and pass as Authorization: Basic {encoded}.

        '