Products
ClickFunnels Product API Integration Guide
The Product data model allows you create sellable products in your ClickFunnels workspace.
This guide covers the essential workflows for creating products, variants, prices, and fulfillments in ClickFunnels via the REST API. This information is particularly relevant for third-party integrations that handle products, fulfillments and orders (like Shopify, Zendrop, etc.).
The data model is best first explored in the UI before diving into implementation:

Key Concepts
Product Hierarchy
ClickFunnels follows this data model:
- Product - The top-level entity
- Product Variant - Each product has one or more variants (a default variant is created automatically)
- Product Price - Pricing information associated with a specific variant
- Fulfillment Location - Where products are fulfilled from (required for physical product fulfillment)
You can have multiple variants per product and multiple prices per variant including the default variant.
Important Implementation Details
Track Variant IDs, Not Product IDs
When integrating with external systems, you should track the variant_id (or default_variant_id) returned from the API. This is what you'll reference when creating prices, fulfillments and order line items.
Default Variant Auto-Creation
Every product automatically gets a default variant upon creation. You cannot skip this creation. The default_variant_id will be included in the product creation response.
Creation Workflows
There are several ways of creating and updating products. The final implementation will depend on your needs.
Simplified Workflow (Single Variant)
For integrations that only support a single variant per product:
- Create Product - A default variant is automatically created
- Response includes default_variant_id
 
- Response includes 
- Create Product Price - Associate price with the default variant
- Pass the variant_idwhen creating the price
 
- Pass the 
Full Workflow (Multiple Variants)
If your integration needs to support multiple variants:
- Create Product - Get the product and default variant
- Create Additional Product Variants - Add more variants as needed
- Pass product_idandfulfillment_location_ids
- Note: You can also update variants later using the Update Variant endpoint
 
- Pass 
- Create Product Prices - Create prices for each variant
- Pass the variant_idwhen creating each price
 
- Pass the 
Fulfillment Location Setup
When a customer first connects to ClickFunnels:
- Create Fulfillment Location - Represents where products ship from
- Track the Location ID - Use this when creating/updating variants
- Assign to Variants - Pass fulfillment_location_idswhen creating variants (or update later)
Product Properties
Products can have custom properties (size, color, etc.) that define variant differences. To understand how these work:
- Explore the product creation UI in ClickFunnels
- Check how property values and IDs are managed
- Reference the API documentation for the correct attribute structure

Working with Properties
Creating a Product with Variant Properties
When creating a product, you can define properties that will be used to differentiate variants (e.g., Size, Color, Material).
Request Example:
POST /api/v2/workspaces/{workspace_id}/products
{
  "product": {
    "name": "T-Shirt",
    "variant_properties": [
      { "name": "Size" },
      { "name": "Color" }
    ]
  }
}
Response Example:
{
  "id": 12345,
  "name": "T-Shirt",
  "default_variant_id": 67890,
  "variant_ids": [67890],
  "variant_properties": [
    { "id": 100, "name": "Size" },
    { "id": 101, "name": "Color" }
  ],
  "created_at": "2025-10-30T10:00:00Z",
  "updated_at": "2025-10-30T10:00:00Z"
}
Important Notes:
- Properties are defined at the product level
- Each property gets an idin the response that you'll use when creating variants
- The order of properties in the array determines their sort_order
Creating a Variant with Property Values
When creating a non-default variant, you must provide values for ALL properties defined on the product.
Request Example:
POST /api/v2/products/{product_id}/variants
{
  "products_variant": {
    "product_id": 12345,
    "properties_values": [
      { "property_id": 100, "value": "Large" },
      { "property_id": 101, "value": "Red" }
    ],
    "fulfillment_location_ids": [5555]
  }
}
Response Example:
{
  "id": 67891,
  "product_id": 12345,
  "name": "T-Shirt - Large / Red",
  "default": false,
  "properties_values": [
    { "property_id": 100, "value": "Large" },
    { "property_id": 101, "value": "Red" }
  ],
  "fulfillment_location_ids": [5555],
  "price_ids": [],
  "created_at": "2025-10-30T10:05:00Z",
  "updated_at": "2025-10-30T10:05:00Z"
}
Important Notes:
- You must provide a value for EVERY property defined on the product
- The variant nameis automatically generated from the property values
- Default variants do not have properties_values(they inherit from the product)
- Property values are case-insensitive and whitespace is normalized
Updating Product Properties
You can update product properties, but be aware:
- You cannot remove a property that has multiple values assigned across variants (this would delete variants)
- When updating properties, include all properties you want to keep with their IDs
Request Example:
PATCH /api/v2/products/{product_id}
{
  "product": {
    "variant_properties": [
      { "id": 100, "name": "Size" },
      { "id": 101, "name": "Color" },
      { "name": "Material" }
    ]
  }
}
This adds a new "Material" property while keeping the existing Size and Color properties.
Relevant Docs
Creating a Product:
See: Create Products API
Adding Variants:
See: Create Product Variants API
Setting Prices:
See: Create Product Prices API
Creating Fulfillment Locations:
See: Create Fulfillment Locations API
Creating Fulfillments:
Updated about 18 hours ago