Skip to main content

List All Products

Retrieve all products for a project with pagination.
string
required
The brand/project ID
number
Page number for pagination (default: 1)
number
Number of results per page (default: 25)
Request
cURL

List All Products (Unpaginated)

Get all products without pagination for dropdown lists.
string
required
The brand/project ID
Request
cURL

Get Product Details

Retrieve details about a specific product.
string
required
The brand/project ID
string
required
The product ID
Request
cURL

Product Fields Reference

  • code - Unique product code/identifier
  • title - Product display name
  • checkout_title - Alternative title for checkout (optional)
  • type - Product type: physical, digital
  • classification - Product classification: main, upsell, downsell, bump, bonus
  • price - Selling price (in currency units)
  • retail_price - Suggested retail/original price
  • units - Number of units included
  • sku - Stock Keeping Unit identifier
  • unit_cost - Cost per unit
  • unit_weight_oz - Weight per unit in ounces
  • fulfillment_cost - Cost to fulfill the order
  • packaging_cost - Packaging cost
  • fuel_surcharge_cost - Fuel surcharge
  • cogs - Cost of Goods Sold
  • physical_units_per_product - Physical units per product
  • fulfillment_multiply_sku - Multiply fulfillment by SKU quantity
  • average_shipping_cost - Average shipping cost
  • image - Product image URL
  • image_link - Full URL to product image
  • product_files - Array of downloadable files attached to the product
  • is_subscription - Whether this is a subscription product
  • subscription_frequency - Billing frequency (e.g., 1, 2, 3)
  • subscription_frequency_unit - Unit: day, week, month, year
  • subscription_trial_days - Number of trial days
  • subscription_first_charge_free - Whether first charge is free
  • custom_attributes - Array of custom key-value pairs
  • merchant_product_ids - Object mapping merchant names to product IDs
  • product_specifications - Array of product specifications
  • shipping_profile_id - Associated shipping profile
  • sku_category - SKU category
  • sku_subcategory - SKU subcategory
  • bonuses - Array of bonus products associated with this product

Create Product

Create a new product.
string
required
The brand/project ID
string
required
Unique product code
string
required
Product title
number
required
Product price
string
required
Product type: physical or digital
string
required
Classification: main, upsell, downsell, bump, or bonus
number
Retail/original price
number
Number of units
string
Stock Keeping Unit
file
Product image file (multipart/form-data only). Must be an uploaded image file — not a JSON URL string. Omit from JSON-only creates; upload via File Manager and reference the CDN URL in HTML, or send image on a multipart create request.
boolean
Whether this is a subscription product
number
Billing frequency (required if is_subscription is true)
string
Frequency unit: day, week, month, year
Request
cURL

Subscription Product Example

cURL

Create with image (multipart)

cURL
Sending "image": "https://..." in a JSON body fails validation (422) or is ignored — the API expects a file upload for the image field.

Update Product

Update an existing product. Authenticate with EF-Access-Key on every request.
Both PUT and POST are supported for the same update handler. If PUT returns a redirect to login, use POST with the same URL and body.
string
required
The brand/project ID
string
required
The product ID
string
Product title (use title, not name)
number
Product price
file
Replace product image (multipart/form-data file upload, same rules as create)
Request
Alternative (same handler):
cURL (PUT)
cURL (POST — preferred if PUT redirects)

Delete Product

Delete a product.
string
required
The brand/project ID
string
required
The product ID
Request
cURL

Clone Product

Create a copy of an existing product.
string
required
The brand/project ID
string
required
The product ID to clone
Request
cURL

Product Classifications


Product Bonuses

Products can have associated bonus products. The bonuses array contains bonus product relationships:
When a customer purchases a product with bonuses, they automatically receive the bonus products.

Downloadable Files

Digital downloads and bonus downloads are stored in product_files. Each file row can include:
  • purpose - digital or bonus
  • title - Optional display title
  • description - Optional description shown in customer-facing download UIs
  • image - Optional thumbnail/cover image URL for this file
  • file - File URL
  • kind - Coarse classification derived from the file extension and metadata.mime_type. One of audio, video, document, image, archive, file. Lets clients branch on file type without re-parsing the URL.
  • is_primary - Marks the default file for that purpose
  • sort_order - Controls display order
  • metadata - Public file metadata. Only the following fields are exposed:
    • mime_type - MIME type of the file (e.g. "audio/mpeg", "application/pdf")
    • size - Size in bytes
    • checksum - Optional checksum recorded at upload (may be null)
    • extension - Lowercase extension without the dot (e.g. "pdf", "mp3"). Derived from the file URL when possible, with a small mime-type fallback for opaque/signed URLs. Empty string when neither source can produce one.
    Internal storage pointers (provider, storage_path, brand_file_id) are intentionally not returned.
Use bonus-product relationships for entitlement, and use product_files for the actual downloadable assets those products expose.

Custom Attributes

Products support custom key-value attributes for flexibility:
Common uses:
  • Download links for digital products
  • Access codes for member areas
  • Special instructions
  • Custom tracking parameters

Merchant Product IDs

Map your ElasticFunnels products to merchant platform product IDs:

Subscription Tiers

Products can have tiered subscription billing — different prices at different intervals (e.g. monthly then annually). Pass subscription_tiers as an array in the Create or Update body.
boolean
Mark product as a subscription product
number
Default billing interval count (e.g. 1 for every-1-month)
string
day, week, month, or year
number
Free trial length in days (min: 0)
boolean
Waive the first billing charge
array
Array of tier objects. When provided, overrides the flat subscription_frequency / subscription_frequency_unit values.
string
required
day, week, month, or year
number
required
How many units of interval between charges (min: 1)
number
required
Billing amount for this tier (min: 0)
string
Optional tier label (max 64 chars)
string
Display label shown to the customer (max 255 chars)
number
Discount shown as “subscribe & save” (0–100%)
Subscription tiers example

Product Variants & Options

Products can have variants (e.g. size/colour combinations). Variants are managed inline via the product_fields and variants arrays on Create/Update.

Product Fields (variant dimensions)

product_fields defines the variant dimensions (e.g. “Size”, “Colour”):

Variants

Each variant is a combination of field values with an optional per-variant price and SKU:
number
Existing variant ID for update (omit to create new)
string
Variant SKU/code (max 128 chars)
string
Value for the first product field (max 128 chars)
string
Value for the second product field (max 128 chars)
string
Value for the third product field (max 128 chars)
number
Override price for this variant (null = use product base price)
string
Variant image URL (max 512 chars)
string
3-letter ISO currency code (e.g. USD)

Variant Options

Variant options are brand-level reusable option sets (e.g. “Shoe Sizes”, “Colours”). They can be attached to multiple products.

List Variant Options

Get All Variant Options (unpaginated)

Create Variant Option

string
required
Option set name (e.g. Shirt Sizes)
array
required
Array of option value strings (e.g. ["XS", "S", "M", "L", "XL"])
cURL

Update Variant Option

Delete Variant Option


Product Categories

Organise products into a two-level category hierarchy (category → subcategory).

List Categories

Get All Categories (unpaginated)

Create Category

string
required
Category name
number
Parent category ID — omit for top-level categories, provide for subcategories.
cURL — create top-level category
cURL — create subcategory

Update Category

Delete Category

When creating a product, product_category_id must be a top-level category (no parent_id). To assign a subcategory, also provide product_subcategory_id (which must belong to the category). Providing a subcategory without a category returns a 422.

Coupons

Create and manage discount codes for products.

List Coupons

number
Results per page (max 100, default: 25)

Get Coupon

Create Coupon

string
required
Coupon code (max 64 chars). Must be unique per brand.
string
required
percent — percentage off, or fixed — fixed amount off
number
required
Discount value. For percent, clamped to 0–100 automatically.
string
Internal label (max 128 chars)
string
active (default), draft, or disabled
array
Limit discount to specific product IDs. Empty/null means all products.
array
Product IDs to exclude from the discount.
boolean
Whether the coupon applies to order bump products.
string
ISO 8601 date — coupon becomes active from this date.
string
ISO 8601 date — coupon expires after this date. Must be on or after valid_from.
number
Maximum number of redemptions (null = unlimited).
cURL — 20% off all products
cURL — $10 off specific products

Update Coupon

All fields optional on update. Use this to disable an expired coupon:
cURL — disable coupon

Delete Coupon

Validate Coupon

Check if a coupon code is valid and get its details (useful for frontend validation before applying at checkout).
string
required
Coupon code to validate

Notes

  • Product code must be unique within the brand
  • classification of bonus products are automatically included with their parent products
  • Subscription products require subscription_frequency and subscription_frequency_unit
  • All costs (COGS, fulfillment, packaging) are tracked for profit margin calculations
  • Images are returned as both image (relative path) and image_link (full URL)
  • Downloadable assets live in product_files, not top-level bonus_file / digital_file columns
    • product_category_id must be a root-level category; use product_subcategory_id for sub-level
    • Coupon type: "percent" values are clamped to 0–100 automatically
When updating products that are actively used in funnels, changes may affect existing customer orders and analytics.