Skip to main content

List All Products

Retrieve all products for a project with pagination.
brand
string
required
The brand/project ID
page
number
Page number for pagination (default: 1)
per_page
number
Number of results per page (default: 25)
Request
GET /api/brands/{brand}/products
cURL
curl https://app.elasticfunnels.io/api/brands/{brand_id}/products \
  -H "EF-Access-Key: your_api_key_here"
{
  "current_page": 1,
  "data": [
    {
      "id": 2,
      "brand_id": 1,
      "code": "glucotil",
      "type": "physical",
      "title": "1 Bottle",
      "checkout_title": null,
      "price": 69,
      "retail_price": 99,
      "image": "https://storage.googleapis.com/asper-digital/1/1-bottle.png",
      "image_link": "https://storage.googleapis.com/asper-digital/1/1-bottle.png",
      "units": 1,
      "sku": "prod1",
      "classification": "main",
      "bonus_file": null,
      "bonus_file_link": null,
      "unit_cost": null,
      "unit_weight_oz": null,
      "fulfillment_cost": null,
      "packaging_cost": null,
      "fuel_surcharge_cost": null,
      "cogs": null,
      "custom_attributes": null,
      "merchant_product_ids": [],
      "physical_units_per_product": null,
      "fulfillment_multiply_sku": 0,
      "sku_category": null,
      "sku_subcategory": null,
      "product_specifications": null,
      "shipping_profile_id": null,
      "is_subscription": false,
      "subscription_frequency": null,
      "subscription_frequency_unit": null,
      "subscription_trial_days": null,
      "subscription_first_charge_free": false,
      "average_shipping_cost": null,
      "bonuses": []
    }
  ],
  "first_page_url": "https://app.elasticfunnels.io/api/brands/1/products?page=1",
  "from": 1,
  "last_page": 1,
  "last_page_url": "https://app.elasticfunnels.io/api/brands/1/products?page=1",
  "links": [
    {
      "url": null,
      "label": "« Previous",
      "active": false
    },
    {
      "url": "https://app.elasticfunnels.io/api/brands/1/products?page=1",
      "label": "1",
      "active": true
    },
    {
      "url": null,
      "label": "Next »",
      "active": false
    }
  ],
  "next_page_url": null,
  "path": "https://app.elasticfunnels.io/api/brands/1/products",
  "per_page": 25,
  "prev_page_url": null,
  "to": 8,
  "total": 8
}

List All Products (Unpaginated)

Get all products without pagination for dropdown lists.
brand
string
required
The brand/project ID
Request
GET /api/brands/{brand}/products/all
cURL
curl https://app.elasticfunnels.io/api/brands/{brand_id}/products/all \
  -H "EF-Access-Key: your_api_key_here"

Get Product Details

Retrieve details about a specific product.
brand
string
required
The brand/project ID
product
string
required
The product ID
Request
GET /api/brands/{brand}/products/{product}
cURL
curl https://app.elasticfunnels.io/api/brands/{brand_id}/products/2 \
  -H "EF-Access-Key: your_api_key_here"
{
  "id": 2,
  "brand_id": 1,
  "code": "glucotil",
  "type": "physical",
  "title": "1 Bottle",
  "checkout_title": null,
  "price": 69,
  "retail_price": 99,
  "image": "https://storage.googleapis.com/asper-digital/1/1-bottle.png",
  "image_link": "https://storage.googleapis.com/asper-digital/1/1-bottle.png",
  "units": 1,
  "sku": "prod1",
  "classification": "main",
  "bonus_file": null,
  "bonus_file_link": null,
  "unit_cost": null,
  "unit_weight_oz": null,
  "fulfillment_cost": null,
  "packaging_cost": null,
  "fuel_surcharge_cost": null,
  "cogs": null,
  "custom_attributes": null,
  "merchant_product_ids": {},
  "physical_units_per_product": null,
  "fulfillment_multiply_sku": 0,
  "sku_category": null,
  "sku_subcategory": null,
  "product_specifications": null,
  "shipping_profile_id": null,
  "is_subscription": false,
  "subscription_frequency": null,
  "subscription_frequency_unit": null,
  "subscription_trial_days": null,
  "subscription_first_charge_free": false,
  "average_shipping_cost": null,
  "bonuses": []
}

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
  • bonus_file - Bonus/digital file path
  • bonus_file_link - Full URL to bonus file
  • 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.
brand
string
required
The brand/project ID
code
string
required
Unique product code
title
string
required
Product title
price
number
required
Product price
type
string
required
Product type: physical or digital
classification
string
required
Classification: main, upsell, downsell, bump, or bonus
retail_price
number
Retail/original price
units
number
Number of units
sku
string
Stock Keeping Unit
image
string
Product image URL
is_subscription
boolean
Whether this is a subscription product
subscription_frequency
number
Billing frequency (required if is_subscription is true)
subscription_frequency_unit
string
Frequency unit: day, week, month, year
Request
POST /api/brands/{brand}/products
cURL
curl -X POST https://app.elasticfunnels.io/api/brands/{brand_id}/products \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "product_123",
    "title": "Premium Product",
    "price": 49.99,
    "retail_price": 79.99,
    "type": "physical",
    "classification": "main",
    "units": 1,
    "sku": "PREM-001"
  }'

Subscription Product Example

cURL
curl -X POST https://app.elasticfunnels.io/api/brands/{brand_id}/products \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "monthly_subscription",
    "title": "Monthly Subscription",
    "price": 29.99,
    "type": "physical",
    "classification": "main",
    "is_subscription": true,
    "subscription_frequency": 1,
    "subscription_frequency_unit": "month",
    "subscription_trial_days": 14,
    "subscription_first_charge_free": true
  }'

Update Product

Update an existing product.
brand
string
required
The brand/project ID
product
string
required
The product ID
Request
PUT /api/brands/{brand}/products/{product}
cURL
curl -X PUT https://app.elasticfunnels.io/api/brands/{brand_id}/products/{product_id} \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Product Name",
    "price": 59.99
  }'

Delete Product

Delete a product.
brand
string
required
The brand/project ID
product
string
required
The product ID
Request
DELETE /api/brands/{brand}/products/{product}
cURL
curl -X DELETE https://app.elasticfunnels.io/api/brands/{brand_id}/products/{product_id} \
  -H "EF-Access-Key: your_api_key_here"

Clone Product

Create a copy of an existing product.
brand
string
required
The brand/project ID
product
string
required
The product ID to clone
Request
POST /api/brands/{brand}/products/{product}/clone
cURL
curl -X POST https://app.elasticfunnels.io/api/brands/{brand_id}/products/2/clone \
  -H "EF-Access-Key: your_api_key_here"

Product Classifications

ClassificationDescriptionUsage
mainMain product offerPrimary product in funnel
upsellUpsell productOffered after initial purchase
downsellDownsell productOffered if upsell is declined
bumpOrder bumpCheckbox add-on at checkout
bonusBonus productFree gift or bonus item

Product Bonuses

Products can have associated bonus products. The bonuses array contains bonus product relationships:
{
  "bonuses": [
    {
      "bonus_product_id": 23,
      "product_id": 3,
      "brand_id": 1
    },
    {
      "bonus_product_id": 24,
      "product_id": 3,
      "brand_id": 1
    }
  ]
}
When a customer purchases a product with bonuses, they automatically receive the bonus products.

Custom Attributes

Products support custom key-value attributes for flexibility:
{
  "custom_attributes": [
    {
      "key": "download",
      "value": "https://example.com/download"
    },
    {
      "key": "access_code",
      "value": "ABC123"
    }
  ]
}
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:
{
  "merchant_product_ids": {
    "buygoods": "1234",
    "clickbank": "PROD-001",
    "stripe": "prod_abc123"
  }
}

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)
When updating products that are actively used in funnels, changes may affect existing customer orders and analytics.