API ReferenceProducts
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.
Authorization
bearerAuth storeAuth AuthorizationBearer <token>
Provide your SellApp API key as a bearer token.
In: header
X-STORE<token>
Select the SellApp store for this API request.
In: header
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://sell.app/api/v2/products" \ -H "Content-Type: application/json" \ -d '{ "title": "Founder memo circle", "description": "A monthly collection of annotated operating memos.", "visibility": "HIDDEN" }'{
"data": {
"id": 120,
"title": "Founder memo circle",
"slug": "founder-memo-circle",
"description": "A monthly collection of annotated operating memos.",
"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/founder-memo-circle"
}
}{
"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"
}