Webflow Products and SKUs API
The Webflow Products and SKUs API provides endpoints for managing ecommerce products and their SKU variants, including creating, listing, updating products and creating or updating SKUs.
The Webflow Products and SKUs API provides endpoints for managing ecommerce products and their SKU variants, including creating, listing, updating products and creating or updating SKUs.
openapi: 3.1.0
info:
title: Webflow Products and SKUs API
description: Webflow Data API v2 - Products and SKUs endpoints.
version: 2.0.0
contact:
name: Webflow Developer Relations
email: [email protected]
url: https://developers.webflow.com
termsOfService: https://webflow.com/legal/terms
license:
name: MIT
url: https://opensource.org/licenses/MIT
servers:
- url: https://api.webflow.com/v2
description: Webflow API v2
x-fern-server-name: Data API
security:
- OAuth2: []
- ApiKey: []
tags:
- name: Products & SKUs
description: Products & SKUs are the products and SKUs in your Webflow e-commerce site.
paths:
/sites/{site_id}/products:
get:
x-fern-sdk-group-name: products
x-fern-sdk-method-name: list
security:
- OAuth2:
- ecommerce:read
operationId: list-products
summary: Webflow List Products & SKUs
description: 'Retrieve all products for a site.
Use `limit` and `offset` to page through all products with subsequent requests. All SKUs for each product
will also be fetched and returned. The `limit`, `offset` and `total` values represent Products only and do not include any SKUs.
Required scope | `ecommerce:read`
'
tags:
- Products & SKUs
parameters:
- name: site_id
in: path
description: Unique identifier for a Site
example: 580e63e98c9a982ac9b8b741
required: true
schema:
type: string
format: objectid
default:
- in: query
example: 0
allowEmptyValue: true
name: offset
description: Offset used for pagination if the results have more than limit records
required: false
schema:
type: integer
- in: query
allowEmptyValue: true
name: limit
example: 100
description: 'Maximum number of records to be returned (max limit: 100)'
required: false
schema:
type: integer
responses:
'200':
description: Request was successful
content:
application/json:
schema:
description: Results from product list
type: object
properties:
items:
type: array
description: List of Item objects within the Collection. Contains product and skus keys for each Item
items:
description: A product and its SKUs.
type: object
properties:
product:
description: The Product object
type: object
example:
id: 660eb7a486d1d6e0412292d7
cmsLocaleId: 653ad57de882f528b32e810e
lastPublished: '2024-04-04T14:24:19.467Z'
lastUpdated: '2024-04-04T14:30:19.282Z'
createdOn: '2024-04-04T14:22:28.547Z'
isArchived: false
isDraft: false
fieldData:
tax-category: standard-taxable
shippable: true
ec-product-type: b6ccc1830db4b1babeb06a9ac5f6dd76
sku-properties:
- id: 31b77fa66fa376c2c0abb458d5be39fb
name: Size
enum:
- id: 8d21a625d655ab260e9941c27180c75b
name: Small
slug: small
- id: ecdca17106ad86c0dfe3b5f3ac8be6c9
name: Medium
slug: medium
- id: ec7877d6137ecf7ec86f726c135b1812
name: Large
slug: large
- id: 74d3738e62c568d5634dd6989daec5ec
name: Color
enum:
- id: e539b0d6c3a609cd06ddb2da804f68f0
name: Royal Blue
slug: royal-blue
- id: 68d98f2fbafc0fd45651cddc44798dd0
name: Crimson Red
slug: crimson-red
- id: 996cd95c97fd5620d0a374c835b37205
name: Forrest Green
slug: forrest-green
name: T-Shirt
description: A plain t-shirt
slug: t-shirt
default-sku: 66072fb71b89448912e2681c
properties:
id:
type: string
readOnly: true
description: Unique identifier for the Product
example: 580e63fc8c9a982ac9b8b745
cmsLocaleId:
type: string
readOnly: true
example: 653ad57de882f528b32e810e
description: Identifier for the locale of the CMS item
lastPublished:
type: string
format: date-time
readOnly: true
description: The date the Product was last published
example: '2023-03-17T18:47:35.560Z'
lastUpdated:
type: string
format: date-time
readOnly: true
description: The date the Product was last updated
example: '2023-03-17T18:47:35.560Z'
createdOn:
type: string
format: date-time
readOnly: true
description: The date the Product was created
example: '2023-03-17T18:47:35.560Z'
isArchived:
type: boolean
default: false
description: Boolean determining if the Product is set to archived
example: false
isDraft:
type: boolean
default: false
description: Boolean determining if the Product is set to draft
example: false
fieldData:
description: Contains content-specific details for a product, covering both standard (e.g., title, description) and custom fields tailored to the product setup.
type: object
properties:
name:
type: string
description: Name of the Product
example: T-Shirt
slug:
type: string
description: URL structure of the Product in your site.
example: t-shirt
description:
type: string
description: A description of your product
example: A plain cotton t-shirt.
shippable:
type: boolean
description: Boolean determining if the Product is shippable
example: true
sku-properties:
type: array
description: Variant types to include in SKUs
items:
type: object
description: A variant/option type for a SKU
required:
- id
- name
- enum
properties:
id:
type: string
description: Unique identifier for a collection of Product Variants
default:
example: Color
name:
type: string
description: Name of the collection of Product Variants
example: Color
enum:
description: The individual Product variants that are contained within the collection
type: array
items:
description: Enumerated Product variants/Options for the SKU
type: object
required:
- id
- name
- slug
properties:
id:
type: string
description: Unique identifier for a Product variant/Option
default:
examples:
- royal-blue
- crimson-red
- forrest-green
name:
type: string
description: Name of the Product variant/Option
examples:
- Royal Blue
- Crimson Red
- Forrest Green
slug:
type: string
description: Slug for the Product variant/Option in the Site URL structure
examples:
- royal-blue
- crimson-red
- forrest-green
category:
type: array
description: The category your product belongs to.
items:
type: string
tax-category:
type: string
description: Product tax class
enum:
- standard-taxable
- standard-exempt
- books-religious
- books-textbook
- clothing
- clothing-swimwear
- digital-goods
- digital-service
- drugs-non-prescription
- drugs-prescription
- food-bottled-water
- food-candy
- food-groceries
- food-prepared
- food-soda
- food-supplements
- magazine-individual
- magazine-subscription
- service-admission
- service-advertising
- service-dry-cleaning
- service-hairdressing
- service-installation
- service-miscellaneous
- service-parking
- service-printing
- service-professional
- service-repair
- service-training
default-sku:
type: string
format: objectid
description: The default SKU associated with this product.
ec-product-type:
description: '<a href="https://university.webflow.com/lesson/add-and-manage-products-and-categories?topics=ecommerce#how-to-understand-product-types">Product types.</a> Enums reflect the following values in order: Physical, Digital, Service, Advanced"'
type: string
enum:
- ff42fee0113744f693a764e3431a9cc2
- f22027db68002190aef89a4a2b7ac8a1
- c599e43b1a1c34d5a323aedf75d3adf6
- b6ccc1830db4b1babeb06a9ac5f6dd76
additionalProperties:
type: string
description: Custom fields for your product.
skus:
description: A list of SKU Objects
type: array
items:
description: The SKU object
type: object
properties:
id:
type: string
readOnly: true
format: objectid
description: Unique identifier for the Product
example: 580e63fc8c9a982ac9b8b745
cmsLocaleId:
type: string
readOnly: true
example: 653ad57de882f528b32e810e
description: Identifier for the locale of the CMS item
lastPublished:
type: string
format: date-time
readOnly: true
description: The date the Product was last published
example: '2023-03-17T18:47:35.560Z'
lastUpdated:
type: string
format: date-time
readOnly: true
description: The date the Product was last updated
example: '2023-03-17T18:47:35.560Z'
createdOn:
type: string
format: date-time
readOnly: true
description: The date the Product was created
example: '2023-03-17T18:47:35.560Z'
fieldData:
description: Standard and Custom fields for a SKU
type: object
required:
- name
- slug
- price
properties:
sku-values:
type: object
description: 'A mapping between SKU properties and their values, represented as key-value pairs. Each key represents a SKU Property ID (e.g. "color") and maps to its corresponding SKU Value ID (e.g. "blue"). This structure defines the specific variant combination for a SKU.
'
additionalProperties:
type: string
example:
color: blue
size: small
name:
type: string
description: Name of the Product
example: Blue T-shirt
slug:
type: string
description: URL structure of the Product in your site.
example: t-shirt-blue
price:
type: object
description: price of SKU
properties:
value:
description: Price of SKU
isRequired: true
type: number
example: 2499
unit:
type: string
isRequired: true
description: Currency of Item
example: USD
currency:
type: string
description: Currency of Item (alternative representation)
example: USD
compare-at-price:
type: object
description: comparison price of SKU
properties:
value:
description: Price of SKU
type: number
example: 100
unit:
type: string
description: Currency of Item
example: USD
ec-sku-billing-method:
description: '[Billing method](https://help.webflow.com/hc/en-us/articles/33961432087955-Add-and-manage-products-and-categories#billing-methods)for the SKU'
type: string
enum:
- one-time
- subscription
ec-sku-subscription-plan:
description: '[Subscription plan](https://help.webflow.com/hc/en-us/articles/33961432087955-Add-and-manage-products-and-categories#subscription) for the SKU'
type: object
properties:
interval:
type: string
description: Interval of subscription renewal
enum:
- day
- week
- month
- year
frequency:
type: number
description: Frequncy of billing within interval
example: 1
trial:
type: number
description: Number of days of a trial
example: 7
plans:
readOnly: true
type: array
items:
type: object
properties:
platform:
type: string
enum:
- stripe
description: The platform of the subscription plan
id:
type: string
description: The unique identifier of the plan
status:
type: string
enum:
- active
- inactive
- canceled
description: The status of the plan
main-image:
type: string
description: The URL for the main image of the SKU
example: https://www.example.com/image.jpg
sku:
type: string
description: A unique identifier for the SKU
example: '1234567890'
sku-properties:
type: array
description: The properties of the SKU
items:
type: object
description: A variant/option type for a SKU
required:
- id
- name
- enum
properties:
id:
type: string
description: Unique identifier for a collection of Product Variants
default:
example: Color
name:
type: string
description: Name of the collection of Product Variants
example: Color
enum:
description: The individual Product variants that are contained within the collection
type: array
items:
description: Enumerated Product variants/Options for the SKU
type: object
required:
- id
- name
- slug
properties:
id:
type: string
description: Unique identifier for a Product variant/Option
default:
examples:
- royal-blue
- crimson-red
- forrest-green
name:
type: string
description: Name of the Product variant/Option
examples:
- Royal Blue
- Crimson Red
- Forrest Green
slug:
type: string
description: Slug for the Product variant/Option in the Site URL structure
examples:
- royal-blue
- crimson-red
- forrest-green
additionalProperties:
type: string
description: Custom fields for your SKU.
example:
id: 66072fb71b89448912e2681c
cmsLocaleId: 653ad57de882f528b32e810e
lastPublished: '2023-03-17T18:47:35.560Z'
lastUpdated: '2023-03-17T18:47:35.560Z'
createdOn: '2023-03-17T18:47:35.560Z'
fieldData:
name: Colorful T-shirt - Default
slug: colorful-t-shirt-default
price:
value: 2499
currency: USD
unit: USD
sku-values:
color: red
size: small
main-image: https://rocketamp-sample-store.myshopify.com/cdn/shop/products/Gildan_2000_Antique_Cherry_Red_Front_1024x1024.jpg?v=1527232987
pagination:
description: Pagination object
type: object
required:
- limit
- offset
- total
properties:
limit:
type: integer
description: The limit used for pagination
example: 100
readOnly: true
offset:
type: integer
description: The offset used for pagination
example: 0
readOnly: true
total:
type: integer
description: The total number of records
example: 100
readOnly: true
'400':
description: Validation failure
x-logErrorCode: 400
content:
application/json:
schema:
type: object
example:
code: not_authorized
message: Request not authorized
externalReference:
details: []
properties:
code:
type: string
description: Error code
example: not_authorized
enum:
- bad_request
- collection_not_found
- conflict
- duplicate_collection
- duplicate_user_email
- ecommerce_not_enabled
- forbidden
- forms_require_republish
- incompatible_webhook_filter
- internal_error
- invalid_auth_version
- invalid_credentials
- invalid_domain
- invalid_user_email
- item_not_found
- missing_scopes
- no_domains
- not_authorized
- not_enterprise_plan_site
- not_enterprise_plan_workspace
- order_not_found
- resource_not_found
- too_many_requests
- unsupported_version
- unsupported_webhook_trigger_type
- user_limit_reached
- user_not_found
- users_not_enabled
- validation_error
message:
type: string
description: Error message
example: Request not authorized
externalReference:
type: string
description: Link to more information
example: ''
details:
type: array
description: Array of errors
items:
- type: string
example: Invalid email address
description: Error message
- type: object
example:
field: email
message: Invalid email address
description: Error message
example: []
example:
code: validation_error
message: 'Validation Error: Provided ID is invalid'
externalReference:
details: []
'401':
description: Provided access token is invalid or does not have access to requested resource
x-logErrorCode: 401
content:
application/json:
schema:
type: object
example:
code: not_authorized
message: Request not authorized
externalReference:
details: []
properties:
code:
type: string
description: Error code
example: not_authorized
enum:
- bad_request
- collection_not_found
- conflict
- duplicate_collection
- duplicate_user_email
- ecommerce_not_enabled
- forbidden
- forms_require_republish
- incompatible_webhook_filter
- internal_error
# --- truncated at 32 KB (297 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/webflow/refs/heads/main/openapi/webflow-products-openapi.yml