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

# Bulk import products

> Import multiple products at once. Creates new products or updates existing ones.

**Matching Logic:**
1. If `uuid` is provided, updates the existing product with that UUID
2. If `sku` matches an existing product (and no uuid), updates that product
3. Otherwise, creates a new product

**Validation:**
All rows are validated before any changes are made. If any validation errors occur,
no products are created or updated.

**Limits:**
- Maximum 1000 products per request
- Products not included in the import are NOT affected (no auto-archiving)




## OpenAPI

````yaml /api-reference/openapi.yaml post /products/import
openapi: 3.0.3
info:
  title: Streamlined API
  description: >
    Access customers, customer applications, customer groups, products, payouts,
    invoices, transactions, and deposit links programmatically through this API,
    and receive webhooks when deposit links change. All requests must be
    authenticated with an API key.
  version: 1.6.0
  license:
    name: Proprietary
    url: https://streamlinedpayments.com/terms
servers:
  - url: https://api.staging.streamlinedpayments.com/api/v1
    description: Sandbox
  - url: https://api.streamlinedpayments.com/api/v1
    description: Production
security:
  - AppIdAuth: []
    ApiKeyAuth: []
tags:
  - name: Customers
    description: Create, update and delete the businesses you sell to.
  - name: Customer applications
    description: >-
      List the applications your customers submit, and approve them. Approving
      can also set net terms and export the customer to Shopify. See [Approve
      customer applications](/guides/customer-applications).
  - name: Customer groups
    description: >-
      Organize customers into groups and manage who's in each one. A group can
      be linked to a Shopify B2B company.
  - name: Customer files
    description: Upload and manage files attached to a customer.
  - name: Customer addresses
    description: Manage a customer's addresses and choose their default billing address.
  - name: Orders
    description: Create orders, add and remove line items, and schedule them.
  - name: Invoices
    description: Create invoices from orders, then list, look up and update them.
  - name: Transactions
    description: List transactions and look one up.
  - name: Payouts
    description: List payouts, including pending ones, and look one up.
  - name: Products
    description: >-
      Create and update the products and services you sell, import them in bulk,
      and merge duplicates.
  - name: Deposit links
    description: Collect money from a customer before an invoice exists.
  - name: Webhooks
    description: >-
      Register HTTPS endpoints to receive events when something changes. See
      [Webhooks](/guides/webhooks) for signatures, retries and delivery
      guarantees.
paths:
  /products/import:
    post:
      tags:
        - Products
      summary: Bulk import products
      description: >
        Import multiple products at once. Creates new products or updates
        existing ones.


        **Matching Logic:**

        1. If `uuid` is provided, updates the existing product with that UUID

        2. If `sku` matches an existing product (and no uuid), updates that
        product

        3. Otherwise, creates a new product


        **Validation:**

        All rows are validated before any changes are made. If any validation
        errors occur,

        no products are created or updated.


        **Limits:**

        - Maximum 1000 products per request

        - Products not included in the import are NOT affected (no
        auto-archiving)
      operationId: importProducts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - products
              properties:
                on_duplicate:
                  type: string
                  enum:
                    - update
                    - skip
                  default: update
                  description: |
                    Behavior when a product matches by SKU:
                    - `update`: Update the existing product
                    - `skip`: Skip and leave the existing product unchanged
                products:
                  type: array
                  maxItems: 1000
                  items:
                    type: object
                    required:
                      - name
                    properties:
                      uuid:
                        type: string
                        nullable: true
                        description: >-
                          If provided, updates existing product. If
                          null/omitted, creates new or matches by SKU.
                      name:
                        type: string
                        description: Product name (required)
                      description:
                        type: string
                        nullable: true
                        description: Product description
                      sku:
                        type: string
                        nullable: true
                        description: >-
                          Stock keeping unit. Used for matching if no UUID
                          provided.
                      unit:
                        type: string
                        nullable: true
                        enum:
                          - each
                          - hour
                          - day
                          - week
                          - month
                          - lb
                          - kg
                          - ft
                          - m
                          - sqft
                          - sqm
                        description: Unit of measure
                      default_unit_price:
                        type: integer
                        nullable: true
                        description: Default price in cents (e.g., 1999 = $19.99)
                      currency:
                        type: string
                        nullable: true
                        enum:
                          - USD
                          - CAD
                          - EUR
                          - GBP
                          - AUD
                        description: Currency code. Defaults to company currency.
            examples:
              CreateAndUpdate:
                summary: Create new and update existing products
                value:
                  on_duplicate: update
                  products:
                    - uuid: null
                      name: New Product
                      description: A new product
                      sku: SKU001
                      unit: each
                      default_unit_price: 1999
                      currency: USD
                    - uuid: abc-123-def
                      name: Updated Product
                      sku: SKU002
      responses:
        '200':
          description: Import successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  summary:
                    type: object
                    properties:
                      created:
                        type: integer
                        description: Number of products created
                      updated:
                        type: integer
                        description: Number of products updated
                      skipped:
                        type: integer
                        description: Number of products skipped (when on_duplicate is skip)
                  products:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                        name:
                          type: string
                        status:
                          type: string
                          enum:
                            - created
                            - updated
                            - skipped
              example:
                success: true
                summary:
                  created: 5
                  updated: 10
                  skipped: 2
                products:
                  - uuid: new-uuid-1
                    name: Product 1
                    status: created
                  - uuid: abc-123
                    name: Product 2
                    status: updated
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          description: Validation errors
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        row:
                          type: integer
                          nullable: true
                          description: 0-indexed row number, or null for general errors
                        field:
                          type: string
                          nullable: true
                          description: Field name with error, or null for general errors
                        message:
                          type: string
                          description: Error message
              examples:
                ValidationErrors:
                  value:
                    success: false
                    errors:
                      - row: 0
                        field: name
                        message: Name is required
                      - row: 2
                        field: unit
                        message: >-
                          Invalid unit 'pieces'. Valid: each, hour, day, week,
                          month, lb, kg, ft, m, sqft, sqm
                LimitExceeded:
                  value:
                    success: false
                    errors:
                      - row: null
                        field: null
                        message: Maximum 1000 products per import
components:
  responses:
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            AuthenticationRequired:
              value:
                error: Authentication required
                message: >-
                  API endpoint requires authentication. Please provide valid
                  X-App-Id and X-Api-Key headers.
            InvalidCredentials:
              value:
                error: Invalid credentials
                message: >-
                  The provided API credentials are invalid. Please check your
                  X-App-Id and X-Api-Key values.
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
  securitySchemes:
    AppIdAuth:
      type: apiKey
      in: header
      name: X-App-Id
      description: App ID for authentication
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API Key for authentication

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.