curl --request POST \
--url https://api.sentralbee.app/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Classic Tee",
"type": "VARIABLE_PRODUCT",
"status": "ACTIVE",
"categories": [
"men",
"kaftan"
],
"requires_shipping": true,
"options": [
{
"name": "Color",
"values": [
"Red",
"Blue"
]
},
{
"name": "Size",
"values": [
"S",
"M"
]
}
],
"variants": [
{
"sku": "TEE-RED-S",
"attributes": {
"Color": "Red",
"Size": "S"
},
"price": {
"NGN": 450000
},
"cost": {
"NGN": 150000
},
"stock": 50
},
{
"sku": "TEE-BLUE-M",
"attributes": {
"Color": "Blue",
"Size": "M"
},
"price": {
"NGN": 450000
},
"stock": 30
}
]
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "<string>",
"type": "<string>",
"description": "<string>",
"category": "<string>",
"categories": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Kaftan",
"slug": "kaftan",
"parent": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_slug": "men"
}
],
"requires_shipping": true,
"can_preorder": true,
"total_stock": 123,
"price_range": {},
"options": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Color",
"values": [
"Red",
"Blue"
]
}
],
"media": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"thumbnail": "<string>",
"type": "<string>",
"position": 123
}
],
"variants": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sku": "<string>",
"stock": 123,
"price": {},
"attributes": {}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}Create a product (with options & variants)
Creates a product in one call — including, for a variable product, its options
and variants. See ProductInput for the type-driven required fields.
curl --request POST \
--url https://api.sentralbee.app/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Classic Tee",
"type": "VARIABLE_PRODUCT",
"status": "ACTIVE",
"categories": [
"men",
"kaftan"
],
"requires_shipping": true,
"options": [
{
"name": "Color",
"values": [
"Red",
"Blue"
]
},
{
"name": "Size",
"values": [
"S",
"M"
]
}
],
"variants": [
{
"sku": "TEE-RED-S",
"attributes": {
"Color": "Red",
"Size": "S"
},
"price": {
"NGN": 450000
},
"cost": {
"NGN": 150000
},
"stock": 50
},
{
"sku": "TEE-BLUE-M",
"attributes": {
"Color": "Blue",
"Size": "M"
},
"price": {
"NGN": 450000
},
"stock": 30
}
]
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "<string>",
"type": "<string>",
"description": "<string>",
"category": "<string>",
"categories": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Kaftan",
"slug": "kaftan",
"parent": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_slug": "men"
}
],
"requires_shipping": true,
"can_preorder": true,
"total_stock": 123,
"price_range": {},
"options": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Color",
"values": [
"Red",
"Blue"
]
}
],
"media": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"thumbnail": "<string>",
"type": "<string>",
"position": 123
}
],
"variants": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sku": "<string>",
"stock": 123,
"price": {},
"attributes": {}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"request_id": "<string>"
}
}Authorizations
Workspace API key. The workspace is derived from the key.
Body
Create a full product in one call. The required fields depend on type:
- SIMPLE_PRODUCT / VIRTUAL_PRODUCT — a single default variant; provide
top-level
sku,price,cost,stock. Do not sendoptions/variants. - VARIABLE_PRODUCT — provide
options(each option + its values) and an explicitvariantsarray. Options are resolved to workspace options by name (created/extended as needed); each variant'sattributesselects one value per option.price/cost/stock/skuthen belong on each variant, not the product.
Categories: use categories (ids or slugs, ordered, first = primary) for
multi-category products; the legacy single category (by name or id) still
works but categories wins when both are sent. status and type must be
values your workspace supports. Money is integer minor units.
"Classic Tee"
SIMPLE_PRODUCT, VARIABLE_PRODUCT, VIRTUAL_PRODUCT A product status your workspace uses (e.g. ACTIVE, ARCHIVED, HIDDEN).
"ACTIVE"
Legacy single category. Provide name (created if missing) or an existing
id. Prefer categories for multi-category products; if both are sent,
categories wins and this is ignored.
Show child attributes
Show child attributes
Ordered list of category ids or slugs (first = primary). Replaces the
product's category set. When present it takes precedence over category.
An unknown id/slug returns 422 unprocessable and nothing is applied.
["men", "kaftan"]
Tax class id (optional).
Required for SIMPLE/VIRTUAL products.
Currency code → amount in minor units (e.g. NGN 450000 = 4500.00).
Show child attributes
Show child attributes
{ "NGN": 450000, "USD": 2900 }
Currency code → amount in minor units (e.g. NGN 450000 = 4500.00).
Show child attributes
Show child attributes
{ "NGN": 450000, "USD": 2900 }
Required for SIMPLE/VIRTUAL products.
Required for VARIABLE_PRODUCT. The product's options and their values.
Show child attributes
Show child attributes
Required for VARIABLE_PRODUCT. One entry per variant; attributes selects a value for each option.
Show child attributes
Show child attributes
Response
Created product
The primary category's name (the first of categories). Kept for
backwards compatibility — prefer categories.
The product's categories, ordered (first = primary). Each entry carries
its parent/parent_slug, so a headless storefront can build
/shop/{parent_slug}/{slug} links with no extra calls.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The product's resolved options. Each variant's attributes is keyed by
the option id here, so use this to map a variant back to option names/values.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Created variants. Each variant's attributes maps an option id (see
options) to the chosen value key.
Show child attributes
Show child attributes

