Products
Products represent goods or services available for purchase. They serve as the catalog items that can be added to orders and included in subscription plans.
Pricing
All prices are stored in cents. For example, a $29.99 product has pricing.amount: 2999.
Security: When creating orders, the product price is always looked up from the database — not from the request. This prevents price manipulation.
/products Create a product
Creates a new product in your catalog. Products can be used in orders (one-time purchases) and included in subscription plans (recurring).
SKU Rules
The sku must be unique per merchant. Use lowercase alphanumeric characters, hyphens, and underscores only (e.g., premium-coaching-12wk). If a duplicate SKU is submitted, a 409 Conflict is returned.
Pricing
All amounts are in cents. For example, a $29.99 product has pricing.amount: 2999.
Header parameters
string"2026-02-11"string (uuid)"550e8400-e29b-41d4-a716-446655440000"Request body required
string"Premium Coaching Program"string"12-week intensive coaching program"objectinteger29700string"usd"booleanfalsestring"coaching_premium_12wk"enumin_stockout_of_stockpreorder"in_stock"string"Coaching"string"Elite Academy"string"Cotton blend"string"0.5 kg"integer30integer150MetadataCode samples
curl -X POST https://api.epd.com/v1/products \
-H "Authorization: Bearer epd_test_sk_xxxx" \
-H "Content-Type: application/json" \
-H "EPD-Version: 2026-02-11" \
-H "X-EPD-Idempotency-Key: $(uuidgen)" \
-d '{
"name": "Premium Coaching Program",
"description": "12-week intensive coaching program",
"pricing": { "amount": 29700, "currency": "usd" },
"requires_shipping": false,
"sku": "coaching_premium_12wk"
}' const response = await fetch('https://api.epd.com/v1/products', {
method: 'POST',
headers: {
'Authorization': 'Bearer epd_test_sk_xxxx',
'Content-Type': 'application/json',
'EPD-Version': '2026-02-11',
'X-EPD-Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({
name: 'Premium Coaching Program',
description: '12-week intensive coaching program',
pricing: { amount: 29700, currency: 'usd' },
requires_shipping: false,
sku: 'coaching_premium_12wk',
}),
});
const product = await response.json();
console.log(product.id); // 6ba7b810-9dad-11d1-80b4-00c04fd430c8 import uuid
import requests
response = requests.post(
'https://api.epd.com/v1/products',
headers={
'Authorization': 'Bearer epd_test_sk_xxxx',
'EPD-Version': '2026-02-11',
'X-EPD-Idempotency-Key': str(uuid.uuid4()),
},
json={
'name': 'Premium Coaching Program',
'description': '12-week intensive coaching program',
'pricing': {'amount': 29700, 'currency': 'usd'},
'requires_shipping': False,
'sku': 'coaching_premium_12wk',
}
)
product = response.json()
print(product['id']) # 6ba7b810-9dad-11d1-80b4-00c04fd430c8 Responses
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"string"Premium Coaching Program"string"12-week intensive coaching program"objectinteger29700string"usd"booleanfalsestring"coaching_premium_12wk"enumin_stockout_of_stockpreorder"in_stock"string"Coaching"string"Elite Academy"string"Cotton blend"string"0.5 kg"integer30integer150array[ProductImage]Metadatabooleantruestring (date-time)"2024-01-15T10:30:00.000Z"string (date-time)"2024-01-15T10:30:00.000Z"objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]/products List all products
Returns a paginated list of products.
Query parameters
integer10string"550e8400-e29b-41d4-a716-446655440000"string"550e8400-e29b-41d4-a716-446655440001"string"created_at[desc]"booleantruestring"images"string"id,name,pricing,created"Header parameters
string"2026-02-11"Responses
array[Product]any"/v1/products"objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]/products/{id} Retrieve a product
Path parameters
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"Query parameters
stringHeader parameters
string"2026-02-11"Responses
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"string"Premium Coaching Program"string"12-week intensive coaching program"objectinteger29700string"usd"booleanfalsestring"coaching_premium_12wk"enumin_stockout_of_stockpreorder"in_stock"string"Coaching"string"Elite Academy"string"Cotton blend"string"0.5 kg"integer30integer150array[ProductImage]Metadatabooleantruestring (date-time)"2024-01-15T10:30:00.000Z"string (date-time)"2024-01-15T10:30:00.000Z"objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]/products/{id} Update a product
Path parameters
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"Header parameters
string"2026-02-11"string (uuid)"550e8400-e29b-41d4-a716-446655440000"Request body required
string"Premium Coaching Program v2"string"Updated 14-week intensive coaching program"objectinteger34900string"usd"booleanfalsestring"coaching_premium_14wk"enumin_stockout_of_stockpreorder"in_stock"string"Coaching"string"Elite Academy"string"Cotton blend"string"0.5 kg"integer30integer200booleantrueMetadataResponses
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"string"Premium Coaching Program"string"12-week intensive coaching program"objectinteger29700string"usd"booleanfalsestring"coaching_premium_12wk"enumin_stockout_of_stockpreorder"in_stock"string"Coaching"string"Elite Academy"string"Cotton blend"string"0.5 kg"integer30integer150array[ProductImage]Metadatabooleantruestring (date-time)"2024-01-15T10:30:00.000Z"string (date-time)"2024-01-15T10:30:00.000Z"objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]/products/{id} Delete a product
Deletes a product. Cannot delete products used in active plans.
| Condition | Behavior |
|---|---|
| In active plans | Blocked (400 error) |
| Has order history or archived plans | Soft delete |
| No orders or plans | Hard delete |
Path parameters
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"Header parameters
string"2026-02-11"string (uuid)"550e8400-e29b-41d4-a716-446655440000"Responses
string"6ba7b810-9dad-11d1-80b4-00c04fd430c8"truestring"Product successfully deleted."objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]objectenuminvalid_request_errorauthentication_errorauthorization_errorrate_limit_erroridempotency_errorprocessing_errorwebhook_errorstring"validation_error"string"Request validation failed"string"email"string"req_a1b2c3d4e5f67890abcdef0123456789"array[object]