Create a product
Create a product with optional initial variants and bundle contents.
Create a product in the selected store. Your key needs the listing ability.
The same product rules apply as in the dashboard. Success returns 201 Created.
Note
Uploading an image? Use multipart/form-data. If you are creating the
product without an image, JSON works too.
Include variants to create the product and up to 100 initial variants in one
transaction. If any variant is invalid, the entire creation rolls back. Retain
the returned data.id and data.variants IDs. For a bundle, send type: "bundle",
one variant with deliverable.types: ["BUNDLE"] and empty deliverable.data,
and bundle_items containing same-store standard variant IDs and quantities.
You can still omit these fields and create a variant separately. Check pricing, delivery, and enabled payment methods before offering checkout. These combined inputs apply only to single-product creation. Creation has no response-replay guarantee: inspect the catalog before retrying a lost response.
Provide your SellApp API key as a bearer token.
In: header
Header Parameters
Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://sell.app/api/v2/products" \ -H "X-STORE: launch-lab" \ -H "Content-Type: application/json" \ -d '{ "title": "Design kit", "description": "Templates for your next project.", "visibility": "HIDDEN" }'minimal
{
"data": {
"id": 120,
"title": "Design kit",
"slug": "design-kit",
"description": "Templates for your next project.",
"images": [],
"order": 1,
"visibility": "HIDDEN",
"delivery_text": "",
"additional_information": [],
"other_settings": {
"faq": [],
"video_url": "",
"redirect_url": "",
"product_title": "",
"product_description": ""
},
"deleted_at": null,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": true,
"variants": [],
"url": "https://launch-lab.sell.app/product/design-kit"
}
}realistic
{
"data": {
"id": 120,
"title": "Design kit",
"slug": "design-kit-launch",
"description": "Templates for your next project.",
"images": [],
"order": 1,
"visibility": "HIDDEN",
"delivery_text": "",
"additional_information": [],
"other_settings": {
"faq": [],
"video_url": "",
"redirect_url": "",
"product_title": "",
"product_description": ""
},
"deleted_at": null,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": true,
"variants": [],
"url": "https://launch-lab.sell.app/product/design-kit-launch"
}
}withVariants
{
"data": {
"id": 120,
"title": "Design kit",
"slug": "design-kit",
"description": "Reusable templates for your next launch",
"images": [],
"order": 1,
"visibility": "PUBLIC",
"delivery_text": "",
"additional_information": [],
"other_settings": {
"faq": [],
"video_url": "",
"redirect_url": "",
"product_title": "",
"product_description": ""
},
"deleted_at": null,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": true,
"variants": [
{
"id": 8801,
"title": "Standard"
}
],
"url": "https://launch-lab.sell.app/product/design-kit",
"type": "product"
}
}completeBundle
{
"data": {
"id": 120,
"title": "Launch bundle",
"slug": "design-kit",
"description": "Two design kits in one purchase",
"images": [],
"order": 1,
"visibility": "PUBLIC",
"delivery_text": "",
"additional_information": [],
"other_settings": {
"faq": [],
"video_url": "",
"redirect_url": "",
"product_title": "",
"product_description": ""
},
"deleted_at": null,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": true,
"variants": [
{
"id": 8801,
"title": "Standard"
}
],
"url": "https://launch-lab.sell.app/product/design-kit",
"type": "bundle"
}
}{
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request could not be understood.",
"status": 400,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#bad-request"
}{
"type": "authentication_error",
"code": "unauthenticated",
"message": "Unauthenticated.",
"status": 401,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}{
"type": "authorization_error",
"code": "forbidden",
"message": "This action is unauthorized.",
"status": 403,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#forbidden"
}{
"type": "validation_error",
"code": "validation_failed",
"message": "The selected product variant id is invalid.",
"status": 422,
"param": "product_variant_id",
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#validation-failed",
"errors": {
"product_variant_id": [
"The selected product variant id is invalid."
]
}
}{
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too Many Attempts.",
"status": 429,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}{
"type": "api_error",
"code": "api_error",
"message": "Server Error",
"status": 500,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#api-error"
}