API ReferenceAdd-ons

Create an add-on

Create a draft or publish an add-on with its variant and parent products.

Create an add-on in the selected store with an API key that has the listing ability and matching store permission. Creation returns 201 and data.id.

Omit variant to create a draft. To publish in one request, send is_draft: false, a complete fixed-price, single-payment variant, and the intended parent_product_ids. Invalid variant or parent input rolls back the whole creation. Retain the returned add-on and variant IDs and read the add-on back.

Publication makes the add-on available according to its visibility and parent assignments. This create operation has no response-replay guarantee; inspect existing add-ons before repeating a request whose response was lost.

POST
/v2/addons

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

application/json

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/addons" \  -H "X-STORE: launch-lab" \  -H "Content-Type: application/json" \  -d '{    "title": "Customer support",    "description": "Priority support for launches scheduled suspiciously close to Friday.",    "visibility": "PUBLIC",    "parent_product_ids": [      120,      121    ]  }'

draft

{
  "data": {
    "id": 410,
    "store_id": 12,
    "title": "Customer support",
    "slug": "customer-support",
    "description": "Priority support for launches scheduled suspiciously close to Friday.",
    "visibility": "PUBLIC",
    "type": "addon",
    "is_draft": true,
    "is_discoverable": false,
    "parent_product_ids": [
      120,
      121
    ],
    "variants": [],
    "created_at": "2026-07-11T12:00:00.000000Z",
    "updated_at": "2026-07-11T12:00:00.000000Z",
    "deleted_at": null,
    "delivery_text": ""
  }
}

published

{
  "data": {
    "id": 410,
    "store_id": 12,
    "title": "Priority support",
    "slug": "priority-support",
    "description": "Personal help with your design kit",
    "visibility": "PUBLIC",
    "type": "addon",
    "is_draft": false,
    "is_discoverable": true,
    "parent_product_ids": [
      120
    ],
    "variants": [
      {
        "id": 8801,
        "title": "Standard",
        "is_draft": false
      }
    ],
    "created_at": "2026-07-11T12:00:00.000000Z",
    "updated_at": "2026-07-11T12:00:00.000000Z",
    "deleted_at": null,
    "delivery_text": ""
  }
}
{
  "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"
}