Shopware Product API
Create, read, update, and delete products and variants
Create, read, update, and delete products and variants
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