Create a product
Products
Create Product
Creates a new product with its variants. Uses upsert logic - will update if product SKU already exists. Products can have multiple variants representing different conditions/grades, each with their own pricing tiers for different contract lengths.
POST
Create a product
Overview
Create a new product with one or more variants. Products are the foundation of your subscription catalog—they define what customers can subscribe to, at what prices, and with what configurations.This endpoint uses upsert behavior: if a product with the same
productSku already exists, it will be updated instead of creating a duplicate.Common Use Cases
New Product Launch
Add new products to your catalog when expanding your offering
Integration Sync
Sync products from your e-commerce platform or inventory system
Catalog Migration
Migrate products from another subscription platform
Partner Catalog
Onboard products from new suppliers or partners
Minimal Request Example
Create a simple product with one variant:Complete Request Example
Product with multiple variants for different configurations:Product Fields
| Field | Required | Description |
|---|---|---|
productSku | Yes | Unique product identifier (parent SKU) |
name | Yes | Display name |
specification | Yes | Product specification/description |
category | Yes | Product category (e.g., “Laptops”, “Phones”) |
brand | Yes | Brand/manufacturer |
description | No | Detailed product description |
images | No | Array of product image URLs |
variants | Yes | Array of variant configurations |
Variant Fields
| Field | Required | Description |
|---|---|---|
variantSku | Yes | Unique variant SKU (used in orders) |
variantName | Yes | Variant name/specification |
grade | Yes | Condition: A, B, C, D, or E |
colorName | No | Color option |
listPrice | No | MSRP/retail price |
acquisitionCost | No | Your cost to acquire |
pricing | Yes | Array of pricing tiers (see below) |
Pricing Array Format
Each pricing tier in thepricing array:
| Field | Required | Description |
|---|---|---|
contractLength | Yes | Contract duration in months (e.g., 12, 24, 36) |
monthlyPrice | Yes | Monthly subscription price |
setupFee | No | One-time setup fee |
discount | No | Discount object with type (“percentage” or “fixed”) and value |
Pricing Strategy
Set monthly prices based on your cost recovery goals:Variant SKU Best Practices
Create predictable, searchable SKUs:Upsert Behavior
When you create a product with an existingproductSku:
- Product fields are updated with new values
- Existing variants (matching SKU) are updated
- New variants (new SKU) are added
- Missing variants (not in request) remain unchanged
Error Handling
| Error Code | Cause | Solution |
|---|---|---|
VALIDATION_ERROR | Missing required fields | Check details array for specific errors |
DUPLICATE_SKU | Variant SKU already exists on different product | Use unique SKUs per variant |
INVALID_PRICING | Pricing array is invalid | Each tier needs contractLength (integer) and monthlyPrice (number) |
Related Endpoints
- List Products - Browse catalog
- Get Product - View product details
- Update Product - Modify existing product
- Import CSV - Bulk import products
Authorizations
API key obtained from FlexPortal dashboard
Headers
Your tenant identifier
Body
application/json
Minimum string length:
1Minimum string length:
1Minimum string length:
1Minimum string length:
1Minimum string length:
1Minimum array length:
1