---
schema_version: "1"
id: 550e0dd5d3ca4aebaf81890d615406f8663ab4398c6aefbee023b4bf2f2e5e73
title: Storefronts
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/commerce-cloud/commerce-api/references/generated-api-specs/storefronts.md
canonical_url: https://developer.salesforce.com/docs/commerce/commerce-api/references/storefronts
source_site: developer.salesforce.com
content_type: documentation
content_hash: be9284e5c6840f3b19954539c57353f35f814bf1a6ee6907d379a93d705ab7b2
products:
  - B2C Commerce API
  - Salesforce APIs
---
Storefronts

# Storefronts

[Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/storefront/storefronts-oas-v1-public.yaml)

## API Overview

The Storefronts API provides B2C Commerce API (SCAPI)-native access to B2C storefront data for Storefront Next and PWA Kit. It replaces the Business Manager UI and partially data API setup flow. The B2C CLI and other tooling can use it for end-to-end automation. The Storefronts API provides full provisioning for Storefront Next and partial administration tasks for PWA Kit.

*   **Storefronts** — create, retrieve, list, update (site assignment), and delete storefronts at the organization level.

Storefront creation and deletion are asynchronous: the API returns immediately with the resource in a non-terminal status, and callers poll the resource by ID to track progress. See the [Environments API](https://developer.salesforce.com/static/commercecloud/commerce-api/storefront/environments-oas-v1-public.yaml) for managing a storefront's environments.

### Authentication & Authorization

Requests are authenticated with Account Manager OAuth 2.0 bearer tokens (`AmOAuth2`). Access is governed by the Storefronts API scopes: `sfcc.storefront.storefronts` grants read-only access, and `sfcc.storefront.storefronts.rw` grants read and write access. Read operations (`GET`) accept either scope. Write operations (`POST`, `PATCH`, `DELETE`) require `sfcc.storefront.storefronts.rw`.

### Idempotency

*   `POST /storefronts`: This operation is idempotent in effect but not in response code while the storefront record exists. The API rejects the requested storefrontName immediately if a record already exists with the same name, regardless of setup status. The retries don't create a second storefront or modify the existing one. The first call returns 202, and retries return 409 (StorefrontAlreadyExistsErrorResponse). After the storefront is fully deleted, its record is removed and the storefrontName becomes available for reuse. A subsequent POST with that name succeeds (202) instead of returning 409.
*   `PATCH /storefronts/{storefrontId}`: This operation is idempotent. The request body is the full desired `sites` list (complete replacement). Repeating an identical request produces the same resulting state.
*   `DELETE /storefronts/{storefrontId}`: This operation is idempotent in effect, but not in response code. The first call queues deletion (202). Once deletion completes, retrying returns 404. Deleting a storefront while a deletion of that same storefront is already in progress returns 409 (`StorefrontBusyErrorResponse`) rather than queuing a duplicate deletion.

### Use Cases

*   Provision a Storefront Next storefront.
*   Assign or reassign existing sites to a storefront.
*   Poll storefront status during asynchronous provisioning or teardown.
*   Decommission a storefront.

**Version:** 1.0.4

## Servers

*   `https://{shortCode}.api.commercecloud.salesforce.com/storefront/storefronts/v1`
    *   `shortCode (default 123456gf)`

## Security

*   `AmOAuth2` (oauth2) AccountManager OAuth 2.0 bearer token Authentication.
    *   OAuth flow clientCredentials (tokenUrl: https://account.demandware.com/dwsso/oauth2/access\_token)
    *   Scope sfcc.storefront.storefronts: Read-only access to the Storefronts API.
    *   Scope sfcc.storefront.storefronts.rw: Read and write access to the Storefronts API.

## Operations

### GET Get storefronts for an organization.

`GET /organizations/{organizationId}/storefronts`

Operation ID: `getStorefronts`. Security: AmOAuth2 (sfcc.storefront.storefronts, sfcc.storefront.storefronts.rw).

Retrieves the list of storefronts provisioned for the organization, ordered by creationDate ascending.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `limit` (query, integer (int32)) Number of records to retrieve per request. Must be between 1 (minimum) and 200 (maximum). Defaults to 25.  
    Default: `25`. Minimum: 1. Maximum: 200.
*   `offset` (query, integer (int32)) Used to retrieve the results based on a particular resource offset.  
    Default: `0`. Minimum: 0.

#### Responses

*   **200** List of storefronts successfully retrieved.
    
    Media type: `application/json`. Schema: `StorefrontResult`.
    
    _Example: StorefrontListSuccess_ Successful storefront list result
    
    Example of a successful response returning the list of storefronts for an organization.
    
    ```
    {
      "limit": 25,
      "offset": 0,
      "total": 2,
      "data": [
        {
          "storefrontId": "market-street-a1b2c3",
          "storefrontName": "MarketStreet",
          "type": "storefront_next",
          "setupStatus": "success",
          "sites": [
            "MarketStreet"
          ],
          "creationDate": "2026-04-08T21:47:28.188965Z",
          "lastModified": "2026-04-08T21:47:31.307595Z"
        },
        {
          "storefrontId": "beauty-street-d4e5f6",
          "storefrontName": "BeautyStreet",
          "type": "pwa_kit",
          "setupStatus": "in_progress",
          "sites": [
            "BeautyStreet"
          ],
          "creationDate": "2026-04-09T10:12:00.000000Z",
          "lastModified": "2026-04-09T10:12:00.000000Z"
        }
      ]
    }
    ```
    
*   **401** Your access token is invalid or expired and can’t be used to identify a user.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: UnauthorizedExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
      "title": "Unauthorized",
      "detail": "Unauthorized request"
    }
    ```
    
*   **403** Forbidden. Your access token is valid, but you don’t have the required permissions to access the resource.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: ForbiddenExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/forbidden",
      "title": "Forbidden",
      "detail": "Access to requested resource forbidden"
    }
    ```
    

### POST Create a storefront.

`POST /organizations/{organizationId}/storefronts`

Operation ID: `createStorefront`. Security: AmOAuth2 (sfcc.storefront.storefronts.rw).

Queues creation of a new storefront. Returns immediately with the storefront resource in the in\_progress setup status. Poll the storefront by ID to track provisioning progress.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    

#### Request body (required)

Media type: `application/json`. Schema: `StorefrontCreateRequest`.

_Example: CreateStorefront_ Create a storefront

Create a storefront with an initial site assignment.

```
{
  "storefrontName": "MarketStreet",
  "type": "storefront_next",
  "sites": [
    "MarketStreet"
  ]
}
```

#### Responses

*   **202** Storefront creation successfully queued.
    
    Media type: `application/json`. Schema: `Storefront`.
    
    _Example: StorefrontCreatedSuccess_ Successful storefront creation
    
    Example of a successful response when a new storefront is queued for creation (202 Accepted).
    
    ```
    {
      "storefrontId": "market-street-a1b2c3",
      "storefrontName": "MarketStreet",
      "type": "storefront_next",
      "setupStatus": "in_progress",
      "sites": [
        "MarketStreet"
      ],
      "creationDate": "2026-04-08T21:47:28.188965Z",
      "lastModified": "2026-04-08T21:47:28.188965Z"
    }
    ```
    
*   **400** Bad Request. The storefront creation request body is invalid.
    
    Media type: `application/problem+json`. Schema: `InvalidStorefrontCreateRequestErrorResponse | StorefrontSiteNotFoundErrorResponse`.
    
    One of: `InvalidStorefrontCreateRequestErrorResponse`, `StorefrontSiteNotFoundErrorResponse`.
    
    _Example: InvalidStorefrontCreateRequestErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/invalid-storefront-create-request",
      "detail": "The storefront creation request body is invalid. A valid storefrontName, type, and sites are required.",
      "title": "Invalid Storefront Create Request"
    }
    ```
    
    _Example: StorefrontSiteNotFoundErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-site-not-found",
      "detail": "We couldn't find site RefArch.",
      "title": "Storefront Site Not Found"
    }
    ```
    
*   **401** Your access token is invalid or expired and can’t be used to identify a user.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: UnauthorizedExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
      "title": "Unauthorized",
      "detail": "Unauthorized request"
    }
    ```
    
*   **403** Forbidden. Your access token is valid, but you don’t have the required permissions to access the resource.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: ForbiddenExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/forbidden",
      "title": "Forbidden",
      "detail": "Access to requested resource forbidden"
    }
    ```
    
*   **409** We couldn't create the storefront due to a conflict.
    
    Media type: `application/problem+json`. Schema: `StorefrontAlreadyExistsErrorResponse | StorefrontSiteCollisionErrorResponse`.
    
    One of: `StorefrontAlreadyExistsErrorResponse`, `StorefrontSiteCollisionErrorResponse`.
    
    _Example: StorefrontAlreadyExistsErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-already-exists",
      "detail": "A storefront with ID 'my-storefront' already exists.",
      "title": "Storefront Already Exists"
    }
    ```
    
    _Example: StorefrontSiteCollisionErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-site-collision",
      "detail": "Site 'RefArch' is already assigned to another storefront.",
      "title": "Storefront Site Collision"
    }
    ```
    

### GET Get a storefront by ID.

`GET /organizations/{organizationId}/storefronts/{storefrontId}`

Operation ID: `getStorefrontById`. Security: AmOAuth2 (sfcc.storefront.storefronts, sfcc.storefront.storefronts.rw).

Retrieves the details of a specific storefront, including its current setup status and assigned sites.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `storefrontId` (path, string, required) The storefront identifier that B2C Commerce generates based on the provided storefront name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.

#### Responses

*   **200** Storefront successfully retrieved.
    
    Media type: `application/json`. Schema: `Storefront`.
    
    _Example: StorefrontSuccess_ Successful storefront retrieval
    
    Example of a successful response returning a single storefront.
    
    ```
    {
      "storefrontId": "market-street-a1b2c3",
      "storefrontName": "MarketStreet",
      "type": "storefront_next",
      "setupStatus": "success",
      "sites": [
        "MarketStreet"
      ],
      "creationDate": "2026-04-08T21:47:28.188965Z",
      "lastModified": "2026-04-08T21:47:31.307595Z"
    }
    ```
    
*   **401** Your access token is invalid or expired and can’t be used to identify a user.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: UnauthorizedExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
      "title": "Unauthorized",
      "detail": "Unauthorized request"
    }
    ```
    
*   **403** Forbidden. Your access token is valid, but you don’t have the required permissions to access the resource.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: ForbiddenExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/forbidden",
      "title": "Forbidden",
      "detail": "Access to requested resource forbidden"
    }
    ```
    
*   **404** We couldn't find the requested storefront.
    
    Media type: `application/problem+json`. Schema: `StorefrontNotFoundErrorResponse`.
    
    _Example: StorefrontNotFoundErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-not-found",
      "detail": "We couldn't find storefront my-storefront-a1b2c3.",
      "title": "Storefront Not Found"
    }
    ```
    

### DELETE Delete a storefront.

`DELETE /organizations/{organizationId}/storefronts/{storefrontId}`

Operation ID: `deleteStorefront`. Security: AmOAuth2 (sfcc.storefront.storefronts.rw).

Queues deletion of the storefront. Returns immediately with the storefront resource in the delete\_in\_progress setup status. Poll the storefront by ID to track deletion progress.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `storefrontId` (path, string, required) The storefront identifier that B2C Commerce generates based on the provided storefront name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.

#### Responses

*   **202** Storefront deletion successfully queued.
    
    Media type: `application/json`. Schema: `Storefront`.
    
    _Example: StorefrontDeleteAcceptedSuccess_ Successful storefront deletion request
    
    Example of a successful response when a storefront is queued for deletion (202 Accepted).
    
    ```
    {
      "storefrontId": "market-street-a1b2c3",
      "storefrontName": "MarketStreet",
      "type": "storefront_next",
      "setupStatus": "delete_in_progress",
      "sites": [
        "MarketStreet"
      ],
      "creationDate": "2026-04-08T21:47:28.188965Z",
      "lastModified": "2026-04-09T09:30:00.000000Z"
    }
    ```
    
*   **401** Your access token is invalid or expired and can’t be used to identify a user.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: UnauthorizedExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
      "title": "Unauthorized",
      "detail": "Unauthorized request"
    }
    ```
    
*   **403** Forbidden. Your access token is valid, but you don’t have the required permissions to access the resource.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: ForbiddenExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/forbidden",
      "title": "Forbidden",
      "detail": "Access to requested resource forbidden"
    }
    ```
    
*   **404** We couldn't find the requested storefront.
    
    Media type: `application/problem+json`. Schema: `StorefrontNotFoundErrorResponse`.
    
    _Example StorefrontNotFoundErrorResponseExample: same as GET /organizations/{organizationId}/storefronts/{storefrontId} 404 response._
    
*   **409** We couldn't delete the storefront because a deletion of this storefront is already in progress.
    
    Media type: `application/problem+json`. Schema: `StorefrontBusyErrorResponse`.
    
    _Example: StorefrontBusyErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-busy",
      "detail": "There is an ongoing deletion for storefront 'my-storefront-a1b2c3'.",
      "title": "Storefront Busy"
    }
    ```
    

### PATCH Update a storefront.

`PATCH /organizations/{organizationId}/storefronts/{storefrontId}`

Operation ID: `updateStorefront`. Security: AmOAuth2 (sfcc.storefront.storefronts.rw).

Updates a storefront. Every field is optional and only the supplied fields are changed. When `sites` is provided it replaces the storefront's full set of assigned sites—a complete replacement, not an incremental update—so the request body must contain the complete desired set of site IDs. The `ssrRegion`, `ssrArchitecture`, `allowCookies`, and `preserveProxyUserAgent` fields update the storefront's default configuration.

#### Parameters

*   `organizationId` (path, OrganizationId, required) An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).
    
    _Example_
    
    ```
    f_ecom_zzxy_prd
    ```
    
*   `storefrontId` (path, string, required) The storefront identifier that B2C Commerce generates based on the provided storefront name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.

#### Request body (required)

Media type: `application/json`. Schema: `StorefrontUpdateRequest`.

_Example: UpdateStorefront_ Replace a storefront's site assignment

Replace the full set of sites assigned to a storefront.

```
{
  "sites": [
    "MarketStreet",
    "BeautyStreet"
  ]
}
```

_Example: UpdateStorefrontConfiguration_ Update a storefront's default configuration

Update the storefront's default SSR and proxy configuration without changing its site assignment. Every field is optional.

```
{
  "ssrRegion": "us_east_2",
  "ssrArchitecture": "arm64",
  "allowCookies": true,
  "preserveProxyUserAgent": false
}
```

#### Responses

*   **200** Storefront successfully updated.
    
    Media type: `application/json`. Schema: `Storefront`.
    
    _Example: StorefrontUpdatedSuccess_ Successful storefront site-assignment update
    
    Example of a successful response after replacing a storefront's site assignment.
    
    ```
    {
      "storefrontId": "market-street-a1b2c3",
      "storefrontName": "MarketStreet",
      "type": "storefront_next",
      "setupStatus": "success",
      "sites": [
        "MarketStreet",
        "BeautyStreet"
      ],
      "creationDate": "2026-04-08T21:47:28.188965Z",
      "lastModified": "2026-04-09T09:00:00.000000Z"
    }
    ```
    
*   **400** Bad Request. The storefront update request body is invalid.
    
    Media type: `application/problem+json`. Schema: `InvalidStorefrontUpdateRequestErrorResponse | StorefrontSsrRegionDisabledErrorResponse | StorefrontSsrArchitectureNotEnabledErrorResponse | StorefrontSsrArchitectureX86EndOfLifeErrorResponse`.
    
    One of: `InvalidStorefrontUpdateRequestErrorResponse`, `StorefrontSsrRegionDisabledErrorResponse`, `StorefrontSsrArchitectureNotEnabledErrorResponse`, `StorefrontSsrArchitectureX86EndOfLifeErrorResponse`.
    
    _Example: InvalidStorefrontUpdateRequestErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/invalid-storefront-update-request",
      "detail": "The storefront update request body is invalid.",
      "title": "Invalid Storefront Update Request"
    }
    ```
    
    _Example: StorefrontSsrRegionDisabledErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-ssr-region-disabled",
      "detail": "SSR region 'eu_south_1' is temporarily disabled. Choose a different region.",
      "title": "Storefront Ssr Region Disabled"
    }
    ```
    
    _Example: StorefrontSsrArchitectureNotEnabledErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-ssr-architecture-not-enabled",
      "detail": "The Server-Side Rendering architecture configuration isn't enabled for this organization.",
      "title": "Storefront Ssr Architecture Not Enabled"
    }
    ```
    
    _Example: StorefrontSsrArchitectureX86EndOfLifeErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-ssr-architecture-x86-end-of-life",
      "detail": "x86 is past end-of-life and can no longer be selected. Use arm64.",
      "title": "Storefront Ssr Architecture X86 End Of Life"
    }
    ```
    
*   **401** Your access token is invalid or expired and can’t be used to identify a user.
    
    Media type: `application/problem+json`. Schema: `ErrorResponse`.
    
    _Example: UnauthorizedExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
      "title": "Unauthorized",
      "detail": "Unauthorized request"
    }
    ```
    
*   **403** Forbidden. The requested storefront update is not permitted.
    
    Media type: `application/problem+json`. Schema: `StorefrontAllowCookiesBlockedErrorResponse`.
    
    _Example: StorefrontAllowCookiesBlockedErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-allow-cookies-blocked",
      "detail": "You can't modify Allow Cookies for Storefront Next. Cookies are always enabled.",
      "title": "Storefront Allow Cookies Blocked"
    }
    ```
    
*   **404** We couldn't find the requested storefront.
    
    Media type: `application/problem+json`. Schema: `StorefrontNotFoundErrorResponse`.
    
    _Example StorefrontNotFoundErrorResponseExample: same as GET /organizations/{organizationId}/storefronts/{storefrontId} 404 response._
    
*   **409** We couldn't update the storefront's site assignment due to a conflict.
    
    Media type: `application/problem+json`. Schema: `StorefrontSiteCollisionErrorResponse | StorefrontInvalidStateForUpdateErrorResponse`.
    
    One of: `StorefrontSiteCollisionErrorResponse`, `StorefrontInvalidStateForUpdateErrorResponse`.
    
    _Example StorefrontSiteCollisionErrorResponseExample: same as POST /organizations/{organizationId}/storefronts 409 response._
    
    _Example: StorefrontInvalidStateForUpdateErrorResponseExample_
    
    ```
    {
      "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-invalid-state-for-update",
      "detail": "Storefront 'my-storefront-a1b2c3' can't be updated while its setup status is 'in_progress'.",
      "title": "Storefront Invalid State For Update"
    }
    ```
    

## Schemas

### OrganizationId

An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f\_ecom\_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id).

Type: `string`.

Pattern: ^f\_ecom\_\[a-z\]{4}\_(prd|stg|dev|s\[0-9\]{2}|\[0-9\]{3})$. Example: `f_ecom_zzxy_prd`.

### StorefrontResult

Result containing a paginated list of storefronts.

Includes all fields of `PaginatedResultBase`.

*   `data` (_array of Storefront_, required) The list of storefronts. This field can be empty.

### ErrorResponse

*   `title` (_string_, required) A short, human-readable summary of the problem type. It will not change from occurrence to occurrence of the problem, except for purposes of localization  
    Maximum length: 256. Example: `You do not have enough credit`.
*   `type` (_string_, required) A URI reference \[RFC3986\] that identifies the problem type. This specification encourages that, when dereferenced, it provide human-readable documentation for the problem type (e.g., using HTML \[W3C.REC-html5-20141028\]). When this member is not present, its value is assumed to be "about:blank". It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
    Maximum length: 2048. Example: `NotEnoughMoney`.
*   `detail` (_string_, required) A human-readable explanation specific to this occurrence of the problem.  
    Example: `Your current balance is 30, but that costs 50`.
*   `instance` (_string_) A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. It accepts relative URIs; this means that they must be resolved relative to the document's base URI, as per \[RFC3986\], Section 5.  
    Maximum length: 2048. Example: `/account/12345/msgs/abc`.

### StorefrontCreateRequest

Request body for creating a storefront.

*   `storefrontName` (_string_, required) The name to assign to the new storefront. Must be unique within the organization.  
    Minimum length: 1. Maximum length: 64. Example: `my-storefront`.
*   `type` (_StorefrontCreateType_, required)
*   `sites` (_array of SiteId_, required) The IDs of existing sites to assign to the storefront. At least one site is required.  
    Minimum items: 1.
    
    _Example_
    
    ```
    [
      "RefArch"
    ]
    ```
    

### Storefront

A storefront represents a provisioned Storefront Next or PWA Kit Composable storefront, its type, and the sites assigned to it.

*   `storefrontId` (_string_, required) A storefront identifier that B2C Commerce generates based on the provided storefront name. The storefront ID is unique within the organization. It consists only of lowercase letters, numbers, and hyphens, with no leading or trailing hyphens.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.
*   `storefrontName` (_string_, required) The storefront name that you specify when creating a storefront. Must be 64 characters or fewer.  
    Minimum length: 1. Maximum length: 64. Example: `my-storefront`.
*   `type` (_StorefrontType_, required)
*   `setupStatus` (_StorefrontSetupStatus_, required)
*   `sites` (_array of SiteId_) The IDs of the existing sites assigned to this storefront. By default a site can be assigned to only one storefront. Storefronts of type `pwa_kit` are exempt from this restriction and may share a site with another storefront.
    
    _Example_
    
    ```
    [
      "RefArch"
    ]
    ```
    
*   `creationDate` (_string (date-time)_) The timestamp when the storefront was created.  
    Example: `2026-04-08T21:47:28.188965Z`.
*   `lastModified` (_string (date-time)_) The timestamp when the storefront was last modified.  
    Example: `2026-04-08T21:47:31.307595Z`.
*   `ssrRegion` (_SsrRegion_)
*   `ssrArchitecture` (_string_, nullable) The default architecture for the server-side rendering function of environments newly created under this storefront. Null when no architecture default is configured.  
    Allowed values: `x86`, `arm64`. Example: `arm64`.
*   `allowCookies` (_boolean_) Whether cookies are allowed for the storefront. Always enabled for Storefront Next storefronts.  
    Example: `true`.
*   `preserveProxyUserAgent` (_boolean_) Whether the end-user's User-Agent header is preserved on requests forwarded through the storefront's configured proxies.  
    Example: `false`.

### InvalidStorefrontCreateRequestErrorResponse

Returned when the storefront creation request body is malformed or missing required fields.

Includes all fields of `ErrorResponse`.

### StorefrontSiteNotFoundErrorResponse

Returned when a site in the storefront creation request does not exist.

Includes all fields of `ErrorResponse`.

*   `siteId` (_string_) The identifier of the site that couldn't be found.  
    Minimum length: 1. Maximum length: 32. Example: `RefArch`.

### StorefrontAlreadyExistsErrorResponse

Returned when a storefront with the requested storefrontName already exists in the organization.

Includes all fields of `ErrorResponse`.

*   `storefrontName` (_string_) The identifier that was already in use.  
    Minimum length: 1. Maximum length: 64. Example: `my-storefront`.

### StorefrontSiteCollisionErrorResponse

Returned when a site in the request is already assigned to a different storefront. Only storefronts of type pwa\_kit are exempt from this restriction.

Includes all fields of `ErrorResponse`.

*   `siteId` (_string_) The identifier of the site that is already assigned elsewhere.  
    Minimum length: 1. Maximum length: 32. Example: `RefArch`.

### StorefrontNotFoundErrorResponse

Returned when the requested storefront does not exist for this organization.

Includes all fields of `ErrorResponse`.

*   `storefrontId` (_string_) The identifier of the storefront that couldn't be found.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.

### StorefrontBusyErrorResponse

Returned when a storefront deletion cannot proceed because a deletion of this storefront is already in progress. Retry once the in-progress deletion completes.

Includes all fields of `ErrorResponse`.

*   `storefrontId` (_string_) The identifier of the storefront whose deletion was requested.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.

### StorefrontUpdateRequest

Request body for updating a storefront. Every field is optional and only the supplied fields are changed. When `sites` is provided it is a complete replacement of the storefront's site assignment, not an incremental update—supply the full set of site IDs.

*   `sites` (_array of SiteId_) The complete set of site IDs assigned to the storefront, replacing any previous assignment. When provided, at least one site is required.  
    Minimum items: 1.
    
    _Example_
    
    ```
    [
      "RefArch"
    ]
    ```
    
*   `ssrRegion` (_SsrRegion_)
*   `ssrArchitecture` (_string_, nullable) The default architecture for the server-side rendering function of environments newly created under this storefront. Set to null to clear the architecture default.  
    Allowed values: `x86`, `arm64`. Example: `arm64`.
*   `allowCookies` (_boolean_) Whether cookies are allowed for the storefront. Cannot be modified for Storefront Next storefronts, where cookies are always enabled.  
    Example: `true`.
*   `preserveProxyUserAgent` (_boolean_) Whether the end-user's User-Agent header is preserved on requests forwarded through the storefront's configured proxies.  
    Example: `false`.

### InvalidStorefrontUpdateRequestErrorResponse

Returned when the storefront update request body is malformed, contains an unsupported value (for example an invalid ssrRegion or ssrArchitecture), or supplies an empty sites list.

Includes all fields of `ErrorResponse`.

### StorefrontSsrRegionDisabledErrorResponse

Returned when the requested ssrRegion is in the temporarily disabled set.

Includes all fields of `ErrorResponse`.

*   `ssrRegion` (_string_) The identifier of the SSR region that is temporarily disabled.  
    Maximum length: 32. Example: `eu_south_1`.

### StorefrontSsrArchitectureNotEnabledErrorResponse

Returned when the x86 ssrArchitecture is requested but the organization is not permitted to configure the SSR architecture.

Includes all fields of `ErrorResponse`.

### StorefrontSsrArchitectureX86EndOfLifeErrorResponse

Returned when the x86 ssrArchitecture is requested after its end-of-life date and the organization has no active grace period.

Includes all fields of `ErrorResponse`.

### StorefrontAllowCookiesBlockedErrorResponse

Returned when allowCookies is changed on a Storefront Next storefront, where cookies are always enabled.

Includes all fields of `ErrorResponse`.

### StorefrontInvalidStateForUpdateErrorResponse

Returned when a site-assignment update is requested for a storefront whose setupStatus is not success.

Includes all fields of `ErrorResponse`.

*   `storefrontId` (_string_) The identifier of the storefront that cannot be updated.  
    Minimum length: 1. Maximum length: 20. Pattern: ^\[a-z0-9\]+(?:-+\[a-z0-9\]+)\*$. Example: `my-storefront-a1b2c3`.
*   `setupStatus` (_string_) The storefront's current setup status, which is not success.  
    Allowed values: `in_progress`, `backfilled`, `failed`, `delete_in_progress`, `delete_failed`, `deleted`, `unknown`. Example: `in_progress`.

### PaginatedResultBase

Schema defining generic pageable result. Each response schema of a resource requiring pagination should extend this schema. If you use this extend this schema directly, it needs to be defined what data is returned. Allowed names for the data field is `data`.

Includes all fields of `ResultBase`.

*   `offset` (_Offset_, required)

### StorefrontCreateType

The type of storefront to create. Only `storefront_next` is currently supported by the create-new-storefront flow.

Type: `string`.

Allowed values: `storefront_next`. Example: `storefront_next`.

### SiteId

The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites

Type: `string`.

Minimum length: 1. Maximum length: 32. Example: `RefArch`.

### StorefrontType

The type of the storefront. `unknown` is a legacy fallback for existing records with no recorded type; it is never a valid value on create.

Type: `string`.

Allowed values: `storefront_next`, `pwa_kit`, `headless`, `unknown`. Example: `storefront_next`.

### StorefrontSetupStatus

The current provisioning/lifecycle status of the storefront.

Type: `string`.

Allowed values: `in_progress`, `success`, `backfilled`, `failed`, `delete_in_progress`, `delete_failed`, `deleted`, `unknown`. Example: `success`.

### SsrRegion

The default AWS region for server-side rendering functions of environments newly created under this storefront. Each value corresponds to the AWS region of the same name with underscores substituted for hyphens (for example, `us_east_2` is the AWS region `us-east-2`).

Type: `string`.

Allowed values: `us_east_1`, `us_east_2`, `us_west_1`, `us_west_2`, `ap_south_1`, `ap_south_2`, `ap_northeast_2`, `ap_southeast_1`, `ap_southeast_2`, `ap_southeast_3`, `ap_northeast_1`, `ap_northeast_3`, `ca_central_1`, `eu_central_1`, `eu_central_2`, `eu_west_1`, `eu_west_2`, `eu_west_3`, `eu_north_1`, `eu_south_1`, `sa_east_1`. Example: `us_east_2`.

### ResultBase

Schema defining generic list result. Each response schema of a resource requiring a list response should extend this schema. Additionally it needs to be defined what data is returned.

*   `limit` (_integer (int32)_, required) Maximum records to retrieve per request. The limit with its constraints (minimum, maximum, default) is defined by the request parameter `limit` of the endpoint returning this schema.  
    Example: `10`.
*   `total` (_Total_, required)

### Offset

The zero-based index of the first hit/data to include in the result.

Type: `integer (int32)`.

Default: `0`. Minimum: 0. Example: `0`.

### Total

The total number of hits that match the search's criteria. This can be greater than the number of results returned as search results are pagenated.

Type: `integer (int32)`.

Default: `0`. Minimum: 0. Example: `10`.