Shopware Product API

Create, read, update, and delete products and variants

OpenAPI Specification

shopware-product-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Shopware Admin Account Product API
  version: 6.7.9999999-dev
  description: The Shopware Admin API provides programmatic access to all back-office and administrative operations including product management, order processing, customer data, indexing, and configuration. It uses OAuth 2.0 authentication and covers 658 endpoints across the full Shopware data model.
  contact:
    name: Shopware Developer Documentation
    url: https://developer.shopware.com/docs/concepts/api/admin-api.html
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://{shopDomain}/api
  description: Self-hosted or SaaS Shopware instance Admin API
  variables:
    shopDomain:
      default: your-shop.example.com
      description: Hostname of the Shopware instance
security:
- oAuth2:
  - write:all
tags:
- name: Product
  description: Create, read, update, and delete products and variants
paths:
  /product:
    get:
      operationId: listProducts
      summary: List products
      description: Returns a paginated list of products with basic information.
      tags:
      - Product
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: Paginated list of products
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createProduct
      summary: Create a product
      description: Creates a new product resource.
      tags:
      - Product
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreate'
      responses:
        '200':
          description: Product created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /product/{id}:
    get:
      operationId: getProduct
      summary: Get a product
      description: Returns a single product by its identifier.
      tags:
      - Product
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{32}$
        description: 32-character hex product ID
      responses:
        '200':
          description: Product detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductResponse'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateProduct
      summary: Update a product
      description: Partially updates a product resource.
      tags:
      - Product
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{32}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreate'
      responses:
        '200':
          description: Product updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductResponse'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteProduct
      summary: Delete a product
      description: Deletes a product by ID.
      tags:
      - Product
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{32}$
      responses:
        '204':
          description: Product deleted
        '404':
          $ref: '#/components/responses/NotFound'
  /search/product:
    post:
      operationId: searchProducts
      summary: Search products
      description: Full-featured product search with filter, sort, aggregation support.
      tags:
      - Product
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchCriteria'
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
  /product/{productId}:
    get:
      operationId: getStoreProduct
      summary: Get a product
      description: Returns a single product by ID including all variants and media.
      tags:
      - Product
      parameters:
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/SwContextToken'
      responses:
        '200':
          description: Product detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductDetailResponse'
        '404':
          description: Product not found
components:
  schemas:
    Price:
      type: object
      description: Currency-specific price entry
      required:
      - currencyId
      - gross
      - net
      - linked
      properties:
        currencyId:
          type: string
          pattern: ^[0-9a-f]{32}$
        gross:
          type: number
          format: float
          description: Gross price (including tax)
        net:
          type: number
          format: float
          description: Net price (excluding tax)
        linked:
          type: boolean
          description: If true, net price is calculated from gross automatically
        listPrice:
          type: object
          description: Original / strike-through price
          properties:
            gross:
              type: number
              format: float
            net:
              type: number
              format: float
            linked:
              type: boolean
    SearchCriteria:
      type: object
      description: Shopware DAL search criteria
      properties:
        page:
          type: integer
          default: 1
        limit:
          type: integer
          default: 25
        filter:
          type: array
          items:
            type: object
        sort:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              order:
                type: string
                enum:
                - ASC
                - DESC
        aggregations:
          type: array
          items:
            type: object
        term:
          type: string
          description: Full-text search term
        includes:
          type: object
          description: Sparse fieldsets per entity
    ProductDetailResponse:
      type: object
      properties:
        product:
          $ref: '#/components/schemas/Product_2'
        configurator:
          type: array
          items:
            type: object
    Product_2:
      type: object
      properties:
        id:
          type: string
        productNumber:
          type: string
        name:
          type: string
        description:
          type: string
        active:
          type: boolean
        cover:
          type: object
          properties:
            id:
              type: string
            url:
              type: string
        calculatedPrice:
          $ref: '#/components/schemas/CalculatedPrice'
        calculatedListingPrice:
          type: object
        availableStock:
          type: integer
    CalculatedPrice:
      type: object
      properties:
        unitPrice:
          type: number
          format: float
        totalPrice:
          type: number
          format: float
        quantity:
          type: integer
        calculatedTaxes:
          type: array
          items:
            type: object
            properties:
              tax:
                type: number
              taxRate:
                type: number
              price:
                type: number
        taxRules:
          type: array
          items:
            type: object
    Product:
      type: object
      description: Shopware product entity (since version 6.0.0.0)
      required:
      - id
      - taxId
      - price
      - productNumber
      - stock
      - name
      properties:
        id:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: Unique identity of the product
        versionId:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: Unique identity of the product version
        parentId:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: Unique identity of the parent product (for variants)
        manufacturerId:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: Unique identity of the manufacturer
        taxId:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: Unique identity of tax
        productNumber:
          type: string
          description: SKU / unique product number
        stock:
          type: integer
          format: int64
          description: Available stock quantity
        name:
          type: string
          description: Product name (translatable)
        description:
          type: string
          description: Long product description (HTML allowed, translatable)
        price:
          type: array
          items:
            $ref: '#/components/schemas/Price'
          description: Currency-specific prices
        active:
          type: boolean
          description: Whether the product is visible in the storefront
        ean:
          type: string
          description: EAN barcode
        markAsTopseller:
          type: boolean
          description: Flag to highlight as a bestseller
        weight:
          type: number
          format: float
          description: Product weight in kg
        width:
          type: number
          format: float
          description: Product width in mm
        height:
          type: number
          format: float
          description: Product height in mm
        length:
          type: number
          format: float
          description: Product length in mm
        isCloseout:
          type: boolean
          description: If true, product cannot be bought when out of stock
        createdAt:
          type: string
          format: date-time
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          readOnly: true
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              status:
                type: string
              title:
                type: string
              detail:
                type: string
    ProductCreate:
      type: object
      description: Payload for creating or updating a product
      required:
      - taxId
      - price
      - productNumber
      - stock
      - name
      properties:
        taxId:
          type: string
          pattern: ^[0-9a-f]{32}$
        productNumber:
          type: string
        stock:
          type: integer
          format: int64
        name:
          type: string
        description:
          type: string
        price:
          type: array
          items:
            $ref: '#/components/schemas/Price'
        active:
          type: boolean
          default: true
    ProductResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Product'
    ProductListResponse:
      type: object
      properties:
        total:
          type: integer
        data:
          type: array
          items:
            $ref: '#/components/schemas/Product'
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Authentication required or token expired
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Validation errors in the request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  parameters:
    SwContextToken:
      name: sw-context-token
      in: header
      description: Customer session context token
      schema:
        type: string
    limit:
      name: limit
      in: query
      description: Maximum number of resources per page (default 25)
      schema:
        type: integer
        default: 25
        maximum: 500
    page:
      name: page
      in: query
      description: Page number (1-based)
      schema:
        type: integer
        default: 1
  securitySchemes:
    oAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: /api/oauth/token
          scopes:
            write:all: Full write access to all Admin API resources
        password:
          tokenUrl: /api/oauth/token
          scopes:
            write:all: Full write access to all Admin API resources
externalDocs:
  description: Full interactive specification (Stoplight)
  url: https://shopware.stoplight.io/docs/admin-api