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:

  1. Create Product - A default variant is automatically created
    • Response includes default_variant_id
  2. Create Product Price - Associate price with the default variant
    • Pass the variant_id when creating the price

Full Workflow (Multiple Variants)

If your integration needs to support multiple variants:

  1. Create Product - Get the product and default variant
  2. Create Additional Product Variants - Add more variants as needed
    • Pass product_id and fulfillment_location_ids
    • Note: You can also update variants later using the Update Variant endpoint
  3. Create Product Prices - Create prices for each variant
    • Pass the variant_id when creating each price

Fulfillment Location Setup

When a customer first connects to ClickFunnels:

  1. Create Fulfillment Location - Represents where products ship from
  2. Track the Location ID - Use this when creating/updating variants
  3. Assign to Variants - Pass fulfillment_location_ids when 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 id in 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 name is 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: