API ReferenceProducts

Update a product

Update a product's details.

Update a product's details. The token must have the listing ability, and the product must belong to the authenticated store.

To prevent overwriting a newer dashboard or API change, send expected_updated_at with the exact updated_at value from the product you last retrieved. A stale snapshot is rejected with a validation error.

PATCH
/v2/products/{product}

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

Path Parameters

product*integer

The product path parameter.

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 PATCH "https://sell.app/api/v2/products/120" \  -H "Content-Type: application/json" \  -d '{    "title": "Founder memo circle",    "description": "A monthly collection of annotated operating memos.",    "visibility": "HIDDEN",    "expected_updated_at": "2026-08-30T12:00:00.000000Z"  }'
{
  "data": {
    "id": 120,
    "title": "Founder memo circle",
    "slug": "founder-memo-circle",
    "description": "A monthly collection of annotated operating memos.",
    "images": [
      {
        "path": "store/1/listings/NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K.png",
        "metadata": {
          "size": 39289,
          "filename": "NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K",
          "extension": "png",
          "mime_type": "image/png"
        }
      },
      {
        "path": "store/1/listings/ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X.png",
        "metadata": {
          "size": 422373,
          "filename": "ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X",
          "extension": "png",
          "mime_type": "image/png"
        }
      }
    ],
    "order": 1,
    "visibility": "HIDDEN",
    "delivery_text": "Thanks again bud!",
    "additional_information": [
      {
        "required": true,
        "key": "3aecffd000e00e2211e94558007ffc37",
        "type": "checkbox",
        "label": "Did you test this in production?"
      }
    ],
    "other_settings": {
      "faq": [
        {
          "answer": "Yes, trust me!",
          "question": "Will I really live forever?"
        }
      ],
      "video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
      "redirect_url": "https://example.com/post-launch?customer_email=[customer_email]&order_id=[order_id]",
      "product_title": "The real elixir of immortality",
      "product_description": "Live forever, online."
    },
    "deleted_at": null,
    "created_at": "2024-01-09T22:56:49.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": 4321,
        "title": "Monthly membership"
      }
    ],
    "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": "not_found_error",
  "code": "resource_not_found",
  "message": "Not Found.",
  "status": 404,
  "param": null,
  "request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
  "docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}
{
  "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"
}