Create a product
Create a product, then add a variant before offering it at checkout.
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.
Create at least one variant before making the product available for checkout. See Create a product variant.
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"
}
}{
"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"
}