API ReferenceProducts

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.

POST
/v2/products

Authorization

AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

Header Parameters

X-STORE?string

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.

Request Body

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"
}