---
title: "Update product (offer) lifecycle state"
method: PUT
path: "/open-api/v1.0/products/{productId}/state"
tags: ["Products (offers)"]
---

# Update product (offer) lifecycle state

`PUT /open-api/v1.0/products/{productId}/state`

## Request

- Base URL: `https://api.fourthwall.com`
- URL: `https://api.fourthwall.com/open-api/v1.0/products/{productId}/state`
- Auth: one of:
  - OAuth 2
    - Implicit: `https://auth.staging.fourthwall.com/auth/realms/Fourthwall/protocol/openid-connect/auth`
    - Scopes: `offer_write`
  - HTTP basic

*Rate limit: 100 requests / 10 seconds per shop. See [Rate limiting](/guides/rate-limiting).*

Transitions the product between `PUBLIC` and `HIDDEN`. Use `DELETE /products/{productId}` to archive — `ARCHIVED` is not reachable here. The sold-out (`available`) flag is preserved; flip it via `PUT /products/{productId}/availability`. Idempotent: no-op if the product is already in the requested state.

## Path parameters

- `productId` string, required

## Request body

- UpdateProductStateV1Request: Request to transition a product (offer) lifecycle state. Only `PUBLIC` and `HIDDEN` are reachable via this endpoint — use `DELETE /products/{productId}` to archive.
  - `state` 'PUBLIC' | 'HIDDEN', required: Target lifecycle state. `PUBLIC` makes the product visible on the storefront; `HIDDEN` keeps it unlisted. The sold-out (`available`) flag is preserved across the transition — use `PUT /products/{productId}/availability` to flip it.

## Response `200`

OK

- ComFourthwallOpenapiModelOfferAbstractV1OfferFullV1
  - `id` string, required
  - `name` string, required
  - `slug` string, required
  - `description` string, required
  - `type` 'STANDARD' | 'GIFT_CARD' | 'UNKNOWN', required
  - `state` union, required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferStateV1Available
      - `type` 'AVAILABLE', required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferStateV1SoldOut
      - `type` 'SOLD_OUT', required
  - `access` union, required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferAccessV1Archived
      - `type` 'ARCHIVED', required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferAccessV1Hidden
      - `type` 'HIDDEN', required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferAccessV1Private
      - `type` 'PRIVATE', required
    - ComFourthwallOpenapiModelOfferAbstractV1OfferAccessV1Public
      - `type` 'PUBLIC', required
  - `thumbnailImage` ComFourthwallOpenapiModelImage
    - `id` string, required
    - `url` string, required
    - `width` integer, required: The original width of the image in pixels.
    - `height` integer, required: The original height of the image in pixels.
    - `transformedUrl` string, required: Transformed URL with applied image processing (e.g., resizing, optimization)
  - `images` ComFourthwallOpenapiModelImage[], required
    - `id` string, required
    - `url` string, required
    - `width` integer, required: The original width of the image in pixels.
    - `height` integer, required: The original height of the image in pixels.
    - `transformedUrl` string, required: Transformed URL with applied image processing (e.g., resizing, optimization)
  - `variants` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1OfferVariantV1[], required
    - `id` string, required
    - `name` string, required
    - `sku` string, required
    - `unitPrice` Money, required
      - `value` number, required
      - `currency` string, required
    - `compareAtPrice` Money
      - `value` number, required
      - `currency` string, required
    - `unitCost` Money
      - `value` number, required
      - `currency` string, required
    - `attributes` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1Attributes, required
      - `description` string, required
      - `color` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1AttributesColor
        - `name` string, required
        - `swatch` string, required
      - `size` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1AttributesSize
        - `name` string, required
    - `creatorDeclaredCost` Money
      - `value` number, required
      - `currency` string, required
    - `stock` union, required
      - ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1StockLimited
        - `type` 'LIMITED', required
        - `inStock` integer, required
      - ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1StockUnlimited
        - `type` 'UNLIMITED', required
    - `weight` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1Weight, required
      - `value` number, required
      - `unit` string, required
    - `dimensions` ComFourthwallOpenapiModelOfferAbstractV1OfferVariantAbstractV1Dimensions, required
      - `length` number, required
      - `width` number, required
      - `height` number, required
      - `unit` string, required
    - `images` ComFourthwallOpenapiModelImage[], required
      - `id` string, required
      - `url` string, required
      - `width` integer, required: The original width of the image in pixels.
      - `height` integer, required: The original height of the image in pixels.
      - `transformedUrl` string, required: Transformed URL with applied image processing (e.g., resizing, optimization)
    - `thumbnailImage` ComFourthwallOpenapiModelImage
      - `id` string, required
      - `url` string, required
      - `width` integer, required: The original width of the image in pixels.
      - `height` integer, required: The original height of the image in pixels.
      - `transformedUrl` string, required: Transformed URL with applied image processing (e.g., resizing, optimization)
  - `additionalInformation` ComFourthwallOpenapiModelOfferAbstractV1OfferAdditionalInformationV1
    - `sizeAndFit` string
    - `guaranteeAndReturns` string
    - `moreDetails` string
  - `sizeGuide` ComFourthwallOpenapiModelOfferAbstractV1OfferSizeGuideV1
    - `previewUrl` string
    - `fileUrl` string
    - `description` string
    - `fitGuideDescription` string
    - `fitGuideUrls` string[], required
  - `digitalFiles` ComFourthwallOpenapiModelOfferDigitalFileV1[]: Digital files attached to this offer. Only present for digital offers.
    - `uri` string, required: The file URI
    - `name` string, required: The file name
    - `fileSize` string: Human-readable file size
    - `mediaType` string: MIME type of the file
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: Possible errors: `OFFER_INVALID_STATE_ERROR`
- `404`: Possible errors: `OFFER_NOT_FOUND_BY_SHOP_ID_AND_ID_ERROR`, `OFFER_VARIANT_NOT_FOUND_ERROR`, `SHOP_TEAM_MEMBER_SHOP_NOT_FOUND_ERROR`
- `409`: Possible errors: `SQL_CONSTRAINTS_ERROR`
- `429`: Rate limited: 100 requests / 10 seconds per shop.

## Changes

- **2026-07-21** `d02dd5a76313`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fourthwall/apis/fourthwall-apis-2/changes/open-api/v1.0/products/:productId/state/put.md)

---

[API](https://skmtc.dev/fourthwall/apis/fourthwall-apis-2.md) - [All operations](https://skmtc.dev/fourthwall/apis/fourthwall-apis-2/llms.txt) - [OpenAPI document](https://skmtc.dev/fourthwall/apis/fourthwall-apis-2/revisions/77de1061d5c9?raw)
