@salesforce/b2c-tooling-sdk 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/data/guides/enrichment.json +291 -0
  2. package/data/guides/index.json +426 -37
  3. package/data/schemas/dw.schema.json +590 -0
  4. package/data/tooling/index.json +18 -9
  5. package/dist/esm/cli/base-command.d.ts +20 -1
  6. package/dist/esm/cli/base-command.js +61 -11
  7. package/dist/esm/cli/base-command.js.map +1 -1
  8. package/dist/esm/cli/cartridge-command.js +2 -1
  9. package/dist/esm/cli/cartridge-command.js.map +1 -1
  10. package/dist/esm/cli/command-search.d.ts +85 -0
  11. package/dist/esm/cli/command-search.js +147 -0
  12. package/dist/esm/cli/command-search.js.map +1 -0
  13. package/dist/esm/cli/config.d.ts +10 -1
  14. package/dist/esm/cli/config.js +18 -9
  15. package/dist/esm/cli/config.js.map +1 -1
  16. package/dist/esm/cli/hooks.d.ts +13 -0
  17. package/dist/esm/cli/hooks.js +11 -0
  18. package/dist/esm/cli/hooks.js.map +1 -1
  19. package/dist/esm/cli/index.d.ts +2 -0
  20. package/dist/esm/cli/index.js +2 -0
  21. package/dist/esm/cli/index.js.map +1 -1
  22. package/dist/esm/cli/instance-command.d.ts +1 -0
  23. package/dist/esm/cli/instance-command.js +2 -1
  24. package/dist/esm/cli/instance-command.js.map +1 -1
  25. package/dist/esm/cli/mrt-command.d.ts +3 -2
  26. package/dist/esm/cli/mrt-command.js +4 -4
  27. package/dist/esm/cli/mrt-command.js.map +1 -1
  28. package/dist/esm/cli/oauth-command.d.ts +1 -0
  29. package/dist/esm/cli/ods-command.d.ts +1 -0
  30. package/dist/esm/cli/webdav-command.d.ts +1 -0
  31. package/dist/esm/clients/custom-apis.d.ts +36 -2
  32. package/dist/esm/clients/custom-apis.js +57 -4
  33. package/dist/esm/clients/custom-apis.js.map +1 -1
  34. package/dist/esm/clients/index.d.ts +1 -1
  35. package/dist/esm/clients/index.js +1 -1
  36. package/dist/esm/clients/index.js.map +1 -1
  37. package/dist/esm/clients/scapi-backend-utils.d.ts +15 -0
  38. package/dist/esm/clients/scapi-backend-utils.js +28 -1
  39. package/dist/esm/clients/scapi-backend-utils.js.map +1 -1
  40. package/dist/esm/clients/scapi-fallback-backend.js +2 -2
  41. package/dist/esm/clients/scapi-fallback-backend.js.map +1 -1
  42. package/dist/esm/clients/scapi-schemas.generated.d.ts +2 -2
  43. package/dist/esm/compat/dispatcher.js +2 -2
  44. package/dist/esm/compat/dispatcher.js.map +1 -1
  45. package/dist/esm/config/config-origins.d.ts +19 -0
  46. package/dist/esm/config/config-origins.js +11 -0
  47. package/dist/esm/config/config-origins.js.map +1 -0
  48. package/dist/esm/config/config-write.d.ts +86 -0
  49. package/dist/esm/config/config-write.js +296 -0
  50. package/dist/esm/config/config-write.js.map +1 -0
  51. package/dist/esm/config/dw-json-schema.d.ts +14 -0
  52. package/dist/esm/config/dw-json-schema.js +269 -0
  53. package/dist/esm/config/dw-json-schema.js.map +1 -0
  54. package/dist/esm/config/dw-json.d.ts +2 -0
  55. package/dist/esm/config/dw-json.js +10 -6
  56. package/dist/esm/config/dw-json.js.map +1 -1
  57. package/dist/esm/config/index.d.ts +13 -4
  58. package/dist/esm/config/index.js +8 -3
  59. package/dist/esm/config/index.js.map +1 -1
  60. package/dist/esm/config/instance-manager.d.ts +64 -28
  61. package/dist/esm/config/instance-manager.js +145 -63
  62. package/dist/esm/config/instance-manager.js.map +1 -1
  63. package/dist/esm/config/mapping.d.ts +5 -0
  64. package/dist/esm/config/mapping.js +20 -1
  65. package/dist/esm/config/mapping.js.map +1 -1
  66. package/dist/esm/config/project-environment.d.ts +62 -0
  67. package/dist/esm/config/project-environment.js +113 -0
  68. package/dist/esm/config/project-environment.js.map +1 -1
  69. package/dist/esm/config/resolver.d.ts +22 -0
  70. package/dist/esm/config/resolver.js +106 -37
  71. package/dist/esm/config/resolver.js.map +1 -1
  72. package/dist/esm/config/sources/dw-json-source.d.ts +9 -1
  73. package/dist/esm/config/sources/dw-json-source.js +59 -23
  74. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  75. package/dist/esm/config/sources/env-source.d.ts +70 -9
  76. package/dist/esm/config/sources/env-source.js +205 -47
  77. package/dist/esm/config/sources/env-source.js.map +1 -1
  78. package/dist/esm/config/sources/index.d.ts +1 -1
  79. package/dist/esm/config/sources/index.js +1 -1
  80. package/dist/esm/config/sources/index.js.map +1 -1
  81. package/dist/esm/config/types.d.ts +53 -3
  82. package/dist/esm/docs/search.js +3 -1
  83. package/dist/esm/docs/search.js.map +1 -1
  84. package/dist/esm/docs/types.d.ts +3 -1
  85. package/dist/esm/guidance/bundle.d.ts +33 -0
  86. package/dist/esm/guidance/bundle.js +268 -0
  87. package/dist/esm/guidance/bundle.js.map +1 -0
  88. package/dist/esm/guidance/catalog.d.ts +8 -1
  89. package/dist/esm/guidance/catalog.js +48 -6
  90. package/dist/esm/guidance/catalog.js.map +1 -1
  91. package/dist/esm/guidance/index.d.ts +1 -0
  92. package/dist/esm/guidance/index.js +1 -0
  93. package/dist/esm/guidance/index.js.map +1 -1
  94. package/dist/esm/guidance/types.d.ts +17 -1
  95. package/dist/esm/guidance/types.js.map +1 -1
  96. package/dist/esm/index.d.ts +1 -1
  97. package/dist/esm/index.js +1 -1
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/operations/jobs/run-system-job.js +2 -2
  100. package/dist/esm/operations/jobs/run-system-job.js.map +1 -1
  101. package/dist/esm/plugins/discovery.js +2 -1
  102. package/dist/esm/plugins/discovery.js.map +1 -1
  103. package/dist/esm/scapi/catalog.d.ts +5 -2
  104. package/dist/esm/scapi/catalog.js.map +1 -1
  105. package/dist/esm/scapi/index.d.ts +6 -2
  106. package/dist/esm/scapi/index.js +4 -2
  107. package/dist/esm/scapi/index.js.map +1 -1
  108. package/dist/esm/scapi/live.d.ts +14 -3
  109. package/dist/esm/scapi/live.js +33 -5
  110. package/dist/esm/scapi/live.js.map +1 -1
  111. package/dist/esm/scapi/local.d.ts +26 -0
  112. package/dist/esm/scapi/local.js +143 -0
  113. package/dist/esm/scapi/local.js.map +1 -0
  114. package/dist/esm/scapi/request.d.ts +2 -2
  115. package/dist/esm/scapi/request.js +4 -2
  116. package/dist/esm/scapi/request.js.map +1 -1
  117. package/dist/esm/scapi/runtime.d.ts +5 -0
  118. package/dist/esm/scapi/runtime.js.map +1 -1
  119. package/dist/esm/scapi/schema-source.d.ts +90 -0
  120. package/dist/esm/scapi/schema-source.js +146 -0
  121. package/dist/esm/scapi/schema-source.js.map +1 -0
  122. package/dist/esm/scapi/worker-source.js +31 -7
  123. package/dist/esm/scapi/worker-source.js.map +1 -1
  124. package/dist/esm/telemetry/telemetry.d.ts +1 -0
  125. package/dist/esm/telemetry/telemetry.js +18 -1
  126. package/dist/esm/telemetry/telemetry.js.map +1 -1
  127. package/dist/esm/telemetry/types.d.ts +9 -0
  128. package/dist/esm/test-utils/config-isolation.js +21 -15
  129. package/dist/esm/test-utils/config-isolation.js.map +1 -1
  130. package/dist/esm/ux/agent-context.d.ts +69 -0
  131. package/dist/esm/ux/agent-context.js +133 -0
  132. package/dist/esm/ux/agent-context.js.map +1 -0
  133. package/dist/esm/ux/confirm.d.ts +27 -0
  134. package/dist/esm/ux/confirm.js +32 -0
  135. package/dist/esm/ux/confirm.js.map +1 -1
  136. package/dist/esm/ux/index.d.ts +2 -1
  137. package/dist/esm/ux/index.js +2 -1
  138. package/dist/esm/ux/index.js.map +1 -1
  139. package/node_modules/@salesforce/b2c-api-schemas/manifest.json +83 -42
  140. package/node_modules/@salesforce/b2c-api-schemas/package.json +1 -1
  141. package/node_modules/@salesforce/b2c-api-schemas/scapi/cdn/zones/v1.json +6798 -238
  142. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/orders/v1.json +2296 -205
  143. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v1.json +5571 -666
  144. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v2.json +6062 -371
  145. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-orders/v1.json +3426 -360
  146. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-payments/v1.json +351 -99
  147. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/cors/v1.json +172 -12
  148. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/preferences/v1.json +1497 -111
  149. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/shopper-configurations/v1.json +202 -36
  150. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/timeouts/v1.json +79 -10
  151. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/custom-objects/v1.json +785 -49
  152. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/shopper-custom-objects/v1.json +191 -40
  153. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/customers/v1.json +1483 -107
  154. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/shopper-customers/v1.json +4854 -787
  155. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/custom-apis/v1.json +119 -15
  156. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/object-definitions/v1.json +1699 -80
  157. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scapi-schemas/v1.json +252 -18
  158. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scripts/v1.json +329 -23
  159. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/experiences/v1.json +4208 -234
  160. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/shopper-experience/v1.json +1591 -247
  161. package/node_modules/@salesforce/b2c-api-schemas/scapi/intelligence/analytics/v1.json +396 -8
  162. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/availability/v1.json +1242 -69
  163. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/impex/v1.json +2354 -248
  164. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/reservation/v1.json +1550 -45
  165. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/segmentation/v1.json +6615 -0
  166. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/roles/v1.json +1520 -59
  167. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/users/v1.json +397 -17
  168. package/node_modules/@salesforce/b2c-api-schemas/scapi/observability/metrics/v1.json +1241 -27
  169. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/jobs/v1.json +1069 -68
  170. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/replications/v1.json +410 -23
  171. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/assignments/v1.json +502 -102
  172. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/campaigns/v1.json +1112 -94
  173. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/coupons/v1.json +820 -93
  174. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/gift-certificates/v1.json +845 -92
  175. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/promotions/v1.json +2716 -674
  176. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-gift-certificates/v1.json +130 -47
  177. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-promotions/v1.json +233 -63
  178. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/source-code-groups/v1.json +630 -70
  179. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/catalogs/v1.json +2886 -348
  180. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/inventory-lists/v1.json +520 -19
  181. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/price-books/v1.json +3115 -293
  182. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/products/v1.json +3313 -138
  183. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-availability/v1.json +266 -52
  184. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-delivery-estimates/v1.json +256 -48
  185. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-products/v1.json +1744 -306
  186. package/node_modules/@salesforce/b2c-api-schemas/scapi/search/shopper-search/v1.json +1661 -120
  187. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth/v1.json +2174 -118
  188. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth-admin/v1.json +1373 -24
  189. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/consents/v1.json +531 -20
  190. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-agents/v1.json +154 -6
  191. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-consents/v1.json +596 -79
  192. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-context/v1.json +456 -42
  193. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/seo/v1.json +101 -23
  194. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/shopper-seo/v1.json +184 -41
  195. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/sites/v1.json +995 -47
  196. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/shopper-stores/v1.json +370 -67
  197. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/store-redirect-mappings/v1.json +319 -11
  198. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/stores/v1.json +1109 -64
  199. package/node_modules/@salesforce/b2c-api-schemas/scapi/storefront/deployments/v1.json +1442 -0
  200. package/node_modules/@salesforce/b2c-api-schemas/scapi/storefront/environments/v1.json +4293 -0
  201. package/node_modules/@salesforce/b2c-api-schemas/scapi/storefront/storefronts/v1.json +1371 -0
  202. package/package.json +5 -2
  203. package/specs/scapi-schemas-v1.yaml +4 -1
@@ -0,0 +1,4293 @@
1
+ {
2
+ "openapi": "3.0.3",
3
+ "info": {
4
+ "title": "Environments",
5
+ "description": "[Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/storefront/environments-oas-v1-public.yaml)\n\n# API Overview\n\nThe Environments API provides B2C Commerce (SCAPI)-native access to Managed Runtime (MRT) environment data for Storefront Next and PWA Kit storefronts. It replaces the Business Manager UI and partial data API setup flow. The B2C CLI and other tooling can use it for end-to-end automation.\n\n- **Environment tasks** — create, retrieve, list, update (display name and server-side rendering configuration), delete environments belonging to a storefront, and clone or promote them.\n- **Cache invalidations** — trigger a CDN cache invalidation on an environment by path prefix.\n- **Environment variables** — read and merge-update the customer-defined key/value configuration on an environment.\n- **Access control headers** — create, read, and delete header-based access control rules on an environment.\n- **Redirects** — create, list, read, update, delete, and clone URL redirect rules on an environment.\n\nEnvironment 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.\n\n## Authentication & Authorization\n\nRequests are authenticated with Account Manager OAuth 2.0 bearer tokens (`AmOAuth2`). Access is governed by the Environments API scopes: `sfcc.storefront.environments` grants read-only access, and `sfcc.storefront.environments.rw` grants read and write access. Read operations (`GET`) accept either scope. Write operations (`POST`, `PATCH`, `PUT`, `DELETE`) require the `.rw` variant.\n\n## Idempotency\n\n- `POST .../environments`: This operation isn't idempotent, in effect or response. `environmentId` is server-generated, so there is no client-supplied key to reject a retry against. Each call creates a new, distinct environment.\n- `PATCH .../environments/{environmentId}`: This operation is idempotent. It is a partial update — only the supplied fields are changed. Repeating an identical request produces the same resulting state.\n- `DELETE .../environments/{environmentId}`: This operation is idempotent in effect, but not in response code. The first call queues deletion (202). Once deletion completes, retrying returns 404. Deleting an environment that is still `building` or `deleting` returns 409 (`EnvironmentBusyErrorResponse`) rather than queuing a duplicate deletion.\n- `PUT .../environments/{environmentId}/primary`: This operation is idempotent. Setting an already-primary environment as primary again has no effect and returns 200.\n\n## Use Cases\n\n- Provision a storefront's environments.\n- Clone an existing environment to stand up a new one with matching configuration.\n- Poll environment status during asynchronous provisioning or teardown.\n- Promote an environment to be the storefront's primary environment.\n- Decommission environments belonging to a storefront.\n- Purge stale content from a storefront's CDN after a release.\n- Manage environment variables, access control headers, and redirects as part of storefront development and administration.",
6
+ "version": "1.0.5",
7
+ "x-api-type": "Admin",
8
+ "x-api-family": "Storefront"
9
+ },
10
+ "servers": [
11
+ {
12
+ "url": "https://{shortCode}.api.commercecloud.salesforce.com/storefront/environments/v1",
13
+ "variables": {
14
+ "shortCode": {
15
+ "default": "123456gf"
16
+ }
17
+ }
18
+ }
19
+ ],
20
+ "paths": {
21
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments": {
22
+ "get": {
23
+ "summary": "Get environments for a storefront.",
24
+ "description": "Retrieves the list of environments belonging to the specified storefront, ordered by creationDate in ascending order.",
25
+ "operationId": "getEnvironmentsForStorefront",
26
+ "parameters": [
27
+ {
28
+ "name": "organizationId",
29
+ "in": "path",
30
+ "description": "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).",
31
+ "required": true,
32
+ "style": "simple",
33
+ "explode": false,
34
+ "schema": {
35
+ "$ref": "#/components/schemas/OrganizationId"
36
+ },
37
+ "example": "f_ecom_zzxy_prd"
38
+ },
39
+ {
40
+ "name": "storefrontId",
41
+ "in": "path",
42
+ "description": "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.",
43
+ "required": true,
44
+ "style": "simple",
45
+ "explode": false,
46
+ "schema": {
47
+ "type": "string",
48
+ "example": "my-storefront-a1b2c3",
49
+ "maxLength": 20,
50
+ "minLength": 1,
51
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
52
+ }
53
+ },
54
+ {
55
+ "name": "limit",
56
+ "in": "query",
57
+ "description": "Number of records to retrieve per request. Must be between 1 (minimum) and 200 (maximum). Defaults to 25.",
58
+ "required": false,
59
+ "style": "form",
60
+ "explode": true,
61
+ "schema": {
62
+ "type": "integer",
63
+ "format": "int32",
64
+ "default": 25,
65
+ "maximum": 200,
66
+ "minimum": 1
67
+ }
68
+ },
69
+ {
70
+ "name": "offset",
71
+ "in": "query",
72
+ "description": "Used to retrieve the results based on a particular resource offset.",
73
+ "required": false,
74
+ "style": "form",
75
+ "explode": true,
76
+ "schema": {
77
+ "type": "integer",
78
+ "format": "int32",
79
+ "default": 0,
80
+ "minimum": 0
81
+ }
82
+ }
83
+ ],
84
+ "responses": {
85
+ "200": {
86
+ "description": "List of environments successfully retrieved.",
87
+ "content": {
88
+ "application/json": {
89
+ "schema": {
90
+ "$ref": "#/components/schemas/EnvironmentResult"
91
+ },
92
+ "examples": {
93
+ "EnvironmentListSuccess": {
94
+ "$ref": "#/components/examples/EnvironmentListSuccess"
95
+ }
96
+ }
97
+ }
98
+ }
99
+ },
100
+ "401": {
101
+ "$ref": "#/components/responses/401unauthorized"
102
+ },
103
+ "403": {
104
+ "$ref": "#/components/responses/403forbidden"
105
+ },
106
+ "404": {
107
+ "$ref": "#/components/responses/404NotFound_Storefront"
108
+ }
109
+ },
110
+ "security": [
111
+ {
112
+ "AmOAuth2": [
113
+ "sfcc.storefront.environments",
114
+ "sfcc.storefront.environments.rw"
115
+ ]
116
+ }
117
+ ]
118
+ },
119
+ "post": {
120
+ "summary": "Create an environment for a storefront.",
121
+ "description": "Queues creation of a new environment for the specified storefront. Returns immediately with the environment resource in the building status. Poll the environment by ID to track provisioning progress.",
122
+ "operationId": "createEnvironmentForStorefront",
123
+ "parameters": [
124
+ {
125
+ "name": "organizationId",
126
+ "in": "path",
127
+ "description": "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).",
128
+ "required": true,
129
+ "style": "simple",
130
+ "explode": false,
131
+ "schema": {
132
+ "$ref": "#/components/schemas/OrganizationId"
133
+ },
134
+ "example": "f_ecom_zzxy_prd"
135
+ },
136
+ {
137
+ "name": "storefrontId",
138
+ "in": "path",
139
+ "description": "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.",
140
+ "required": true,
141
+ "style": "simple",
142
+ "explode": false,
143
+ "schema": {
144
+ "type": "string",
145
+ "example": "my-storefront-a1b2c3",
146
+ "maxLength": 20,
147
+ "minLength": 1,
148
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
149
+ }
150
+ }
151
+ ],
152
+ "requestBody": {
153
+ "content": {
154
+ "application/json": {
155
+ "schema": {
156
+ "$ref": "#/components/schemas/EnvironmentCreateRequest"
157
+ },
158
+ "examples": {
159
+ "CreateEnvironment": {
160
+ "$ref": "#/components/examples/CreateEnvironment"
161
+ }
162
+ }
163
+ }
164
+ },
165
+ "required": true
166
+ },
167
+ "responses": {
168
+ "202": {
169
+ "description": "Environment creation successfully queued.",
170
+ "content": {
171
+ "application/json": {
172
+ "schema": {
173
+ "$ref": "#/components/schemas/Environment"
174
+ },
175
+ "examples": {
176
+ "EnvironmentCreatedSuccess": {
177
+ "$ref": "#/components/examples/EnvironmentCreatedSuccess"
178
+ }
179
+ }
180
+ }
181
+ }
182
+ },
183
+ "400": {
184
+ "$ref": "#/components/responses/400BadRequest_CreateEnvironment"
185
+ },
186
+ "401": {
187
+ "$ref": "#/components/responses/401unauthorized"
188
+ },
189
+ "403": {
190
+ "$ref": "#/components/responses/403forbidden"
191
+ },
192
+ "404": {
193
+ "$ref": "#/components/responses/404NotFound_Storefront"
194
+ }
195
+ },
196
+ "security": [
197
+ {
198
+ "AmOAuth2": [
199
+ "sfcc.storefront.environments.rw"
200
+ ]
201
+ }
202
+ ]
203
+ }
204
+ },
205
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/clone": {
206
+ "post": {
207
+ "summary": "Clone an environment for a storefront.",
208
+ "description": "Queues creation of a new environment for the specified storefront by cloning an existing environment. Returns immediately with the environment resource in the building status. Poll the environment by ID to track provisioning progress. The clone always starts as a non-primary environment.",
209
+ "operationId": "cloneEnvironmentForStorefront",
210
+ "parameters": [
211
+ {
212
+ "name": "organizationId",
213
+ "in": "path",
214
+ "description": "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).",
215
+ "required": true,
216
+ "style": "simple",
217
+ "explode": false,
218
+ "schema": {
219
+ "$ref": "#/components/schemas/OrganizationId"
220
+ },
221
+ "example": "f_ecom_zzxy_prd"
222
+ },
223
+ {
224
+ "name": "storefrontId",
225
+ "in": "path",
226
+ "description": "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.",
227
+ "required": true,
228
+ "style": "simple",
229
+ "explode": false,
230
+ "schema": {
231
+ "type": "string",
232
+ "example": "my-storefront-a1b2c3",
233
+ "maxLength": 20,
234
+ "minLength": 1,
235
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
236
+ }
237
+ }
238
+ ],
239
+ "requestBody": {
240
+ "content": {
241
+ "application/json": {
242
+ "schema": {
243
+ "$ref": "#/components/schemas/EnvironmentCloneRequest"
244
+ },
245
+ "examples": {
246
+ "CloneEnvironment": {
247
+ "$ref": "#/components/examples/CloneEnvironment"
248
+ }
249
+ }
250
+ }
251
+ },
252
+ "required": true
253
+ },
254
+ "responses": {
255
+ "202": {
256
+ "description": "Environment clone successfully queued.",
257
+ "content": {
258
+ "application/json": {
259
+ "schema": {
260
+ "$ref": "#/components/schemas/Environment"
261
+ },
262
+ "examples": {
263
+ "EnvironmentCloneAcceptedSuccess": {
264
+ "$ref": "#/components/examples/EnvironmentCloneAcceptedSuccess"
265
+ }
266
+ }
267
+ }
268
+ }
269
+ },
270
+ "400": {
271
+ "$ref": "#/components/responses/400BadRequest_CloneEnvironment"
272
+ },
273
+ "401": {
274
+ "$ref": "#/components/responses/401unauthorized"
275
+ },
276
+ "403": {
277
+ "$ref": "#/components/responses/403forbidden"
278
+ },
279
+ "404": {
280
+ "$ref": "#/components/responses/404NotFound_CloneEnvironment"
281
+ }
282
+ },
283
+ "security": [
284
+ {
285
+ "AmOAuth2": [
286
+ "sfcc.storefront.environments.rw"
287
+ ]
288
+ }
289
+ ]
290
+ }
291
+ },
292
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}": {
293
+ "get": {
294
+ "summary": "Get an environment by ID.",
295
+ "description": "Retrieves the details of a specific environment, including its current status.",
296
+ "operationId": "getEnvironmentById",
297
+ "parameters": [
298
+ {
299
+ "name": "organizationId",
300
+ "in": "path",
301
+ "description": "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).",
302
+ "required": true,
303
+ "style": "simple",
304
+ "explode": false,
305
+ "schema": {
306
+ "$ref": "#/components/schemas/OrganizationId"
307
+ },
308
+ "example": "f_ecom_zzxy_prd"
309
+ },
310
+ {
311
+ "name": "storefrontId",
312
+ "in": "path",
313
+ "description": "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.",
314
+ "required": true,
315
+ "style": "simple",
316
+ "explode": false,
317
+ "schema": {
318
+ "type": "string",
319
+ "example": "my-storefront-a1b2c3",
320
+ "maxLength": 20,
321
+ "minLength": 1,
322
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
323
+ }
324
+ },
325
+ {
326
+ "name": "environmentId",
327
+ "in": "path",
328
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
329
+ "required": true,
330
+ "style": "simple",
331
+ "explode": false,
332
+ "schema": {
333
+ "type": "string",
334
+ "example": "production-a1b2c3d4",
335
+ "maxLength": 19,
336
+ "minLength": 1,
337
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
338
+ }
339
+ }
340
+ ],
341
+ "responses": {
342
+ "200": {
343
+ "description": "Environment successfully retrieved.",
344
+ "content": {
345
+ "application/json": {
346
+ "schema": {
347
+ "$ref": "#/components/schemas/Environment"
348
+ },
349
+ "examples": {
350
+ "EnvironmentSuccess": {
351
+ "$ref": "#/components/examples/EnvironmentSuccess"
352
+ }
353
+ }
354
+ }
355
+ }
356
+ },
357
+ "401": {
358
+ "$ref": "#/components/responses/401unauthorized"
359
+ },
360
+ "403": {
361
+ "$ref": "#/components/responses/403forbidden"
362
+ },
363
+ "404": {
364
+ "$ref": "#/components/responses/404NotFound_Environment"
365
+ }
366
+ },
367
+ "security": [
368
+ {
369
+ "AmOAuth2": [
370
+ "sfcc.storefront.environments",
371
+ "sfcc.storefront.environments.rw"
372
+ ]
373
+ }
374
+ ]
375
+ },
376
+ "delete": {
377
+ "summary": "Delete an environment.",
378
+ "description": "Queues deletion of the environment. Returns immediately with the environment resource in the deleting status. Poll the environment by ID to track deletion progress.",
379
+ "operationId": "deleteEnvironment",
380
+ "parameters": [
381
+ {
382
+ "name": "organizationId",
383
+ "in": "path",
384
+ "description": "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).",
385
+ "required": true,
386
+ "style": "simple",
387
+ "explode": false,
388
+ "schema": {
389
+ "$ref": "#/components/schemas/OrganizationId"
390
+ },
391
+ "example": "f_ecom_zzxy_prd"
392
+ },
393
+ {
394
+ "name": "storefrontId",
395
+ "in": "path",
396
+ "description": "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.",
397
+ "required": true,
398
+ "style": "simple",
399
+ "explode": false,
400
+ "schema": {
401
+ "type": "string",
402
+ "example": "my-storefront-a1b2c3",
403
+ "maxLength": 20,
404
+ "minLength": 1,
405
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
406
+ }
407
+ },
408
+ {
409
+ "name": "environmentId",
410
+ "in": "path",
411
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
412
+ "required": true,
413
+ "style": "simple",
414
+ "explode": false,
415
+ "schema": {
416
+ "type": "string",
417
+ "example": "production-a1b2c3d4",
418
+ "maxLength": 19,
419
+ "minLength": 1,
420
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
421
+ }
422
+ }
423
+ ],
424
+ "responses": {
425
+ "202": {
426
+ "description": "Environment deletion successfully queued.",
427
+ "content": {
428
+ "application/json": {
429
+ "schema": {
430
+ "$ref": "#/components/schemas/Environment"
431
+ },
432
+ "examples": {
433
+ "EnvironmentDeleteAcceptedSuccess": {
434
+ "$ref": "#/components/examples/EnvironmentDeleteAcceptedSuccess"
435
+ }
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "401": {
441
+ "$ref": "#/components/responses/401unauthorized"
442
+ },
443
+ "403": {
444
+ "$ref": "#/components/responses/403forbidden"
445
+ },
446
+ "404": {
447
+ "$ref": "#/components/responses/404NotFound_Environment"
448
+ },
449
+ "409": {
450
+ "$ref": "#/components/responses/409Conflict_DeleteEnvironment"
451
+ }
452
+ },
453
+ "security": [
454
+ {
455
+ "AmOAuth2": [
456
+ "sfcc.storefront.environments.rw"
457
+ ]
458
+ }
459
+ ]
460
+ },
461
+ "patch": {
462
+ "summary": "Update an environment.",
463
+ "description": "Partially updates the specified environment. Only the supplied fields are changed; at least one field must be provided.",
464
+ "operationId": "updateEnvironment",
465
+ "parameters": [
466
+ {
467
+ "name": "organizationId",
468
+ "in": "path",
469
+ "description": "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).",
470
+ "required": true,
471
+ "style": "simple",
472
+ "explode": false,
473
+ "schema": {
474
+ "$ref": "#/components/schemas/OrganizationId"
475
+ },
476
+ "example": "f_ecom_zzxy_prd"
477
+ },
478
+ {
479
+ "name": "storefrontId",
480
+ "in": "path",
481
+ "description": "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.",
482
+ "required": true,
483
+ "style": "simple",
484
+ "explode": false,
485
+ "schema": {
486
+ "type": "string",
487
+ "example": "my-storefront-a1b2c3",
488
+ "maxLength": 20,
489
+ "minLength": 1,
490
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
491
+ }
492
+ },
493
+ {
494
+ "name": "environmentId",
495
+ "in": "path",
496
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
497
+ "required": true,
498
+ "style": "simple",
499
+ "explode": false,
500
+ "schema": {
501
+ "type": "string",
502
+ "example": "production-a1b2c3d4",
503
+ "maxLength": 19,
504
+ "minLength": 1,
505
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
506
+ }
507
+ }
508
+ ],
509
+ "requestBody": {
510
+ "content": {
511
+ "application/json": {
512
+ "schema": {
513
+ "$ref": "#/components/schemas/EnvironmentUpdateRequest"
514
+ },
515
+ "examples": {
516
+ "UpdateEnvironment": {
517
+ "$ref": "#/components/examples/UpdateEnvironment"
518
+ }
519
+ }
520
+ }
521
+ },
522
+ "required": true
523
+ },
524
+ "responses": {
525
+ "200": {
526
+ "description": "Environment successfully updated.",
527
+ "content": {
528
+ "application/json": {
529
+ "schema": {
530
+ "$ref": "#/components/schemas/Environment"
531
+ },
532
+ "examples": {
533
+ "EnvironmentUpdatedSuccess": {
534
+ "$ref": "#/components/examples/EnvironmentUpdatedSuccess"
535
+ }
536
+ }
537
+ }
538
+ }
539
+ },
540
+ "400": {
541
+ "$ref": "#/components/responses/400BadRequest_UpdateEnvironment"
542
+ },
543
+ "401": {
544
+ "$ref": "#/components/responses/401unauthorized"
545
+ },
546
+ "403": {
547
+ "$ref": "#/components/responses/403Forbidden_UpdateEnvironment"
548
+ },
549
+ "404": {
550
+ "$ref": "#/components/responses/404NotFound_Environment"
551
+ }
552
+ },
553
+ "security": [
554
+ {
555
+ "AmOAuth2": [
556
+ "sfcc.storefront.environments.rw"
557
+ ]
558
+ }
559
+ ]
560
+ }
561
+ },
562
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/primary": {
563
+ "put": {
564
+ "summary": "Set an environment as the storefront's primary environment.",
565
+ "description": "Marks the specified environment as the storefront's primary environment. The environment must have a status of ready or build_failed. Idempotent — setting an already-primary environment as primary again has no effect.",
566
+ "operationId": "setPrimaryEnvironment",
567
+ "parameters": [
568
+ {
569
+ "name": "organizationId",
570
+ "in": "path",
571
+ "description": "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).",
572
+ "required": true,
573
+ "style": "simple",
574
+ "explode": false,
575
+ "schema": {
576
+ "$ref": "#/components/schemas/OrganizationId"
577
+ },
578
+ "example": "f_ecom_zzxy_prd"
579
+ },
580
+ {
581
+ "name": "storefrontId",
582
+ "in": "path",
583
+ "description": "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.",
584
+ "required": true,
585
+ "style": "simple",
586
+ "explode": false,
587
+ "schema": {
588
+ "type": "string",
589
+ "example": "my-storefront-a1b2c3",
590
+ "maxLength": 20,
591
+ "minLength": 1,
592
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
593
+ }
594
+ },
595
+ {
596
+ "name": "environmentId",
597
+ "in": "path",
598
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
599
+ "required": true,
600
+ "style": "simple",
601
+ "explode": false,
602
+ "schema": {
603
+ "type": "string",
604
+ "example": "production-a1b2c3d4",
605
+ "maxLength": 19,
606
+ "minLength": 1,
607
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
608
+ }
609
+ }
610
+ ],
611
+ "responses": {
612
+ "200": {
613
+ "description": "Environment successfully set as primary.",
614
+ "content": {
615
+ "application/json": {
616
+ "schema": {
617
+ "$ref": "#/components/schemas/Environment"
618
+ },
619
+ "examples": {
620
+ "EnvironmentSetPrimarySuccess": {
621
+ "$ref": "#/components/examples/EnvironmentSetPrimarySuccess"
622
+ }
623
+ }
624
+ }
625
+ }
626
+ },
627
+ "401": {
628
+ "$ref": "#/components/responses/401unauthorized"
629
+ },
630
+ "403": {
631
+ "$ref": "#/components/responses/403forbidden"
632
+ },
633
+ "404": {
634
+ "$ref": "#/components/responses/404NotFound_Environment"
635
+ },
636
+ "409": {
637
+ "$ref": "#/components/responses/409Conflict_SetPrimaryEnvironment"
638
+ }
639
+ },
640
+ "security": [
641
+ {
642
+ "AmOAuth2": [
643
+ "sfcc.storefront.environments.rw"
644
+ ]
645
+ }
646
+ ]
647
+ }
648
+ },
649
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/cache-invalidations": {
650
+ "post": {
651
+ "summary": "Trigger a cache invalidation.",
652
+ "description": "Triggers a CDN cache invalidation on the environment for the supplied path prefix. Invalidation is always a wildcard operation — every cached path beginning with the prefix is cleared. The request is fire-and-forget: it returns `202 Accepted` with an empty body and no invalidation id to poll, and the invalidation itself is performed asynchronously. The environment must have an SSR bundle deployed.",
653
+ "operationId": "createCacheInvalidation",
654
+ "parameters": [
655
+ {
656
+ "name": "organizationId",
657
+ "in": "path",
658
+ "description": "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).",
659
+ "required": true,
660
+ "style": "simple",
661
+ "explode": false,
662
+ "schema": {
663
+ "$ref": "#/components/schemas/OrganizationId"
664
+ },
665
+ "example": "f_ecom_zzxy_prd"
666
+ },
667
+ {
668
+ "name": "storefrontId",
669
+ "in": "path",
670
+ "description": "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.",
671
+ "required": true,
672
+ "style": "simple",
673
+ "explode": false,
674
+ "schema": {
675
+ "type": "string",
676
+ "example": "my-storefront-a1b2c3",
677
+ "maxLength": 20,
678
+ "minLength": 1,
679
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
680
+ }
681
+ },
682
+ {
683
+ "name": "environmentId",
684
+ "in": "path",
685
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
686
+ "required": true,
687
+ "style": "simple",
688
+ "explode": false,
689
+ "schema": {
690
+ "type": "string",
691
+ "example": "production-a1b2c3d4",
692
+ "maxLength": 19,
693
+ "minLength": 1,
694
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
695
+ }
696
+ }
697
+ ],
698
+ "requestBody": {
699
+ "content": {
700
+ "application/json": {
701
+ "schema": {
702
+ "$ref": "#/components/schemas/CacheInvalidationRequest"
703
+ },
704
+ "examples": {
705
+ "CacheInvalidation": {
706
+ "$ref": "#/components/examples/CacheInvalidation"
707
+ }
708
+ }
709
+ }
710
+ },
711
+ "required": true
712
+ },
713
+ "responses": {
714
+ "202": {
715
+ "description": "Cache invalidation accepted. The invalidation is processed asynchronously; no body is returned."
716
+ },
717
+ "400": {
718
+ "$ref": "#/components/responses/400BadRequest_CacheInvalidation"
719
+ },
720
+ "401": {
721
+ "$ref": "#/components/responses/401unauthorized"
722
+ },
723
+ "403": {
724
+ "$ref": "#/components/responses/403forbidden"
725
+ },
726
+ "404": {
727
+ "$ref": "#/components/responses/404NotFound_Environment"
728
+ },
729
+ "429": {
730
+ "$ref": "#/components/responses/429TooManyRequests_CacheInvalidation"
731
+ }
732
+ },
733
+ "security": [
734
+ {
735
+ "AmOAuth2": [
736
+ "sfcc.storefront.environments.rw"
737
+ ]
738
+ }
739
+ ]
740
+ }
741
+ },
742
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/environment-variables": {
743
+ "get": {
744
+ "summary": "Get environment variables.",
745
+ "description": "Retrieves the complete set of environment variables for the environment, as a map keyed by variable name. Values are masked. This is a singleton resource — one set per environment — and is not a paginated collection.",
746
+ "operationId": "getEnvironmentVariables",
747
+ "parameters": [
748
+ {
749
+ "name": "organizationId",
750
+ "in": "path",
751
+ "description": "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).",
752
+ "required": true,
753
+ "style": "simple",
754
+ "explode": false,
755
+ "schema": {
756
+ "$ref": "#/components/schemas/OrganizationId"
757
+ },
758
+ "example": "f_ecom_zzxy_prd"
759
+ },
760
+ {
761
+ "name": "storefrontId",
762
+ "in": "path",
763
+ "description": "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.",
764
+ "required": true,
765
+ "style": "simple",
766
+ "explode": false,
767
+ "schema": {
768
+ "type": "string",
769
+ "example": "my-storefront-a1b2c3",
770
+ "maxLength": 20,
771
+ "minLength": 1,
772
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
773
+ }
774
+ },
775
+ {
776
+ "name": "environmentId",
777
+ "in": "path",
778
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
779
+ "required": true,
780
+ "style": "simple",
781
+ "explode": false,
782
+ "schema": {
783
+ "type": "string",
784
+ "example": "production-a1b2c3d4",
785
+ "maxLength": 19,
786
+ "minLength": 1,
787
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
788
+ }
789
+ }
790
+ ],
791
+ "responses": {
792
+ "200": {
793
+ "description": "Environment variables successfully retrieved.",
794
+ "content": {
795
+ "application/json": {
796
+ "schema": {
797
+ "$ref": "#/components/schemas/EnvironmentVariables"
798
+ },
799
+ "examples": {
800
+ "EnvironmentVariablesSuccess": {
801
+ "$ref": "#/components/examples/EnvironmentVariablesSuccess"
802
+ }
803
+ }
804
+ }
805
+ }
806
+ },
807
+ "401": {
808
+ "$ref": "#/components/responses/401unauthorized"
809
+ },
810
+ "403": {
811
+ "$ref": "#/components/responses/403forbidden"
812
+ },
813
+ "404": {
814
+ "$ref": "#/components/responses/404NotFound_Environment"
815
+ }
816
+ },
817
+ "security": [
818
+ {
819
+ "AmOAuth2": [
820
+ "sfcc.storefront.environments",
821
+ "sfcc.storefront.environments.rw"
822
+ ]
823
+ }
824
+ ]
825
+ },
826
+ "patch": {
827
+ "summary": "Update environment variables.",
828
+ "description": "Merge-updates the environment variables. Keys present in the payload are created or replaced; a key whose value is `null` is deleted; keys omitted from the payload are preserved. Returns `204 No Content` on success.",
829
+ "operationId": "updateEnvironmentVariables",
830
+ "parameters": [
831
+ {
832
+ "name": "organizationId",
833
+ "in": "path",
834
+ "description": "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).",
835
+ "required": true,
836
+ "style": "simple",
837
+ "explode": false,
838
+ "schema": {
839
+ "$ref": "#/components/schemas/OrganizationId"
840
+ },
841
+ "example": "f_ecom_zzxy_prd"
842
+ },
843
+ {
844
+ "name": "storefrontId",
845
+ "in": "path",
846
+ "description": "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.",
847
+ "required": true,
848
+ "style": "simple",
849
+ "explode": false,
850
+ "schema": {
851
+ "type": "string",
852
+ "example": "my-storefront-a1b2c3",
853
+ "maxLength": 20,
854
+ "minLength": 1,
855
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
856
+ }
857
+ },
858
+ {
859
+ "name": "environmentId",
860
+ "in": "path",
861
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
862
+ "required": true,
863
+ "style": "simple",
864
+ "explode": false,
865
+ "schema": {
866
+ "type": "string",
867
+ "example": "production-a1b2c3d4",
868
+ "maxLength": 19,
869
+ "minLength": 1,
870
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
871
+ }
872
+ }
873
+ ],
874
+ "requestBody": {
875
+ "content": {
876
+ "application/json": {
877
+ "schema": {
878
+ "$ref": "#/components/schemas/EnvironmentVariablesUpdateRequest"
879
+ },
880
+ "examples": {
881
+ "EnvironmentVariablesUpdate": {
882
+ "$ref": "#/components/examples/EnvironmentVariablesUpdate"
883
+ }
884
+ }
885
+ }
886
+ },
887
+ "required": true
888
+ },
889
+ "responses": {
890
+ "204": {
891
+ "description": "Environment variables successfully updated."
892
+ },
893
+ "400": {
894
+ "$ref": "#/components/responses/400BadRequest_EnvironmentVariables"
895
+ },
896
+ "401": {
897
+ "$ref": "#/components/responses/401unauthorized"
898
+ },
899
+ "403": {
900
+ "$ref": "#/components/responses/403forbidden"
901
+ },
902
+ "404": {
903
+ "$ref": "#/components/responses/404NotFound_Environment"
904
+ }
905
+ },
906
+ "security": [
907
+ {
908
+ "AmOAuth2": [
909
+ "sfcc.storefront.environments.rw"
910
+ ]
911
+ }
912
+ ]
913
+ }
914
+ },
915
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/access-control-headers": {
916
+ "get": {
917
+ "summary": "Get access control headers.",
918
+ "description": "Retrieves a paginated list of access control headers on the environment. Values are masked.",
919
+ "operationId": "getAccessControlHeaders",
920
+ "parameters": [
921
+ {
922
+ "name": "organizationId",
923
+ "in": "path",
924
+ "description": "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).",
925
+ "required": true,
926
+ "style": "simple",
927
+ "explode": false,
928
+ "schema": {
929
+ "$ref": "#/components/schemas/OrganizationId"
930
+ },
931
+ "example": "f_ecom_zzxy_prd"
932
+ },
933
+ {
934
+ "name": "storefrontId",
935
+ "in": "path",
936
+ "description": "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.",
937
+ "required": true,
938
+ "style": "simple",
939
+ "explode": false,
940
+ "schema": {
941
+ "type": "string",
942
+ "example": "my-storefront-a1b2c3",
943
+ "maxLength": 20,
944
+ "minLength": 1,
945
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
946
+ }
947
+ },
948
+ {
949
+ "name": "environmentId",
950
+ "in": "path",
951
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
952
+ "required": true,
953
+ "style": "simple",
954
+ "explode": false,
955
+ "schema": {
956
+ "type": "string",
957
+ "example": "production-a1b2c3d4",
958
+ "maxLength": 19,
959
+ "minLength": 1,
960
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
961
+ }
962
+ },
963
+ {
964
+ "name": "orderBy",
965
+ "in": "query",
966
+ "description": "Attributes to order the returned access control headers by, in priority order, applied left to right. Append `:asc` or `:desc` to set the direction; when omitted, `:asc` is assumed. Sortable attributes: `creation_date`, `id`, `publishing_status`.",
967
+ "required": false,
968
+ "style": "form",
969
+ "explode": false,
970
+ "schema": {
971
+ "type": "array",
972
+ "example": [
973
+ "creation_date:desc"
974
+ ],
975
+ "items": {
976
+ "type": "string",
977
+ "example": "creation_date:desc",
978
+ "pattern": "^(creation_date|id|publishing_status)(:(asc|desc))?$"
979
+ },
980
+ "maxItems": 3
981
+ }
982
+ },
983
+ {
984
+ "name": "limit",
985
+ "in": "query",
986
+ "description": "Number of records to retrieve per request. Must be between 1 (minimum) and 200 (maximum). Defaults to 25.",
987
+ "required": false,
988
+ "style": "form",
989
+ "explode": true,
990
+ "schema": {
991
+ "type": "integer",
992
+ "format": "int32",
993
+ "default": 25,
994
+ "maximum": 200,
995
+ "minimum": 1
996
+ }
997
+ },
998
+ {
999
+ "name": "offset",
1000
+ "in": "query",
1001
+ "description": "Used to retrieve the results based on a particular resource offset.",
1002
+ "required": false,
1003
+ "style": "form",
1004
+ "explode": true,
1005
+ "schema": {
1006
+ "type": "integer",
1007
+ "format": "int32",
1008
+ "default": 0,
1009
+ "minimum": 0
1010
+ }
1011
+ }
1012
+ ],
1013
+ "responses": {
1014
+ "200": {
1015
+ "description": "List of access control headers successfully retrieved.",
1016
+ "content": {
1017
+ "application/json": {
1018
+ "schema": {
1019
+ "$ref": "#/components/schemas/AccessControlHeaderResult"
1020
+ },
1021
+ "examples": {
1022
+ "AccessControlHeaderListSuccess": {
1023
+ "$ref": "#/components/examples/AccessControlHeaderListSuccess"
1024
+ }
1025
+ }
1026
+ }
1027
+ }
1028
+ },
1029
+ "401": {
1030
+ "$ref": "#/components/responses/401unauthorized"
1031
+ },
1032
+ "403": {
1033
+ "$ref": "#/components/responses/403forbidden"
1034
+ },
1035
+ "404": {
1036
+ "$ref": "#/components/responses/404NotFound_Environment"
1037
+ }
1038
+ },
1039
+ "security": [
1040
+ {
1041
+ "AmOAuth2": [
1042
+ "sfcc.storefront.environments",
1043
+ "sfcc.storefront.environments.rw"
1044
+ ]
1045
+ }
1046
+ ]
1047
+ },
1048
+ "post": {
1049
+ "summary": "Create an access control header.",
1050
+ "description": "Creates a header-based access control rule on the environment. The created value is masked in the response.",
1051
+ "operationId": "createAccessControlHeader",
1052
+ "parameters": [
1053
+ {
1054
+ "name": "organizationId",
1055
+ "in": "path",
1056
+ "description": "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).",
1057
+ "required": true,
1058
+ "style": "simple",
1059
+ "explode": false,
1060
+ "schema": {
1061
+ "$ref": "#/components/schemas/OrganizationId"
1062
+ },
1063
+ "example": "f_ecom_zzxy_prd"
1064
+ },
1065
+ {
1066
+ "name": "storefrontId",
1067
+ "in": "path",
1068
+ "description": "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.",
1069
+ "required": true,
1070
+ "style": "simple",
1071
+ "explode": false,
1072
+ "schema": {
1073
+ "type": "string",
1074
+ "example": "my-storefront-a1b2c3",
1075
+ "maxLength": 20,
1076
+ "minLength": 1,
1077
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1078
+ }
1079
+ },
1080
+ {
1081
+ "name": "environmentId",
1082
+ "in": "path",
1083
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1084
+ "required": true,
1085
+ "style": "simple",
1086
+ "explode": false,
1087
+ "schema": {
1088
+ "type": "string",
1089
+ "example": "production-a1b2c3d4",
1090
+ "maxLength": 19,
1091
+ "minLength": 1,
1092
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1093
+ }
1094
+ }
1095
+ ],
1096
+ "requestBody": {
1097
+ "content": {
1098
+ "application/json": {
1099
+ "schema": {
1100
+ "$ref": "#/components/schemas/AccessControlHeaderCreateRequest"
1101
+ },
1102
+ "examples": {
1103
+ "CreateAccessControlHeader": {
1104
+ "$ref": "#/components/examples/CreateAccessControlHeader"
1105
+ }
1106
+ }
1107
+ }
1108
+ },
1109
+ "required": true
1110
+ },
1111
+ "responses": {
1112
+ "201": {
1113
+ "description": "Access control header successfully created.",
1114
+ "content": {
1115
+ "application/json": {
1116
+ "schema": {
1117
+ "$ref": "#/components/schemas/AccessControlHeader"
1118
+ },
1119
+ "examples": {
1120
+ "AccessControlHeaderCreatedSuccess": {
1121
+ "$ref": "#/components/examples/AccessControlHeaderCreatedSuccess"
1122
+ }
1123
+ }
1124
+ }
1125
+ }
1126
+ },
1127
+ "400": {
1128
+ "$ref": "#/components/responses/400BadRequest_AccessControlHeader"
1129
+ },
1130
+ "401": {
1131
+ "$ref": "#/components/responses/401unauthorized"
1132
+ },
1133
+ "403": {
1134
+ "$ref": "#/components/responses/403forbidden"
1135
+ },
1136
+ "404": {
1137
+ "$ref": "#/components/responses/404NotFound_Environment"
1138
+ }
1139
+ },
1140
+ "security": [
1141
+ {
1142
+ "AmOAuth2": [
1143
+ "sfcc.storefront.environments.rw"
1144
+ ]
1145
+ }
1146
+ ]
1147
+ }
1148
+ },
1149
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/access-control-headers/{accessControlHeaderId}": {
1150
+ "get": {
1151
+ "summary": "Get an access control header by ID.",
1152
+ "description": "Retrieves a single access control header by its identifier. The value is masked.",
1153
+ "operationId": "getAccessControlHeader",
1154
+ "parameters": [
1155
+ {
1156
+ "name": "organizationId",
1157
+ "in": "path",
1158
+ "description": "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).",
1159
+ "required": true,
1160
+ "style": "simple",
1161
+ "explode": false,
1162
+ "schema": {
1163
+ "$ref": "#/components/schemas/OrganizationId"
1164
+ },
1165
+ "example": "f_ecom_zzxy_prd"
1166
+ },
1167
+ {
1168
+ "name": "storefrontId",
1169
+ "in": "path",
1170
+ "description": "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.",
1171
+ "required": true,
1172
+ "style": "simple",
1173
+ "explode": false,
1174
+ "schema": {
1175
+ "type": "string",
1176
+ "example": "my-storefront-a1b2c3",
1177
+ "maxLength": 20,
1178
+ "minLength": 1,
1179
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1180
+ }
1181
+ },
1182
+ {
1183
+ "name": "environmentId",
1184
+ "in": "path",
1185
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1186
+ "required": true,
1187
+ "style": "simple",
1188
+ "explode": false,
1189
+ "schema": {
1190
+ "type": "string",
1191
+ "example": "production-a1b2c3d4",
1192
+ "maxLength": 19,
1193
+ "minLength": 1,
1194
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1195
+ }
1196
+ },
1197
+ {
1198
+ "name": "accessControlHeaderId",
1199
+ "in": "path",
1200
+ "description": "The access control header identifier, in UUID format.",
1201
+ "required": true,
1202
+ "style": "simple",
1203
+ "explode": false,
1204
+ "schema": {
1205
+ "type": "string",
1206
+ "format": "uuid",
1207
+ "example": "ff832a9e-0e55-11ef-8f23-0242ac110002"
1208
+ }
1209
+ }
1210
+ ],
1211
+ "responses": {
1212
+ "200": {
1213
+ "description": "Access control header successfully retrieved.",
1214
+ "content": {
1215
+ "application/json": {
1216
+ "schema": {
1217
+ "$ref": "#/components/schemas/AccessControlHeader"
1218
+ },
1219
+ "examples": {
1220
+ "AccessControlHeaderSuccess": {
1221
+ "$ref": "#/components/examples/AccessControlHeaderSuccess"
1222
+ }
1223
+ }
1224
+ }
1225
+ }
1226
+ },
1227
+ "401": {
1228
+ "$ref": "#/components/responses/401unauthorized"
1229
+ },
1230
+ "403": {
1231
+ "$ref": "#/components/responses/403forbidden"
1232
+ },
1233
+ "404": {
1234
+ "$ref": "#/components/responses/404NotFound_AccessControlHeader"
1235
+ }
1236
+ },
1237
+ "security": [
1238
+ {
1239
+ "AmOAuth2": [
1240
+ "sfcc.storefront.environments",
1241
+ "sfcc.storefront.environments.rw"
1242
+ ]
1243
+ }
1244
+ ]
1245
+ },
1246
+ "delete": {
1247
+ "summary": "Delete an access control header.",
1248
+ "description": "Deletes an access control header by its identifier.",
1249
+ "operationId": "deleteAccessControlHeader",
1250
+ "parameters": [
1251
+ {
1252
+ "name": "organizationId",
1253
+ "in": "path",
1254
+ "description": "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).",
1255
+ "required": true,
1256
+ "style": "simple",
1257
+ "explode": false,
1258
+ "schema": {
1259
+ "$ref": "#/components/schemas/OrganizationId"
1260
+ },
1261
+ "example": "f_ecom_zzxy_prd"
1262
+ },
1263
+ {
1264
+ "name": "storefrontId",
1265
+ "in": "path",
1266
+ "description": "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.",
1267
+ "required": true,
1268
+ "style": "simple",
1269
+ "explode": false,
1270
+ "schema": {
1271
+ "type": "string",
1272
+ "example": "my-storefront-a1b2c3",
1273
+ "maxLength": 20,
1274
+ "minLength": 1,
1275
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1276
+ }
1277
+ },
1278
+ {
1279
+ "name": "environmentId",
1280
+ "in": "path",
1281
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1282
+ "required": true,
1283
+ "style": "simple",
1284
+ "explode": false,
1285
+ "schema": {
1286
+ "type": "string",
1287
+ "example": "production-a1b2c3d4",
1288
+ "maxLength": 19,
1289
+ "minLength": 1,
1290
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1291
+ }
1292
+ },
1293
+ {
1294
+ "name": "accessControlHeaderId",
1295
+ "in": "path",
1296
+ "description": "The access control header identifier, in UUID format.",
1297
+ "required": true,
1298
+ "style": "simple",
1299
+ "explode": false,
1300
+ "schema": {
1301
+ "type": "string",
1302
+ "format": "uuid",
1303
+ "example": "ff832a9e-0e55-11ef-8f23-0242ac110002"
1304
+ }
1305
+ }
1306
+ ],
1307
+ "responses": {
1308
+ "204": {
1309
+ "description": "Access control header successfully deleted."
1310
+ },
1311
+ "401": {
1312
+ "$ref": "#/components/responses/401unauthorized"
1313
+ },
1314
+ "403": {
1315
+ "$ref": "#/components/responses/403forbidden"
1316
+ },
1317
+ "404": {
1318
+ "$ref": "#/components/responses/404NotFound_AccessControlHeader"
1319
+ }
1320
+ },
1321
+ "security": [
1322
+ {
1323
+ "AmOAuth2": [
1324
+ "sfcc.storefront.environments.rw"
1325
+ ]
1326
+ }
1327
+ ]
1328
+ }
1329
+ },
1330
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/redirects": {
1331
+ "get": {
1332
+ "summary": "Get redirects.",
1333
+ "description": "Retrieves a paginated, orderable list of redirects on the environment.",
1334
+ "operationId": "getRedirects",
1335
+ "parameters": [
1336
+ {
1337
+ "name": "organizationId",
1338
+ "in": "path",
1339
+ "description": "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).",
1340
+ "required": true,
1341
+ "style": "simple",
1342
+ "explode": false,
1343
+ "schema": {
1344
+ "$ref": "#/components/schemas/OrganizationId"
1345
+ },
1346
+ "example": "f_ecom_zzxy_prd"
1347
+ },
1348
+ {
1349
+ "name": "storefrontId",
1350
+ "in": "path",
1351
+ "description": "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.",
1352
+ "required": true,
1353
+ "style": "simple",
1354
+ "explode": false,
1355
+ "schema": {
1356
+ "type": "string",
1357
+ "example": "my-storefront-a1b2c3",
1358
+ "maxLength": 20,
1359
+ "minLength": 1,
1360
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1361
+ }
1362
+ },
1363
+ {
1364
+ "name": "environmentId",
1365
+ "in": "path",
1366
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1367
+ "required": true,
1368
+ "style": "simple",
1369
+ "explode": false,
1370
+ "schema": {
1371
+ "type": "string",
1372
+ "example": "production-a1b2c3d4",
1373
+ "maxLength": 19,
1374
+ "minLength": 1,
1375
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1376
+ }
1377
+ },
1378
+ {
1379
+ "name": "orderBy",
1380
+ "in": "query",
1381
+ "description": "Attributes to order the returned redirects by, in priority order, applied left to right. Append `:asc` or `:desc` to set the direction; when omitted, `:asc` is assumed. Sortable attributes: `creation_date`, `last_modified`, `source`, `destination`, `last_modified_by`, `http_status_code`, `publishing_status`.",
1382
+ "required": false,
1383
+ "style": "form",
1384
+ "explode": false,
1385
+ "schema": {
1386
+ "type": "array",
1387
+ "example": [
1388
+ "creation_date:desc"
1389
+ ],
1390
+ "items": {
1391
+ "type": "string",
1392
+ "example": "creation_date:desc",
1393
+ "pattern": "^(creation_date|last_modified|source|destination|last_modified_by|http_status_code|publishing_status)(:(asc|desc))?$"
1394
+ },
1395
+ "maxItems": 7
1396
+ }
1397
+ },
1398
+ {
1399
+ "name": "limit",
1400
+ "in": "query",
1401
+ "description": "Number of records to retrieve per request. Must be between 1 (minimum) and 200 (maximum). Defaults to 25.",
1402
+ "required": false,
1403
+ "style": "form",
1404
+ "explode": true,
1405
+ "schema": {
1406
+ "type": "integer",
1407
+ "format": "int32",
1408
+ "default": 25,
1409
+ "maximum": 200,
1410
+ "minimum": 1
1411
+ }
1412
+ },
1413
+ {
1414
+ "name": "offset",
1415
+ "in": "query",
1416
+ "description": "Used to retrieve the results based on a particular resource offset.",
1417
+ "required": false,
1418
+ "style": "form",
1419
+ "explode": true,
1420
+ "schema": {
1421
+ "type": "integer",
1422
+ "format": "int32",
1423
+ "default": 0,
1424
+ "minimum": 0
1425
+ }
1426
+ }
1427
+ ],
1428
+ "responses": {
1429
+ "200": {
1430
+ "description": "List of redirects successfully retrieved.",
1431
+ "content": {
1432
+ "application/json": {
1433
+ "schema": {
1434
+ "$ref": "#/components/schemas/RedirectResult"
1435
+ },
1436
+ "examples": {
1437
+ "RedirectListSuccess": {
1438
+ "$ref": "#/components/examples/RedirectListSuccess"
1439
+ }
1440
+ }
1441
+ }
1442
+ }
1443
+ },
1444
+ "401": {
1445
+ "$ref": "#/components/responses/401unauthorized"
1446
+ },
1447
+ "403": {
1448
+ "$ref": "#/components/responses/403forbidden"
1449
+ },
1450
+ "404": {
1451
+ "$ref": "#/components/responses/404NotFound_Environment"
1452
+ }
1453
+ },
1454
+ "security": [
1455
+ {
1456
+ "AmOAuth2": [
1457
+ "sfcc.storefront.environments",
1458
+ "sfcc.storefront.environments.rw"
1459
+ ]
1460
+ }
1461
+ ]
1462
+ },
1463
+ "post": {
1464
+ "summary": "Create a redirect.",
1465
+ "description": "Creates a redirect on the environment. Returns the created redirect and a `Location` header.",
1466
+ "operationId": "createRedirect",
1467
+ "parameters": [
1468
+ {
1469
+ "name": "organizationId",
1470
+ "in": "path",
1471
+ "description": "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).",
1472
+ "required": true,
1473
+ "style": "simple",
1474
+ "explode": false,
1475
+ "schema": {
1476
+ "$ref": "#/components/schemas/OrganizationId"
1477
+ },
1478
+ "example": "f_ecom_zzxy_prd"
1479
+ },
1480
+ {
1481
+ "name": "storefrontId",
1482
+ "in": "path",
1483
+ "description": "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.",
1484
+ "required": true,
1485
+ "style": "simple",
1486
+ "explode": false,
1487
+ "schema": {
1488
+ "type": "string",
1489
+ "example": "my-storefront-a1b2c3",
1490
+ "maxLength": 20,
1491
+ "minLength": 1,
1492
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1493
+ }
1494
+ },
1495
+ {
1496
+ "name": "environmentId",
1497
+ "in": "path",
1498
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1499
+ "required": true,
1500
+ "style": "simple",
1501
+ "explode": false,
1502
+ "schema": {
1503
+ "type": "string",
1504
+ "example": "production-a1b2c3d4",
1505
+ "maxLength": 19,
1506
+ "minLength": 1,
1507
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1508
+ }
1509
+ }
1510
+ ],
1511
+ "requestBody": {
1512
+ "content": {
1513
+ "application/json": {
1514
+ "schema": {
1515
+ "$ref": "#/components/schemas/RedirectCreateRequest"
1516
+ },
1517
+ "examples": {
1518
+ "CreateRedirect": {
1519
+ "$ref": "#/components/examples/CreateRedirect"
1520
+ }
1521
+ }
1522
+ }
1523
+ },
1524
+ "required": true
1525
+ },
1526
+ "responses": {
1527
+ "201": {
1528
+ "description": "Redirect successfully created. Returns the created redirect and a `Location` header.",
1529
+ "headers": {
1530
+ "Location": {
1531
+ "description": "The URL of the created redirect.",
1532
+ "required": false,
1533
+ "style": "simple",
1534
+ "explode": false,
1535
+ "schema": {
1536
+ "type": "string",
1537
+ "format": "uri",
1538
+ "example": "https://123456gf.api.commercecloud.salesforce.com/storefront/environments/v1/organizations/f_ecom_blnd_stg/storefronts/my-storefront/environments/production/redirects/3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
1539
+ }
1540
+ }
1541
+ },
1542
+ "content": {
1543
+ "application/json": {
1544
+ "schema": {
1545
+ "$ref": "#/components/schemas/Redirect"
1546
+ },
1547
+ "examples": {
1548
+ "RedirectCreatedSuccess": {
1549
+ "$ref": "#/components/examples/RedirectCreatedSuccess"
1550
+ }
1551
+ }
1552
+ }
1553
+ }
1554
+ },
1555
+ "400": {
1556
+ "$ref": "#/components/responses/400BadRequest_Redirect"
1557
+ },
1558
+ "401": {
1559
+ "$ref": "#/components/responses/401unauthorized"
1560
+ },
1561
+ "403": {
1562
+ "$ref": "#/components/responses/403forbidden"
1563
+ },
1564
+ "404": {
1565
+ "$ref": "#/components/responses/404NotFound_Environment"
1566
+ }
1567
+ },
1568
+ "security": [
1569
+ {
1570
+ "AmOAuth2": [
1571
+ "sfcc.storefront.environments.rw"
1572
+ ]
1573
+ }
1574
+ ]
1575
+ }
1576
+ },
1577
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/redirects/{redirectId}": {
1578
+ "get": {
1579
+ "summary": "Get a redirect by ID.",
1580
+ "description": "Retrieves a single redirect by its identifier.",
1581
+ "operationId": "getRedirect",
1582
+ "parameters": [
1583
+ {
1584
+ "name": "organizationId",
1585
+ "in": "path",
1586
+ "description": "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).",
1587
+ "required": true,
1588
+ "style": "simple",
1589
+ "explode": false,
1590
+ "schema": {
1591
+ "$ref": "#/components/schemas/OrganizationId"
1592
+ },
1593
+ "example": "f_ecom_zzxy_prd"
1594
+ },
1595
+ {
1596
+ "name": "storefrontId",
1597
+ "in": "path",
1598
+ "description": "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.",
1599
+ "required": true,
1600
+ "style": "simple",
1601
+ "explode": false,
1602
+ "schema": {
1603
+ "type": "string",
1604
+ "example": "my-storefront-a1b2c3",
1605
+ "maxLength": 20,
1606
+ "minLength": 1,
1607
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1608
+ }
1609
+ },
1610
+ {
1611
+ "name": "environmentId",
1612
+ "in": "path",
1613
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1614
+ "required": true,
1615
+ "style": "simple",
1616
+ "explode": false,
1617
+ "schema": {
1618
+ "type": "string",
1619
+ "example": "production-a1b2c3d4",
1620
+ "maxLength": 19,
1621
+ "minLength": 1,
1622
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1623
+ }
1624
+ },
1625
+ {
1626
+ "name": "redirectId",
1627
+ "in": "path",
1628
+ "description": "The redirect identifier, in UUID format.",
1629
+ "required": true,
1630
+ "style": "simple",
1631
+ "explode": false,
1632
+ "schema": {
1633
+ "type": "string",
1634
+ "format": "uuid",
1635
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
1636
+ }
1637
+ }
1638
+ ],
1639
+ "responses": {
1640
+ "200": {
1641
+ "description": "Redirect successfully retrieved.",
1642
+ "content": {
1643
+ "application/json": {
1644
+ "schema": {
1645
+ "$ref": "#/components/schemas/Redirect"
1646
+ },
1647
+ "examples": {
1648
+ "RedirectSuccess": {
1649
+ "$ref": "#/components/examples/RedirectSuccess"
1650
+ }
1651
+ }
1652
+ }
1653
+ }
1654
+ },
1655
+ "401": {
1656
+ "$ref": "#/components/responses/401unauthorized"
1657
+ },
1658
+ "403": {
1659
+ "$ref": "#/components/responses/403forbidden"
1660
+ },
1661
+ "404": {
1662
+ "$ref": "#/components/responses/404NotFound_Redirect"
1663
+ }
1664
+ },
1665
+ "security": [
1666
+ {
1667
+ "AmOAuth2": [
1668
+ "sfcc.storefront.environments",
1669
+ "sfcc.storefront.environments.rw"
1670
+ ]
1671
+ }
1672
+ ]
1673
+ },
1674
+ "delete": {
1675
+ "summary": "Delete a redirect.",
1676
+ "description": "Deletes a redirect by its identifier.",
1677
+ "operationId": "deleteRedirect",
1678
+ "parameters": [
1679
+ {
1680
+ "name": "organizationId",
1681
+ "in": "path",
1682
+ "description": "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).",
1683
+ "required": true,
1684
+ "style": "simple",
1685
+ "explode": false,
1686
+ "schema": {
1687
+ "$ref": "#/components/schemas/OrganizationId"
1688
+ },
1689
+ "example": "f_ecom_zzxy_prd"
1690
+ },
1691
+ {
1692
+ "name": "storefrontId",
1693
+ "in": "path",
1694
+ "description": "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.",
1695
+ "required": true,
1696
+ "style": "simple",
1697
+ "explode": false,
1698
+ "schema": {
1699
+ "type": "string",
1700
+ "example": "my-storefront-a1b2c3",
1701
+ "maxLength": 20,
1702
+ "minLength": 1,
1703
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1704
+ }
1705
+ },
1706
+ {
1707
+ "name": "environmentId",
1708
+ "in": "path",
1709
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1710
+ "required": true,
1711
+ "style": "simple",
1712
+ "explode": false,
1713
+ "schema": {
1714
+ "type": "string",
1715
+ "example": "production-a1b2c3d4",
1716
+ "maxLength": 19,
1717
+ "minLength": 1,
1718
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1719
+ }
1720
+ },
1721
+ {
1722
+ "name": "redirectId",
1723
+ "in": "path",
1724
+ "description": "The redirect identifier, in UUID format.",
1725
+ "required": true,
1726
+ "style": "simple",
1727
+ "explode": false,
1728
+ "schema": {
1729
+ "type": "string",
1730
+ "format": "uuid",
1731
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
1732
+ }
1733
+ }
1734
+ ],
1735
+ "responses": {
1736
+ "204": {
1737
+ "description": "Redirect successfully deleted."
1738
+ },
1739
+ "401": {
1740
+ "$ref": "#/components/responses/401unauthorized"
1741
+ },
1742
+ "403": {
1743
+ "$ref": "#/components/responses/403forbidden"
1744
+ },
1745
+ "404": {
1746
+ "$ref": "#/components/responses/404NotFound_Redirect"
1747
+ }
1748
+ },
1749
+ "security": [
1750
+ {
1751
+ "AmOAuth2": [
1752
+ "sfcc.storefront.environments.rw"
1753
+ ]
1754
+ }
1755
+ ]
1756
+ },
1757
+ "patch": {
1758
+ "summary": "Update a redirect.",
1759
+ "description": "Partially updates a redirect by its identifier. Only the supplied fields are changed.",
1760
+ "operationId": "updateRedirect",
1761
+ "parameters": [
1762
+ {
1763
+ "name": "organizationId",
1764
+ "in": "path",
1765
+ "description": "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).",
1766
+ "required": true,
1767
+ "style": "simple",
1768
+ "explode": false,
1769
+ "schema": {
1770
+ "$ref": "#/components/schemas/OrganizationId"
1771
+ },
1772
+ "example": "f_ecom_zzxy_prd"
1773
+ },
1774
+ {
1775
+ "name": "storefrontId",
1776
+ "in": "path",
1777
+ "description": "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.",
1778
+ "required": true,
1779
+ "style": "simple",
1780
+ "explode": false,
1781
+ "schema": {
1782
+ "type": "string",
1783
+ "example": "my-storefront-a1b2c3",
1784
+ "maxLength": 20,
1785
+ "minLength": 1,
1786
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1787
+ }
1788
+ },
1789
+ {
1790
+ "name": "environmentId",
1791
+ "in": "path",
1792
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1793
+ "required": true,
1794
+ "style": "simple",
1795
+ "explode": false,
1796
+ "schema": {
1797
+ "type": "string",
1798
+ "example": "production-a1b2c3d4",
1799
+ "maxLength": 19,
1800
+ "minLength": 1,
1801
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1802
+ }
1803
+ },
1804
+ {
1805
+ "name": "redirectId",
1806
+ "in": "path",
1807
+ "description": "The redirect identifier, in UUID format.",
1808
+ "required": true,
1809
+ "style": "simple",
1810
+ "explode": false,
1811
+ "schema": {
1812
+ "type": "string",
1813
+ "format": "uuid",
1814
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
1815
+ }
1816
+ }
1817
+ ],
1818
+ "requestBody": {
1819
+ "content": {
1820
+ "application/json": {
1821
+ "schema": {
1822
+ "$ref": "#/components/schemas/RedirectUpdateRequest"
1823
+ },
1824
+ "examples": {
1825
+ "UpdateRedirect": {
1826
+ "$ref": "#/components/examples/UpdateRedirect"
1827
+ }
1828
+ }
1829
+ }
1830
+ },
1831
+ "required": true
1832
+ },
1833
+ "responses": {
1834
+ "200": {
1835
+ "description": "Redirect successfully updated.",
1836
+ "content": {
1837
+ "application/json": {
1838
+ "schema": {
1839
+ "$ref": "#/components/schemas/Redirect"
1840
+ },
1841
+ "examples": {
1842
+ "RedirectUpdatedSuccess": {
1843
+ "$ref": "#/components/examples/RedirectUpdatedSuccess"
1844
+ }
1845
+ }
1846
+ }
1847
+ }
1848
+ },
1849
+ "400": {
1850
+ "$ref": "#/components/responses/400BadRequest_Redirect"
1851
+ },
1852
+ "401": {
1853
+ "$ref": "#/components/responses/401unauthorized"
1854
+ },
1855
+ "403": {
1856
+ "$ref": "#/components/responses/403forbidden"
1857
+ },
1858
+ "404": {
1859
+ "$ref": "#/components/responses/404NotFound_Redirect"
1860
+ }
1861
+ },
1862
+ "security": [
1863
+ {
1864
+ "AmOAuth2": [
1865
+ "sfcc.storefront.environments.rw"
1866
+ ]
1867
+ }
1868
+ ]
1869
+ }
1870
+ },
1871
+ "/organizations/{organizationId}/storefronts/{storefrontId}/environments/{environmentId}/redirects/actions/clone": {
1872
+ "post": {
1873
+ "summary": "Clone redirects from a source environment.",
1874
+ "description": "Copies all redirects from a source environment into the environment in the request path. The source environment must differ from the destination environment.",
1875
+ "operationId": "cloneRedirects",
1876
+ "parameters": [
1877
+ {
1878
+ "name": "organizationId",
1879
+ "in": "path",
1880
+ "description": "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).",
1881
+ "required": true,
1882
+ "style": "simple",
1883
+ "explode": false,
1884
+ "schema": {
1885
+ "$ref": "#/components/schemas/OrganizationId"
1886
+ },
1887
+ "example": "f_ecom_zzxy_prd"
1888
+ },
1889
+ {
1890
+ "name": "storefrontId",
1891
+ "in": "path",
1892
+ "description": "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.",
1893
+ "required": true,
1894
+ "style": "simple",
1895
+ "explode": false,
1896
+ "schema": {
1897
+ "type": "string",
1898
+ "example": "my-storefront-a1b2c3",
1899
+ "maxLength": 20,
1900
+ "minLength": 1,
1901
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1902
+ }
1903
+ },
1904
+ {
1905
+ "name": "environmentId",
1906
+ "in": "path",
1907
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
1908
+ "required": true,
1909
+ "style": "simple",
1910
+ "explode": false,
1911
+ "schema": {
1912
+ "type": "string",
1913
+ "example": "production-a1b2c3d4",
1914
+ "maxLength": 19,
1915
+ "minLength": 1,
1916
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
1917
+ }
1918
+ }
1919
+ ],
1920
+ "requestBody": {
1921
+ "content": {
1922
+ "application/json": {
1923
+ "schema": {
1924
+ "$ref": "#/components/schemas/RedirectCloneRequest"
1925
+ },
1926
+ "examples": {
1927
+ "CloneRedirects": {
1928
+ "$ref": "#/components/examples/CloneRedirects"
1929
+ }
1930
+ }
1931
+ }
1932
+ },
1933
+ "required": true
1934
+ },
1935
+ "responses": {
1936
+ "201": {
1937
+ "description": "Redirects successfully cloned into the destination environment."
1938
+ },
1939
+ "400": {
1940
+ "$ref": "#/components/responses/400BadRequest_RedirectClone"
1941
+ },
1942
+ "401": {
1943
+ "$ref": "#/components/responses/401unauthorized"
1944
+ },
1945
+ "403": {
1946
+ "$ref": "#/components/responses/403forbidden"
1947
+ },
1948
+ "404": {
1949
+ "$ref": "#/components/responses/404NotFound_Environment"
1950
+ }
1951
+ },
1952
+ "security": [
1953
+ {
1954
+ "AmOAuth2": [
1955
+ "sfcc.storefront.environments.rw"
1956
+ ]
1957
+ }
1958
+ ]
1959
+ }
1960
+ }
1961
+ },
1962
+ "components": {
1963
+ "schemas": {
1964
+ "OrganizationId": {
1965
+ "type": "string",
1966
+ "description": "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).",
1967
+ "example": "f_ecom_zzxy_prd",
1968
+ "pattern": "^f_ecom_[a-z]{4}_(prd|stg|dev|s[0-9]{2}|[0-9]{3})$"
1969
+ },
1970
+ "Total": {
1971
+ "type": "integer",
1972
+ "format": "int32",
1973
+ "default": 0,
1974
+ "description": "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.",
1975
+ "example": 10,
1976
+ "minimum": 0
1977
+ },
1978
+ "ResultBase": {
1979
+ "type": "object",
1980
+ "description": "Schema defining generic list result. Each response schema of a resource requiring a list response should extend this schema. \nAdditionally it needs to be defined what data is returned.",
1981
+ "properties": {
1982
+ "limit": {
1983
+ "type": "integer",
1984
+ "format": "int32",
1985
+ "description": "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.",
1986
+ "example": 10
1987
+ },
1988
+ "total": {
1989
+ "$ref": "#/components/schemas/Total"
1990
+ }
1991
+ },
1992
+ "required": [
1993
+ "limit",
1994
+ "total"
1995
+ ]
1996
+ },
1997
+ "Offset": {
1998
+ "type": "integer",
1999
+ "format": "int32",
2000
+ "default": 0,
2001
+ "description": "The zero-based index of the first hit/data to include in the result.",
2002
+ "example": 0,
2003
+ "minimum": 0
2004
+ },
2005
+ "PaginatedResultBase": {
2006
+ "allOf": [
2007
+ {
2008
+ "$ref": "#/components/schemas/ResultBase"
2009
+ }
2010
+ ],
2011
+ "description": "Schema defining generic pageable result. Each response schema of a resource requiring pagination should extend this schema. \nIf you use this extend this schema directly, it needs to be defined what data is returned. Allowed names for the data field is `data`.",
2012
+ "properties": {
2013
+ "offset": {
2014
+ "$ref": "#/components/schemas/Offset"
2015
+ }
2016
+ },
2017
+ "required": [
2018
+ "limit",
2019
+ "offset",
2020
+ "total"
2021
+ ]
2022
+ },
2023
+ "EnvironmentStatus": {
2024
+ "type": "string",
2025
+ "description": "The current provisioning or lifecycle status of the environment.",
2026
+ "enum": [
2027
+ "building",
2028
+ "ready",
2029
+ "build_failed",
2030
+ "deleting",
2031
+ "deleted",
2032
+ "delete_failed"
2033
+ ],
2034
+ "example": "ready"
2035
+ },
2036
+ "SsrRegion": {
2037
+ "type": "string",
2038
+ "description": "The AWS region for the server-side rendering function of the environment. 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`).",
2039
+ "enum": [
2040
+ "us_east_1",
2041
+ "us_east_2",
2042
+ "us_west_1",
2043
+ "us_west_2",
2044
+ "ap_south_1",
2045
+ "ap_south_2",
2046
+ "ap_northeast_2",
2047
+ "ap_southeast_1",
2048
+ "ap_southeast_2",
2049
+ "ap_southeast_3",
2050
+ "ap_northeast_1",
2051
+ "ap_northeast_3",
2052
+ "ca_central_1",
2053
+ "eu_central_1",
2054
+ "eu_central_2",
2055
+ "eu_west_1",
2056
+ "eu_west_2",
2057
+ "eu_west_3",
2058
+ "eu_north_1",
2059
+ "eu_south_1",
2060
+ "sa_east_1"
2061
+ ],
2062
+ "example": "us_east_2"
2063
+ },
2064
+ "SsrProxyConfig": {
2065
+ "type": "object",
2066
+ "additionalProperties": false,
2067
+ "description": "A single proxy configuration entry for the environment, defined by its `path`, `host`, and `protocol`.",
2068
+ "properties": {
2069
+ "path": {
2070
+ "type": "string",
2071
+ "description": "The request path prefix routed to the proxy origin.",
2072
+ "example": "/api",
2073
+ "maxLength": 2048
2074
+ },
2075
+ "host": {
2076
+ "type": "string",
2077
+ "description": "The proxy origin host.",
2078
+ "example": "api.example.com",
2079
+ "maxLength": 255
2080
+ },
2081
+ "protocol": {
2082
+ "type": "string",
2083
+ "description": "The protocol used to reach the proxy origin. Only `https` is supported.",
2084
+ "enum": [
2085
+ "https"
2086
+ ],
2087
+ "example": "https"
2088
+ }
2089
+ }
2090
+ },
2091
+ "Environment": {
2092
+ "type": "object",
2093
+ "description": "An environment within Managed Runtime (MRT) where to deploy storefronts to separate phases of your development lifecycle, such as development, staging, or production.",
2094
+ "properties": {
2095
+ "environmentId": {
2096
+ "type": "string",
2097
+ "description": "The generated environment identifier. Unique within the storefront, with an auto-generated hash suffix.",
2098
+ "example": "production-a1b2c3d4",
2099
+ "maxLength": 19,
2100
+ "minLength": 1,
2101
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2102
+ },
2103
+ "displayName": {
2104
+ "type": "string",
2105
+ "description": "The display name of the environment.",
2106
+ "example": "Production",
2107
+ "maxLength": 256
2108
+ },
2109
+ "status": {
2110
+ "$ref": "#/components/schemas/EnvironmentStatus"
2111
+ },
2112
+ "isPrimary": {
2113
+ "type": "boolean",
2114
+ "description": "Indicates whether the environment is the storefront's primary environment. Only one environment per storefront can be primary.",
2115
+ "example": true
2116
+ },
2117
+ "subdomain": {
2118
+ "type": "string",
2119
+ "description": "The subdomain assigned to this environment. The subdomain is available after the environment finishes building and is null before then.",
2120
+ "example": "production",
2121
+ "maxLength": 256
2122
+ },
2123
+ "mrtOrigin": {
2124
+ "type": "string",
2125
+ "description": "The Managed Runtime origin URL that backs this environment. The origin is available after the environment finishes building and is null before then.",
2126
+ "example": "https://production-my-storefront.exp-delivery.com",
2127
+ "maxLength": 512
2128
+ },
2129
+ "defaultEcdnHostname": {
2130
+ "type": "string",
2131
+ "description": "The eCDN hostname for the environment's default domain zone, used by the preview link. The eCDN hostname is available after the environment finishes building and is null before then.",
2132
+ "example": "marketstreetb82739d375a9270f.zzzz-001.my.cc.salesforce.com",
2133
+ "maxLength": 256
2134
+ },
2135
+ "creationDate": {
2136
+ "type": "string",
2137
+ "format": "date-time",
2138
+ "description": "The timestamp when the environment was created.",
2139
+ "example": "2026-04-08T21:47:28.188965Z"
2140
+ },
2141
+ "lastModified": {
2142
+ "type": "string",
2143
+ "format": "date-time",
2144
+ "description": "The timestamp when the environment was last modified.",
2145
+ "example": "2026-04-08T21:47:31.307595Z"
2146
+ },
2147
+ "ssrRegion": {
2148
+ "$ref": "#/components/schemas/SsrRegion"
2149
+ },
2150
+ "ssrArchitecture": {
2151
+ "type": "string",
2152
+ "description": "The architecture for the environment's server-side rendering function. Null when no architecture default is configured.",
2153
+ "enum": [
2154
+ "x86",
2155
+ "arm64"
2156
+ ],
2157
+ "example": "arm64"
2158
+ },
2159
+ "ssrExternalHostname": {
2160
+ "type": "string",
2161
+ "description": "The full custom hostname used by the environment (e.g. www.customer.com). Null when not configured.",
2162
+ "example": "www.customer.com",
2163
+ "maxLength": 128
2164
+ },
2165
+ "ssrExternalDomain": {
2166
+ "type": "string",
2167
+ "description": "The external domain for the ssrExternalHostname (e.g. customer.com). When omitted it is derived from ssrExternalHostname. Null when not configured.",
2168
+ "example": "customer.com",
2169
+ "maxLength": 128
2170
+ },
2171
+ "ssrWhitelistedIps": {
2172
+ "type": "string",
2173
+ "description": "A space-separated list of IPv4 or IPv6 CIDR blocks permitted to access the environment. Null or empty allows all IPs.",
2174
+ "example": "192.0.2.0/24 198.51.100.0/24",
2175
+ "maxLength": 8192
2176
+ },
2177
+ "ssrProxyConfigs": {
2178
+ "type": "array",
2179
+ "description": "The proxy configurations for the environment. Null when none are configured.",
2180
+ "items": {
2181
+ "$ref": "#/components/schemas/SsrProxyConfig"
2182
+ },
2183
+ "maxItems": 8
2184
+ },
2185
+ "isProduction": {
2186
+ "type": "boolean",
2187
+ "description": "Whether the environment is provisioned with production-tier capacity.",
2188
+ "example": false
2189
+ },
2190
+ "allowCookies": {
2191
+ "type": "boolean",
2192
+ "description": "Whether cookies are forwarded to and respected from the environment's origin.",
2193
+ "example": true
2194
+ },
2195
+ "preserveProxyUserAgent": {
2196
+ "type": "boolean",
2197
+ "description": "Whether the end-user's User-Agent header is preserved on requests forwarded through the environment's configured proxies.",
2198
+ "example": false
2199
+ },
2200
+ "enableSourceMaps": {
2201
+ "type": "boolean",
2202
+ "description": "Whether source maps are enabled for the environment's server-side rendering bundle.",
2203
+ "example": false
2204
+ },
2205
+ "logLevel": {
2206
+ "type": "string",
2207
+ "description": "The minimum log level emitted by the environment's server-side rendering function. Null when inherited from the default.",
2208
+ "enum": [
2209
+ "trace",
2210
+ "debug",
2211
+ "info",
2212
+ "warn",
2213
+ "error",
2214
+ "fatal"
2215
+ ],
2216
+ "example": "warn"
2217
+ },
2218
+ "distributedTracing": {
2219
+ "type": "boolean",
2220
+ "description": "Whether distributed tracing is enabled for the environment.",
2221
+ "example": false
2222
+ },
2223
+ "distributedTracingSamplingRate": {
2224
+ "type": "number",
2225
+ "format": "double",
2226
+ "description": "The fraction of requests sampled for distributed tracing.",
2227
+ "example": 0.1,
2228
+ "maximum": 1,
2229
+ "minimum": 0
2230
+ },
2231
+ "certificateId": {
2232
+ "type": "integer",
2233
+ "format": "int32",
2234
+ "description": "The identifier of the certificate associated with the environment's custom domain. Null when using the default Managed Runtime domain.",
2235
+ "example": 42,
2236
+ "minimum": 0
2237
+ }
2238
+ },
2239
+ "required": [
2240
+ "displayName",
2241
+ "environmentId",
2242
+ "isPrimary",
2243
+ "status"
2244
+ ]
2245
+ },
2246
+ "EnvironmentResult": {
2247
+ "allOf": [
2248
+ {
2249
+ "$ref": "#/components/schemas/PaginatedResultBase"
2250
+ }
2251
+ ],
2252
+ "description": "Result containing a paginated list of environments.",
2253
+ "properties": {
2254
+ "data": {
2255
+ "type": "array",
2256
+ "description": "The list of environments belonging to the storefront. This value can be empty.",
2257
+ "items": {
2258
+ "$ref": "#/components/schemas/Environment"
2259
+ }
2260
+ }
2261
+ },
2262
+ "required": [
2263
+ "data"
2264
+ ]
2265
+ },
2266
+ "ErrorResponse": {
2267
+ "type": "object",
2268
+ "additionalProperties": true,
2269
+ "properties": {
2270
+ "title": {
2271
+ "type": "string",
2272
+ "description": "A short, human-readable summary of the problem\ntype. It will not change from occurrence to occurrence of the \nproblem, except for purposes of localization\n",
2273
+ "example": "You do not have enough credit",
2274
+ "maxLength": 256
2275
+ },
2276
+ "type": {
2277
+ "type": "string",
2278
+ "description": "A URI reference [RFC3986] that identifies the\nproblem type. This specification encourages that, when\ndereferenced, it provide human-readable documentation for the\nproblem type (e.g., using HTML [W3C.REC-html5-20141028]). When\nthis member is not present, its value is assumed to be\n\"about:blank\". It accepts relative URIs; this means\nthat they must be resolved relative to the document's base URI, as\nper [RFC3986], Section 5.\n",
2279
+ "example": "NotEnoughMoney",
2280
+ "maxLength": 2048
2281
+ },
2282
+ "detail": {
2283
+ "type": "string",
2284
+ "description": "A human-readable explanation specific to this occurrence of the problem.",
2285
+ "example": "Your current balance is 30, but that costs 50"
2286
+ },
2287
+ "instance": {
2288
+ "type": "string",
2289
+ "description": "A URI reference that identifies the specific\noccurrence of the problem. It may or may not yield further\ninformation if dereferenced. It accepts relative URIs; this means\nthat they must be resolved relative to the document's base URI, as\nper [RFC3986], Section 5.\n",
2290
+ "example": "/account/12345/msgs/abc",
2291
+ "maxLength": 2048
2292
+ }
2293
+ },
2294
+ "required": [
2295
+ "detail",
2296
+ "title",
2297
+ "type"
2298
+ ]
2299
+ },
2300
+ "StorefrontNotFoundErrorResponse": {
2301
+ "allOf": [
2302
+ {
2303
+ "$ref": "#/components/schemas/ErrorResponse"
2304
+ }
2305
+ ],
2306
+ "description": "Returned when the storefront that the environment belongs to does not exist for this organization.",
2307
+ "properties": {
2308
+ "storefrontId": {
2309
+ "type": "string",
2310
+ "description": "The identifier of the storefront that couldn't be found.",
2311
+ "example": "my-storefront-a1b2c3",
2312
+ "maxLength": 20,
2313
+ "minLength": 1,
2314
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2315
+ }
2316
+ }
2317
+ },
2318
+ "EnvironmentCreateRequest": {
2319
+ "type": "object",
2320
+ "description": "Request body to create an environment for a storefront.",
2321
+ "properties": {
2322
+ "displayName": {
2323
+ "type": "string",
2324
+ "description": "The display name for the new environment.",
2325
+ "example": "Production",
2326
+ "maxLength": 256
2327
+ }
2328
+ },
2329
+ "required": [
2330
+ "displayName"
2331
+ ]
2332
+ },
2333
+ "InvalidEnvironmentCreateRequestErrorResponse": {
2334
+ "allOf": [
2335
+ {
2336
+ "$ref": "#/components/schemas/ErrorResponse"
2337
+ }
2338
+ ],
2339
+ "description": "Returned when the environment creation request body is malformed or missing a valid displayName."
2340
+ },
2341
+ "EnvironmentCloneRequest": {
2342
+ "type": "object",
2343
+ "description": "Request body to create an environment by cloning an existing one.",
2344
+ "properties": {
2345
+ "sourceEnvironmentId": {
2346
+ "type": "string",
2347
+ "description": "The identifier of the environment to clone.",
2348
+ "example": "production-a1b2c3d4",
2349
+ "maxLength": 19,
2350
+ "minLength": 1,
2351
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2352
+ },
2353
+ "displayName": {
2354
+ "type": "string",
2355
+ "description": "The display name for the new environment.",
2356
+ "example": "Production (EU)",
2357
+ "maxLength": 256
2358
+ },
2359
+ "cloneEnvironmentVariables": {
2360
+ "type": "boolean",
2361
+ "default": false,
2362
+ "description": "Indicates whether to copy the source environment's environment variables to the new environment.",
2363
+ "example": true
2364
+ },
2365
+ "cloneRedirects": {
2366
+ "type": "boolean",
2367
+ "default": false,
2368
+ "description": "Indicates whether to copy the source environment's redirects to the new environment.",
2369
+ "example": true
2370
+ },
2371
+ "cloneB2cTargetInfo": {
2372
+ "type": "boolean",
2373
+ "default": true,
2374
+ "description": "Indicates whether to copy the source environment's B2C Commerce target information to the new environment.",
2375
+ "example": true
2376
+ }
2377
+ },
2378
+ "required": [
2379
+ "displayName",
2380
+ "sourceEnvironmentId"
2381
+ ]
2382
+ },
2383
+ "InvalidEnvironmentCloneRequestErrorResponse": {
2384
+ "allOf": [
2385
+ {
2386
+ "$ref": "#/components/schemas/ErrorResponse"
2387
+ }
2388
+ ],
2389
+ "description": "Returned when the environment clone request body is malformed or missing a valid sourceEnvironmentId or displayName."
2390
+ },
2391
+ "SourceEnvironmentNotFoundErrorResponse": {
2392
+ "allOf": [
2393
+ {
2394
+ "$ref": "#/components/schemas/ErrorResponse"
2395
+ }
2396
+ ],
2397
+ "description": "Returned when the sourceEnvironmentId in a clone request does not exist for the specified storefront.",
2398
+ "properties": {
2399
+ "storefrontId": {
2400
+ "type": "string",
2401
+ "description": "The identifier of the storefront the clone was requested under.",
2402
+ "example": "my-storefront-a1b2c3",
2403
+ "maxLength": 20,
2404
+ "minLength": 1,
2405
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2406
+ },
2407
+ "sourceEnvironmentId": {
2408
+ "type": "string",
2409
+ "description": "The identifier of the source environment that couldn't be found.",
2410
+ "example": "production-a1b2c3d4",
2411
+ "maxLength": 19,
2412
+ "minLength": 1,
2413
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2414
+ }
2415
+ }
2416
+ },
2417
+ "EnvironmentNotFoundErrorResponse": {
2418
+ "allOf": [
2419
+ {
2420
+ "$ref": "#/components/schemas/ErrorResponse"
2421
+ }
2422
+ ],
2423
+ "description": "Returned when the requested environment (or the source environment referenced in a clone request) does not exist for the specified storefront.",
2424
+ "properties": {
2425
+ "storefrontId": {
2426
+ "type": "string",
2427
+ "description": "The identifier of the storefront the environment was requested under.",
2428
+ "example": "my-storefront-a1b2c3",
2429
+ "maxLength": 20,
2430
+ "minLength": 1,
2431
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2432
+ },
2433
+ "environmentId": {
2434
+ "type": "string",
2435
+ "description": "The identifier of the environment that couldn't be found.",
2436
+ "example": "production-a1b2c3d4",
2437
+ "maxLength": 19,
2438
+ "minLength": 1,
2439
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2440
+ }
2441
+ }
2442
+ },
2443
+ "EnvironmentBusyErrorResponse": {
2444
+ "allOf": [
2445
+ {
2446
+ "$ref": "#/components/schemas/ErrorResponse"
2447
+ }
2448
+ ],
2449
+ "description": "Returned when an environment deletion is requested while the environment is already building or deleting.",
2450
+ "properties": {
2451
+ "environmentId": {
2452
+ "type": "string",
2453
+ "description": "The identifier of the environment.",
2454
+ "example": "production-a1b2c3d4",
2455
+ "maxLength": 19,
2456
+ "minLength": 1,
2457
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2458
+ },
2459
+ "status": {
2460
+ "type": "string",
2461
+ "description": "The environment's current status.",
2462
+ "enum": [
2463
+ "building",
2464
+ "deleting"
2465
+ ],
2466
+ "example": "building"
2467
+ }
2468
+ }
2469
+ },
2470
+ "EnvironmentUpdateRequest": {
2471
+ "type": "object",
2472
+ "description": "Request body to update an environment. Every field is optional and only the supplied fields are changed; at least one field must be provided.",
2473
+ "minProperties": 1,
2474
+ "properties": {
2475
+ "displayName": {
2476
+ "type": "string",
2477
+ "description": "The new display name for the environment.",
2478
+ "example": "Production",
2479
+ "maxLength": 256
2480
+ },
2481
+ "ssrRegion": {
2482
+ "$ref": "#/components/schemas/SsrRegion"
2483
+ },
2484
+ "ssrArchitecture": {
2485
+ "type": "string",
2486
+ "description": "The architecture for the environment's server-side rendering function. Set to null to inherit the storefront default.",
2487
+ "enum": [
2488
+ "x86",
2489
+ "arm64"
2490
+ ],
2491
+ "example": "arm64"
2492
+ },
2493
+ "ssrExternalHostname": {
2494
+ "type": "string",
2495
+ "description": "The full custom hostname used by the environment (e.g. www.customer.com). Set to null to clear it.",
2496
+ "example": "www.customer.com",
2497
+ "maxLength": 128
2498
+ },
2499
+ "ssrExternalDomain": {
2500
+ "type": "string",
2501
+ "description": "The external domain for the ssrExternalHostname (e.g. customer.com). When omitted it is derived from ssrExternalHostname. Set to null to clear it.",
2502
+ "example": "customer.com",
2503
+ "maxLength": 128
2504
+ },
2505
+ "ssrWhitelistedIps": {
2506
+ "type": "string",
2507
+ "description": "A space-separated list of IPv4 or IPv6 CIDR blocks permitted to access the environment. Set to null or empty to allow all IPs.",
2508
+ "example": "192.0.2.0/24 198.51.100.0/24",
2509
+ "maxLength": 8192
2510
+ },
2511
+ "ssrProxyConfigs": {
2512
+ "type": "array",
2513
+ "description": "The proxy configurations for the environment. Set to null to clear them.",
2514
+ "items": {
2515
+ "$ref": "#/components/schemas/SsrProxyConfig"
2516
+ },
2517
+ "maxItems": 8
2518
+ },
2519
+ "isProduction": {
2520
+ "type": "boolean",
2521
+ "description": "Whether the environment is provisioned with production-tier capacity.",
2522
+ "example": false
2523
+ },
2524
+ "allowCookies": {
2525
+ "type": "boolean",
2526
+ "description": "Whether cookies are forwarded to and respected from the environment's origin.",
2527
+ "example": true
2528
+ },
2529
+ "preserveProxyUserAgent": {
2530
+ "type": "boolean",
2531
+ "description": "Whether the end-user's User-Agent header is preserved on requests forwarded through the environment's configured proxies.",
2532
+ "example": false
2533
+ },
2534
+ "enableSourceMaps": {
2535
+ "type": "boolean",
2536
+ "description": "Whether source maps are enabled for the environment's server-side rendering bundle.",
2537
+ "example": false
2538
+ },
2539
+ "logLevel": {
2540
+ "type": "string",
2541
+ "description": "The minimum log level emitted by the environment's server-side rendering function. Set to null to inherit the default.",
2542
+ "enum": [
2543
+ "trace",
2544
+ "debug",
2545
+ "info",
2546
+ "warn",
2547
+ "error",
2548
+ "fatal"
2549
+ ],
2550
+ "example": "warn"
2551
+ },
2552
+ "distributedTracing": {
2553
+ "type": "boolean",
2554
+ "description": "Whether distributed tracing is enabled for the environment.",
2555
+ "example": false
2556
+ },
2557
+ "distributedTracingSamplingRate": {
2558
+ "type": "number",
2559
+ "format": "double",
2560
+ "description": "The fraction of requests sampled for distributed tracing.",
2561
+ "example": 0.1,
2562
+ "maximum": 1,
2563
+ "minimum": 0
2564
+ },
2565
+ "certificateId": {
2566
+ "type": "integer",
2567
+ "format": "int32",
2568
+ "description": "The identifier of the certificate to associate with the environment's custom domain. Set to null to remove the certificate association. Not permitted when using the default Managed Runtime domain.",
2569
+ "example": 42,
2570
+ "minimum": 0
2571
+ }
2572
+ }
2573
+ },
2574
+ "InvalidEnvironmentUpdateRequestErrorResponse": {
2575
+ "allOf": [
2576
+ {
2577
+ "$ref": "#/components/schemas/ErrorResponse"
2578
+ }
2579
+ ],
2580
+ "description": "Returned when the environment update request body is malformed, empty, or contains an unsupported value (for example an invalid ssrRegion, ssrArchitecture, or logLevel)."
2581
+ },
2582
+ "EnvironmentSsrRegionDisabledErrorResponse": {
2583
+ "allOf": [
2584
+ {
2585
+ "$ref": "#/components/schemas/ErrorResponse"
2586
+ }
2587
+ ],
2588
+ "description": "Returned when the requested ssrRegion is in the temporarily disabled set.",
2589
+ "properties": {
2590
+ "ssrRegion": {
2591
+ "type": "string",
2592
+ "description": "The identifier of the SSR region that is temporarily disabled.",
2593
+ "example": "eu_south_1",
2594
+ "maxLength": 32
2595
+ }
2596
+ }
2597
+ },
2598
+ "EnvironmentSsrArchitectureNotEnabledErrorResponse": {
2599
+ "allOf": [
2600
+ {
2601
+ "$ref": "#/components/schemas/ErrorResponse"
2602
+ }
2603
+ ],
2604
+ "description": "Returned when the x86 ssrArchitecture is requested but the organization is not permitted to configure the SSR architecture."
2605
+ },
2606
+ "EnvironmentSsrArchitectureX86EndOfLifeErrorResponse": {
2607
+ "allOf": [
2608
+ {
2609
+ "$ref": "#/components/schemas/ErrorResponse"
2610
+ }
2611
+ ],
2612
+ "description": "Returned when the x86 ssrArchitecture is requested after its end-of-life date and the organization has no active grace period."
2613
+ },
2614
+ "EnvironmentCertificateInvalidErrorResponse": {
2615
+ "allOf": [
2616
+ {
2617
+ "$ref": "#/components/schemas/ErrorResponse"
2618
+ }
2619
+ ],
2620
+ "description": "Returned when the supplied certificateId does not exist for the organization, is not in a validated state, does not match the environment's hostname domain, or is supplied while the environment uses the default Managed Runtime domain.",
2621
+ "properties": {
2622
+ "certificateId": {
2623
+ "type": "integer",
2624
+ "format": "int32",
2625
+ "description": "The identifier of the certificate that was rejected.",
2626
+ "example": 42,
2627
+ "minimum": 0
2628
+ }
2629
+ }
2630
+ },
2631
+ "EnvironmentSsrFieldBusinessManagerErrorResponse": {
2632
+ "allOf": [
2633
+ {
2634
+ "$ref": "#/components/schemas/ErrorResponse"
2635
+ }
2636
+ ],
2637
+ "description": "Returned when an SSR networking field (ssrExternalHostname, ssrExternalDomain, or ssrWhitelistedIps) is changed on an environment that is served through eCDN, where such changes must be made in Business Manager.",
2638
+ "properties": {
2639
+ "field": {
2640
+ "type": "string",
2641
+ "description": "The name of the SSR field that cannot be changed through this API.",
2642
+ "example": "ssrExternalHostname",
2643
+ "maxLength": 64
2644
+ }
2645
+ }
2646
+ },
2647
+ "EnvironmentInvalidProxyConfigErrorResponse": {
2648
+ "allOf": [
2649
+ {
2650
+ "$ref": "#/components/schemas/ErrorResponse"
2651
+ }
2652
+ ],
2653
+ "description": "Returned when ssrProxyConfigs fail validation — for example more than the maximum of 8 proxies, duplicate proxy paths, an invalid proxy host, or an unsupported protocol (only https is supported).",
2654
+ "properties": {
2655
+ "reason": {
2656
+ "type": "string",
2657
+ "description": "A human-readable description of the proxy configuration validation failure.",
2658
+ "example": "The max number of proxies allowed is 8, but 9 given.",
2659
+ "maxLength": 4000
2660
+ }
2661
+ }
2662
+ },
2663
+ "EnvironmentUpdateForbiddenErrorResponse": {
2664
+ "allOf": [
2665
+ {
2666
+ "$ref": "#/components/schemas/ErrorResponse"
2667
+ }
2668
+ ],
2669
+ "description": "Returned when the requested update is not permitted — for example changing allowCookies on a Storefront Next environment (where cookies are always enabled), or changing an SSR networking field on a protected environment."
2670
+ },
2671
+ "PrimaryEnvironmentInvalidStatusErrorResponse": {
2672
+ "allOf": [
2673
+ {
2674
+ "$ref": "#/components/schemas/ErrorResponse"
2675
+ }
2676
+ ],
2677
+ "description": "Returned when an environment is set as primary while its status is not ready or build_failed.",
2678
+ "properties": {
2679
+ "environmentId": {
2680
+ "type": "string",
2681
+ "description": "The identifier of the environment.",
2682
+ "example": "production-a1b2c3d4",
2683
+ "maxLength": 19,
2684
+ "minLength": 1,
2685
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
2686
+ },
2687
+ "status": {
2688
+ "type": "string",
2689
+ "description": "The environment's current status.",
2690
+ "enum": [
2691
+ "building",
2692
+ "deleting",
2693
+ "deleted",
2694
+ "delete_failed"
2695
+ ],
2696
+ "example": "building"
2697
+ }
2698
+ }
2699
+ },
2700
+ "CacheInvalidationRequest": {
2701
+ "type": "object",
2702
+ "description": "Request body to trigger a CDN cache invalidation on the environment.",
2703
+ "properties": {
2704
+ "pattern": {
2705
+ "type": "string",
2706
+ "description": "The path prefix to invalidate. Must start with `/`. Cache invalidation is always a wildcard operation: the CDN clears every cached path that begins with this value (a trailing `*` is always implied), so `/products` and `/products*` invalidate the same paths. If the value contains a `*`, only the portion before the first `*` is used as the prefix and the remainder is ignored. The invalidation is performed asynchronously.",
2707
+ "example": "/products/*",
2708
+ "minLength": 1,
2709
+ "pattern": "^/.*$"
2710
+ }
2711
+ },
2712
+ "required": [
2713
+ "pattern"
2714
+ ]
2715
+ },
2716
+ "CacheInvalidationPatternInvalidErrorResponse": {
2717
+ "allOf": [
2718
+ {
2719
+ "$ref": "#/components/schemas/ErrorResponse"
2720
+ }
2721
+ ],
2722
+ "description": "Returned when the cache invalidation `pattern` is missing or does not start with `/`."
2723
+ },
2724
+ "CacheInvalidationNoBundleErrorResponse": {
2725
+ "allOf": [
2726
+ {
2727
+ "$ref": "#/components/schemas/ErrorResponse"
2728
+ }
2729
+ ],
2730
+ "description": "Returned when no SSR bundle is deployed to the environment, so there is nothing to invalidate."
2731
+ },
2732
+ "PublishingStatus": {
2733
+ "type": "string",
2734
+ "description": "The publishing status of the resource on the environment.",
2735
+ "enum": [
2736
+ "pending",
2737
+ "completed",
2738
+ "failed"
2739
+ ],
2740
+ "example": "pending"
2741
+ },
2742
+ "EnvironmentVariableEntry": {
2743
+ "type": "object",
2744
+ "description": "A single environment variable's masked value and audit metadata.",
2745
+ "properties": {
2746
+ "value": {
2747
+ "type": "string",
2748
+ "description": "The masked variable value. Actual values are never returned in clear text.",
2749
+ "example": "****e5f6",
2750
+ "maxLength": 32768
2751
+ },
2752
+ "createdBy": {
2753
+ "type": "string",
2754
+ "description": "The email address of the user who created the variable. Null if no user is associated.",
2755
+ "example": "jane.doe@example.com",
2756
+ "maxLength": 255
2757
+ },
2758
+ "creationDate": {
2759
+ "type": "string",
2760
+ "format": "date-time",
2761
+ "description": "The timestamp when the variable was created.",
2762
+ "example": "2026-08-24T09:23:28.872916Z"
2763
+ },
2764
+ "lastModified": {
2765
+ "type": "string",
2766
+ "format": "date-time",
2767
+ "description": "The timestamp when the variable was last modified.",
2768
+ "example": "2026-08-24T10:15:02.111Z"
2769
+ },
2770
+ "lastModifiedBy": {
2771
+ "type": "string",
2772
+ "description": "The email address of the user who last modified the variable. Null if no user is associated.",
2773
+ "example": "john.doe@example.com",
2774
+ "maxLength": 255
2775
+ },
2776
+ "publishingStatus": {
2777
+ "$ref": "#/components/schemas/PublishingStatus"
2778
+ }
2779
+ }
2780
+ },
2781
+ "EnvironmentVariables": {
2782
+ "type": "object",
2783
+ "additionalProperties": {
2784
+ "$ref": "#/components/schemas/EnvironmentVariableEntry"
2785
+ },
2786
+ "description": "The complete set of environment variables for the environment, as a map keyed by variable name. Values are masked. This is a singleton resource (one set per environment) and is not a paginated collection.",
2787
+ "example": {
2788
+ "PAYMENT_GATEWAY_API_KEY": {
2789
+ "value": "****e5f6",
2790
+ "createdBy": "jane.doe@example.com",
2791
+ "creationDate": "2026-08-24T09:23:28.872916Z",
2792
+ "lastModified": "2026-08-24T09:23:28.872916Z",
2793
+ "lastModifiedBy": "jane.doe@example.com",
2794
+ "publishingStatus": "completed"
2795
+ }
2796
+ }
2797
+ },
2798
+ "EnvironmentVariableUpdateEntry": {
2799
+ "type": "object",
2800
+ "description": "The desired value for a single environment variable in a merge update. Set `value` to `null` to delete the variable.",
2801
+ "properties": {
2802
+ "value": {
2803
+ "description": "The new variable value. Accepts a string or a number (numbers are stored as strings). Set to `null` to delete the variable. The combined size of all variable values must not exceed 32 KB.",
2804
+ "oneOf": [
2805
+ {
2806
+ "type": "string",
2807
+ "example": "sk_live_a1b2c3d4e5f6",
2808
+ "maxLength": 32768
2809
+ },
2810
+ {
2811
+ "type": "number",
2812
+ "example": 50
2813
+ }
2814
+ ]
2815
+ }
2816
+ },
2817
+ "required": [
2818
+ "value"
2819
+ ]
2820
+ },
2821
+ "EnvironmentVariablesUpdateRequest": {
2822
+ "type": "object",
2823
+ "additionalProperties": {
2824
+ "$ref": "#/components/schemas/EnvironmentVariableUpdateEntry"
2825
+ },
2826
+ "description": "A merge (upsert) update of environment variables, keyed by variable name. Keys present in the payload are created or replaced; a key whose value is `null` is deleted; keys omitted from the payload are preserved.",
2827
+ "example": {
2828
+ "MAX_CART_ITEMS": {
2829
+ "value": 50
2830
+ },
2831
+ "PAYMENT_GATEWAY_API_KEY": {
2832
+ "value": "sk_live_a1b2c3d4e5f6"
2833
+ },
2834
+ "LEGACY_CHECKOUT_URL": {}
2835
+ }
2836
+ },
2837
+ "EnvironmentVariableNameInvalidErrorResponse": {
2838
+ "allOf": [
2839
+ {
2840
+ "$ref": "#/components/schemas/ErrorResponse"
2841
+ }
2842
+ ],
2843
+ "description": "Returned when an environment variable name is invalid or restricted — for example an `MRT_`-prefixed name, which is reserved.",
2844
+ "properties": {
2845
+ "name": {
2846
+ "type": "string",
2847
+ "description": "The environment variable name that was rejected.",
2848
+ "example": "MRT_INTERNAL_FLAG",
2849
+ "maxLength": 256
2850
+ }
2851
+ }
2852
+ },
2853
+ "EnvironmentVariableSizeExceededErrorResponse": {
2854
+ "allOf": [
2855
+ {
2856
+ "$ref": "#/components/schemas/ErrorResponse"
2857
+ }
2858
+ ],
2859
+ "description": "Returned when the combined size of all environment variable values exceeds 32 KB."
2860
+ },
2861
+ "AccessControlHeader": {
2862
+ "type": "object",
2863
+ "description": "A header-based access control rule on the environment.",
2864
+ "properties": {
2865
+ "id": {
2866
+ "type": "string",
2867
+ "format": "uuid",
2868
+ "description": "The unique identifier of the access control header, in UUID format.",
2869
+ "example": "ff832a9e-0e55-11ef-8f23-0242ac110002"
2870
+ },
2871
+ "value": {
2872
+ "type": "string",
2873
+ "description": "The masked header value. Actual values are never returned in clear text.",
2874
+ "example": "****************by0z",
2875
+ "maxLength": 127
2876
+ },
2877
+ "createdBy": {
2878
+ "type": "string",
2879
+ "description": "The email address of the user who created the header. Null if no user is associated.",
2880
+ "example": "jane.doe@example.com",
2881
+ "maxLength": 255
2882
+ },
2883
+ "creationDate": {
2884
+ "type": "string",
2885
+ "format": "date-time",
2886
+ "description": "The timestamp when the header was created.",
2887
+ "example": "2026-08-24T09:23:28.872916Z"
2888
+ },
2889
+ "publishingStatus": {
2890
+ "$ref": "#/components/schemas/PublishingStatus"
2891
+ }
2892
+ }
2893
+ },
2894
+ "AccessControlHeaderResult": {
2895
+ "allOf": [
2896
+ {
2897
+ "$ref": "#/components/schemas/PaginatedResultBase"
2898
+ }
2899
+ ],
2900
+ "description": "Paginated result containing a list of access control headers.",
2901
+ "properties": {
2902
+ "data": {
2903
+ "type": "array",
2904
+ "description": "List of access control headers.",
2905
+ "items": {
2906
+ "$ref": "#/components/schemas/AccessControlHeader"
2907
+ }
2908
+ }
2909
+ },
2910
+ "required": [
2911
+ "data"
2912
+ ]
2913
+ },
2914
+ "AccessControlHeaderCreateRequest": {
2915
+ "type": "object",
2916
+ "description": "Request body to create an access control header.",
2917
+ "properties": {
2918
+ "value": {
2919
+ "type": "string",
2920
+ "description": "The header value.",
2921
+ "example": "jfoWikeaby0z",
2922
+ "maxLength": 127,
2923
+ "minLength": 9
2924
+ }
2925
+ },
2926
+ "required": [
2927
+ "value"
2928
+ ]
2929
+ },
2930
+ "AccessControlHeaderLimitReachedErrorResponse": {
2931
+ "allOf": [
2932
+ {
2933
+ "$ref": "#/components/schemas/ErrorResponse"
2934
+ }
2935
+ ],
2936
+ "description": "Returned when the per-environment access control header limit has been reached."
2937
+ },
2938
+ "AccessControlHeaderValueInvalidErrorResponse": {
2939
+ "allOf": [
2940
+ {
2941
+ "$ref": "#/components/schemas/ErrorResponse"
2942
+ }
2943
+ ],
2944
+ "description": "Returned when the supplied access control header value is invalid."
2945
+ },
2946
+ "AccessControlHeaderNotFoundErrorResponse": {
2947
+ "allOf": [
2948
+ {
2949
+ "$ref": "#/components/schemas/ErrorResponse"
2950
+ }
2951
+ ],
2952
+ "description": "Returned when the requested access control header does not exist on the environment.",
2953
+ "properties": {
2954
+ "accessControlHeaderId": {
2955
+ "type": "string",
2956
+ "description": "The identifier of the access control header that couldn't be found.",
2957
+ "example": "ff832a9e-0e55-11ef-8f23-0242ac110002",
2958
+ "maxLength": 36,
2959
+ "minLength": 36,
2960
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2961
+ }
2962
+ }
2963
+ },
2964
+ "RedirectHttpStatusCode": {
2965
+ "type": "integer",
2966
+ "format": "int32",
2967
+ "default": 301,
2968
+ "description": "The HTTP status code returned for the redirect.",
2969
+ "enum": [
2970
+ 301,
2971
+ 302
2972
+ ],
2973
+ "example": 301
2974
+ },
2975
+ "Redirect": {
2976
+ "type": "object",
2977
+ "description": "A URL redirect rule on the environment.",
2978
+ "properties": {
2979
+ "redirectId": {
2980
+ "type": "string",
2981
+ "format": "uuid",
2982
+ "description": "The unique identifier of the redirect, in UUID format.",
2983
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
2984
+ },
2985
+ "source": {
2986
+ "type": "string",
2987
+ "description": "The source path that triggers the redirect.",
2988
+ "example": "/spring",
2989
+ "maxLength": 2000,
2990
+ "minLength": 1
2991
+ },
2992
+ "destination": {
2993
+ "type": "string",
2994
+ "description": "The destination path or URL the request is redirected to.",
2995
+ "example": "/summer-newbranding",
2996
+ "maxLength": 2000,
2997
+ "minLength": 1
2998
+ },
2999
+ "httpStatusCode": {
3000
+ "$ref": "#/components/schemas/RedirectHttpStatusCode"
3001
+ },
3002
+ "forwardQuerystring": {
3003
+ "type": "boolean",
3004
+ "description": "Whether the incoming query string is forwarded to the destination.",
3005
+ "example": false
3006
+ },
3007
+ "forwardWildcard": {
3008
+ "type": "boolean",
3009
+ "description": "Whether a trailing wildcard match on the source is forwarded to the destination.",
3010
+ "example": false
3011
+ },
3012
+ "publishingStatus": {
3013
+ "$ref": "#/components/schemas/PublishingStatus"
3014
+ },
3015
+ "createdBy": {
3016
+ "type": "string",
3017
+ "description": "The email address of the user who created the redirect. Null if no user is associated.",
3018
+ "example": "john.doe@example.com",
3019
+ "maxLength": 255
3020
+ },
3021
+ "lastModifiedBy": {
3022
+ "type": "string",
3023
+ "description": "The email address of the user who last modified the redirect. Null if no user is associated.",
3024
+ "example": "john.doe@example.com",
3025
+ "maxLength": 255
3026
+ },
3027
+ "creationDate": {
3028
+ "type": "string",
3029
+ "format": "date-time",
3030
+ "description": "The timestamp when the redirect was created.",
3031
+ "example": "2026-08-24T00:00:00Z"
3032
+ },
3033
+ "lastModified": {
3034
+ "type": "string",
3035
+ "format": "date-time",
3036
+ "description": "The timestamp when the redirect was last modified.",
3037
+ "example": "2026-08-24T00:00:00Z"
3038
+ }
3039
+ }
3040
+ },
3041
+ "RedirectResult": {
3042
+ "allOf": [
3043
+ {
3044
+ "$ref": "#/components/schemas/PaginatedResultBase"
3045
+ }
3046
+ ],
3047
+ "description": "Paginated result containing a list of redirects.",
3048
+ "properties": {
3049
+ "data": {
3050
+ "type": "array",
3051
+ "description": "List of redirects.",
3052
+ "items": {
3053
+ "$ref": "#/components/schemas/Redirect"
3054
+ }
3055
+ }
3056
+ },
3057
+ "required": [
3058
+ "data"
3059
+ ]
3060
+ },
3061
+ "RedirectCreateRequest": {
3062
+ "type": "object",
3063
+ "description": "Request body to create a single redirect.",
3064
+ "properties": {
3065
+ "source": {
3066
+ "type": "string",
3067
+ "description": "The source path that triggers the redirect.",
3068
+ "example": "/spring",
3069
+ "maxLength": 2000,
3070
+ "minLength": 1
3071
+ },
3072
+ "destination": {
3073
+ "type": "string",
3074
+ "description": "The destination path or URL the request is redirected to.",
3075
+ "example": "/summer-newbranding",
3076
+ "maxLength": 2000,
3077
+ "minLength": 1
3078
+ },
3079
+ "httpStatusCode": {
3080
+ "$ref": "#/components/schemas/RedirectHttpStatusCode"
3081
+ },
3082
+ "forwardQuerystring": {
3083
+ "type": "boolean",
3084
+ "default": false,
3085
+ "description": "Whether the incoming query string is forwarded to the destination.",
3086
+ "example": false
3087
+ },
3088
+ "forwardWildcard": {
3089
+ "type": "boolean",
3090
+ "default": false,
3091
+ "description": "Whether a trailing wildcard match on the source is forwarded to the destination.",
3092
+ "example": false
3093
+ }
3094
+ },
3095
+ "required": [
3096
+ "destination",
3097
+ "source"
3098
+ ]
3099
+ },
3100
+ "RedirectDuplicatePathErrorResponse": {
3101
+ "allOf": [
3102
+ {
3103
+ "$ref": "#/components/schemas/ErrorResponse"
3104
+ }
3105
+ ],
3106
+ "description": "Returned when the payload contains a `source` path that already has a redirect on the environment.",
3107
+ "properties": {
3108
+ "source": {
3109
+ "type": "string",
3110
+ "description": "The duplicate source path.",
3111
+ "example": "/spring",
3112
+ "maxLength": 2000
3113
+ }
3114
+ }
3115
+ },
3116
+ "RedirectLoopErrorResponse": {
3117
+ "allOf": [
3118
+ {
3119
+ "$ref": "#/components/schemas/ErrorResponse"
3120
+ }
3121
+ ],
3122
+ "description": "Returned when the redirect would create a loop (the destination resolves back to the source)."
3123
+ },
3124
+ "RedirectValidationErrorResponse": {
3125
+ "allOf": [
3126
+ {
3127
+ "$ref": "#/components/schemas/ErrorResponse"
3128
+ }
3129
+ ],
3130
+ "description": "Returned when a redirect field fails validation — for example a malformed `source` or `destination`.",
3131
+ "properties": {
3132
+ "reason": {
3133
+ "type": "string",
3134
+ "description": "A human-readable description of the validation failure.",
3135
+ "example": "destination must be a valid path or URL",
3136
+ "maxLength": 4000
3137
+ }
3138
+ }
3139
+ },
3140
+ "RedirectNotFoundErrorResponse": {
3141
+ "allOf": [
3142
+ {
3143
+ "$ref": "#/components/schemas/ErrorResponse"
3144
+ }
3145
+ ],
3146
+ "description": "Returned when the requested redirect does not exist on the environment.",
3147
+ "properties": {
3148
+ "redirectId": {
3149
+ "type": "string",
3150
+ "description": "The identifier of the redirect that couldn't be found.",
3151
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
3152
+ "maxLength": 36,
3153
+ "minLength": 36,
3154
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3155
+ }
3156
+ }
3157
+ },
3158
+ "RedirectUpdateRequest": {
3159
+ "type": "object",
3160
+ "description": "Request body to partially update a redirect. Only the supplied fields are changed.",
3161
+ "minProperties": 1,
3162
+ "properties": {
3163
+ "source": {
3164
+ "type": "string",
3165
+ "description": "The source path that triggers the redirect.",
3166
+ "example": "/spring",
3167
+ "maxLength": 2000,
3168
+ "minLength": 1
3169
+ },
3170
+ "destination": {
3171
+ "type": "string",
3172
+ "description": "The destination path or URL the request is redirected to.",
3173
+ "example": "/summer-2027",
3174
+ "maxLength": 2000,
3175
+ "minLength": 1
3176
+ },
3177
+ "httpStatusCode": {
3178
+ "$ref": "#/components/schemas/RedirectHttpStatusCode"
3179
+ },
3180
+ "forwardQuerystring": {
3181
+ "type": "boolean",
3182
+ "description": "Whether the incoming query string is forwarded to the destination.",
3183
+ "example": false
3184
+ },
3185
+ "forwardWildcard": {
3186
+ "type": "boolean",
3187
+ "description": "Whether a trailing wildcard match on the source is forwarded to the destination.",
3188
+ "example": false
3189
+ }
3190
+ }
3191
+ },
3192
+ "RedirectCloneRequest": {
3193
+ "type": "object",
3194
+ "description": "Request body to clone all redirects from a source environment into this environment.",
3195
+ "properties": {
3196
+ "sourceEnvironmentId": {
3197
+ "type": "string",
3198
+ "description": "The identifier of the environment to copy redirects from. Must differ from the environment in the request path.",
3199
+ "example": "staging",
3200
+ "maxLength": 19,
3201
+ "minLength": 1,
3202
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
3203
+ }
3204
+ },
3205
+ "required": [
3206
+ "sourceEnvironmentId"
3207
+ ]
3208
+ },
3209
+ "RedirectCloneSameEnvironmentErrorResponse": {
3210
+ "allOf": [
3211
+ {
3212
+ "$ref": "#/components/schemas/ErrorResponse"
3213
+ }
3214
+ ],
3215
+ "description": "Returned when a redirect clone request names a source environment that is the same as the destination environment in the request path."
3216
+ }
3217
+ },
3218
+ "responses": {
3219
+ "401unauthorized": {
3220
+ "description": "Your access token is invalid or expired and can’t be used to identify a user.",
3221
+ "content": {
3222
+ "application/problem+json": {
3223
+ "schema": {
3224
+ "$ref": "#/components/schemas/ErrorResponse"
3225
+ },
3226
+ "examples": {
3227
+ "UnauthorizedExample": {
3228
+ "$ref": "#/components/examples/UnauthorizedExample"
3229
+ }
3230
+ }
3231
+ }
3232
+ }
3233
+ },
3234
+ "403forbidden": {
3235
+ "description": "Forbidden. Your access token is valid, but you don’t have the required permissions to access the resource.",
3236
+ "content": {
3237
+ "application/problem+json": {
3238
+ "schema": {
3239
+ "$ref": "#/components/schemas/ErrorResponse"
3240
+ },
3241
+ "examples": {
3242
+ "ForbiddenExample": {
3243
+ "$ref": "#/components/examples/ForbiddenExample"
3244
+ }
3245
+ }
3246
+ }
3247
+ }
3248
+ },
3249
+ "404NotFound_Storefront": {
3250
+ "description": "We couldn't find the requested storefront.",
3251
+ "content": {
3252
+ "application/problem+json": {
3253
+ "schema": {
3254
+ "$ref": "#/components/schemas/StorefrontNotFoundErrorResponse"
3255
+ },
3256
+ "examples": {
3257
+ "StorefrontNotFoundErrorResponseExample": {
3258
+ "$ref": "#/components/examples/StorefrontNotFoundErrorResponseExample"
3259
+ }
3260
+ }
3261
+ }
3262
+ }
3263
+ },
3264
+ "400BadRequest_CreateEnvironment": {
3265
+ "description": "Bad Request. The environment creation request body is invalid.",
3266
+ "content": {
3267
+ "application/problem+json": {
3268
+ "schema": {
3269
+ "$ref": "#/components/schemas/InvalidEnvironmentCreateRequestErrorResponse"
3270
+ },
3271
+ "examples": {
3272
+ "InvalidEnvironmentCreateRequestErrorResponseExample": {
3273
+ "$ref": "#/components/examples/InvalidEnvironmentCreateRequestErrorResponseExample"
3274
+ }
3275
+ }
3276
+ }
3277
+ }
3278
+ },
3279
+ "400BadRequest_CloneEnvironment": {
3280
+ "description": "Bad Request. The environment clone request body is invalid.",
3281
+ "content": {
3282
+ "application/problem+json": {
3283
+ "schema": {
3284
+ "$ref": "#/components/schemas/InvalidEnvironmentCloneRequestErrorResponse"
3285
+ },
3286
+ "examples": {
3287
+ "InvalidEnvironmentCloneRequestErrorResponseExample": {
3288
+ "$ref": "#/components/examples/InvalidEnvironmentCloneRequestErrorResponseExample"
3289
+ }
3290
+ }
3291
+ }
3292
+ }
3293
+ },
3294
+ "404NotFound_CloneEnvironment": {
3295
+ "description": "We couldn't find the storefront or the source environment specified in the clone request.",
3296
+ "content": {
3297
+ "application/problem+json": {
3298
+ "schema": {
3299
+ "oneOf": [
3300
+ {
3301
+ "$ref": "#/components/schemas/StorefrontNotFoundErrorResponse"
3302
+ },
3303
+ {
3304
+ "$ref": "#/components/schemas/SourceEnvironmentNotFoundErrorResponse"
3305
+ }
3306
+ ]
3307
+ },
3308
+ "examples": {
3309
+ "StorefrontNotFoundErrorResponseExample": {
3310
+ "$ref": "#/components/examples/StorefrontNotFoundErrorResponseExample"
3311
+ },
3312
+ "SourceEnvironmentNotFoundErrorResponseExample": {
3313
+ "$ref": "#/components/examples/SourceEnvironmentNotFoundErrorResponseExample"
3314
+ }
3315
+ }
3316
+ }
3317
+ }
3318
+ },
3319
+ "404NotFound_Environment": {
3320
+ "description": "We couldn't find the requested environment.",
3321
+ "content": {
3322
+ "application/problem+json": {
3323
+ "schema": {
3324
+ "$ref": "#/components/schemas/EnvironmentNotFoundErrorResponse"
3325
+ },
3326
+ "examples": {
3327
+ "EnvironmentNotFoundErrorResponseExample": {
3328
+ "$ref": "#/components/examples/EnvironmentNotFoundErrorResponseExample"
3329
+ }
3330
+ }
3331
+ }
3332
+ }
3333
+ },
3334
+ "409Conflict_DeleteEnvironment": {
3335
+ "description": "We couldn't delete the environment because it is currently building or already being deleted.",
3336
+ "content": {
3337
+ "application/problem+json": {
3338
+ "schema": {
3339
+ "$ref": "#/components/schemas/EnvironmentBusyErrorResponse"
3340
+ },
3341
+ "examples": {
3342
+ "EnvironmentBusyErrorResponseExample": {
3343
+ "$ref": "#/components/examples/EnvironmentBusyErrorResponseExample"
3344
+ }
3345
+ }
3346
+ }
3347
+ }
3348
+ },
3349
+ "400BadRequest_UpdateEnvironment": {
3350
+ "description": "Bad Request. The environment update request body is invalid — for example a disabled ssrRegion, an ssrArchitecture that isn't enabled or is past end-of-life, an invalid certificateId, an SSR networking field that must be changed in Business Manager, or invalid ssrProxyConfigs (too many proxies, duplicate paths, or an invalid host).",
3351
+ "content": {
3352
+ "application/problem+json": {
3353
+ "schema": {
3354
+ "oneOf": [
3355
+ {
3356
+ "$ref": "#/components/schemas/InvalidEnvironmentUpdateRequestErrorResponse"
3357
+ },
3358
+ {
3359
+ "$ref": "#/components/schemas/EnvironmentSsrRegionDisabledErrorResponse"
3360
+ },
3361
+ {
3362
+ "$ref": "#/components/schemas/EnvironmentSsrArchitectureNotEnabledErrorResponse"
3363
+ },
3364
+ {
3365
+ "$ref": "#/components/schemas/EnvironmentSsrArchitectureX86EndOfLifeErrorResponse"
3366
+ },
3367
+ {
3368
+ "$ref": "#/components/schemas/EnvironmentCertificateInvalidErrorResponse"
3369
+ },
3370
+ {
3371
+ "$ref": "#/components/schemas/EnvironmentSsrFieldBusinessManagerErrorResponse"
3372
+ },
3373
+ {
3374
+ "$ref": "#/components/schemas/EnvironmentInvalidProxyConfigErrorResponse"
3375
+ }
3376
+ ]
3377
+ },
3378
+ "examples": {
3379
+ "InvalidEnvironmentUpdateRequestErrorResponseExample": {
3380
+ "$ref": "#/components/examples/InvalidEnvironmentUpdateRequestErrorResponseExample"
3381
+ },
3382
+ "EnvironmentSsrRegionDisabledErrorResponseExample": {
3383
+ "$ref": "#/components/examples/EnvironmentSsrRegionDisabledErrorResponseExample"
3384
+ },
3385
+ "EnvironmentSsrArchitectureNotEnabledErrorResponseExample": {
3386
+ "$ref": "#/components/examples/EnvironmentSsrArchitectureNotEnabledErrorResponseExample"
3387
+ },
3388
+ "EnvironmentSsrArchitectureX86EndOfLifeErrorResponseExample": {
3389
+ "$ref": "#/components/examples/EnvironmentSsrArchitectureX86EndOfLifeErrorResponseExample"
3390
+ },
3391
+ "EnvironmentCertificateInvalidErrorResponseExample": {
3392
+ "$ref": "#/components/examples/EnvironmentCertificateInvalidErrorResponseExample"
3393
+ },
3394
+ "EnvironmentSsrFieldBusinessManagerErrorResponseExample": {
3395
+ "$ref": "#/components/examples/EnvironmentSsrFieldBusinessManagerErrorResponseExample"
3396
+ },
3397
+ "EnvironmentInvalidProxyConfigErrorResponseExample": {
3398
+ "$ref": "#/components/examples/EnvironmentInvalidProxyConfigErrorResponseExample"
3399
+ }
3400
+ }
3401
+ }
3402
+ }
3403
+ },
3404
+ "403Forbidden_UpdateEnvironment": {
3405
+ "description": "Forbidden. The requested environment update is not permitted.",
3406
+ "content": {
3407
+ "application/problem+json": {
3408
+ "schema": {
3409
+ "$ref": "#/components/schemas/EnvironmentUpdateForbiddenErrorResponse"
3410
+ },
3411
+ "examples": {
3412
+ "EnvironmentUpdateForbiddenErrorResponseExample": {
3413
+ "$ref": "#/components/examples/EnvironmentUpdateForbiddenErrorResponseExample"
3414
+ }
3415
+ }
3416
+ }
3417
+ }
3418
+ },
3419
+ "409Conflict_SetPrimaryEnvironment": {
3420
+ "description": "We couldn't make the environment primary because of its current status.",
3421
+ "content": {
3422
+ "application/problem+json": {
3423
+ "schema": {
3424
+ "$ref": "#/components/schemas/PrimaryEnvironmentInvalidStatusErrorResponse"
3425
+ },
3426
+ "examples": {
3427
+ "PrimaryEnvironmentInvalidStatusErrorResponseExample": {
3428
+ "$ref": "#/components/examples/PrimaryEnvironmentInvalidStatusErrorResponseExample"
3429
+ }
3430
+ }
3431
+ }
3432
+ }
3433
+ },
3434
+ "400BadRequest_CacheInvalidation": {
3435
+ "description": "Bad Request. The `pattern` is missing or does not start with `/`, or no SSR bundle is deployed to the environment.",
3436
+ "content": {
3437
+ "application/problem+json": {
3438
+ "schema": {
3439
+ "oneOf": [
3440
+ {
3441
+ "$ref": "#/components/schemas/CacheInvalidationPatternInvalidErrorResponse"
3442
+ },
3443
+ {
3444
+ "$ref": "#/components/schemas/CacheInvalidationNoBundleErrorResponse"
3445
+ }
3446
+ ]
3447
+ },
3448
+ "examples": {
3449
+ "CacheInvalidationPatternInvalidErrorResponseExample": {
3450
+ "$ref": "#/components/examples/CacheInvalidationPatternInvalidErrorResponseExample"
3451
+ },
3452
+ "CacheInvalidationNoBundleErrorResponseExample": {
3453
+ "$ref": "#/components/examples/CacheInvalidationNoBundleErrorResponseExample"
3454
+ }
3455
+ }
3456
+ }
3457
+ }
3458
+ },
3459
+ "429TooManyRequests_CacheInvalidation": {
3460
+ "description": "Too Many Requests. The cache invalidation was throttled by the backend rate limits (`CacheInvalidationsPerHour` / `CacheInvalidationsPer5Minutes`). Retry later.",
3461
+ "content": {
3462
+ "application/problem+json": {
3463
+ "schema": {
3464
+ "$ref": "#/components/schemas/ErrorResponse"
3465
+ },
3466
+ "examples": {
3467
+ "CacheInvalidationThrottled": {
3468
+ "summary": "Cache invalidation throttled",
3469
+ "value": {
3470
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/too-many-requests",
3471
+ "title": "Too Many Requests",
3472
+ "detail": "The cache invalidation rate limit has been exceeded for this environment. Retry later."
3473
+ }
3474
+ }
3475
+ }
3476
+ }
3477
+ }
3478
+ },
3479
+ "400BadRequest_EnvironmentVariables": {
3480
+ "description": "Bad Request. A variable name is invalid or restricted, or the combined size of all variable values exceeds 32 KB.",
3481
+ "content": {
3482
+ "application/problem+json": {
3483
+ "schema": {
3484
+ "oneOf": [
3485
+ {
3486
+ "$ref": "#/components/schemas/EnvironmentVariableNameInvalidErrorResponse"
3487
+ },
3488
+ {
3489
+ "$ref": "#/components/schemas/EnvironmentVariableSizeExceededErrorResponse"
3490
+ }
3491
+ ]
3492
+ },
3493
+ "examples": {
3494
+ "EnvironmentVariableNameInvalidErrorResponseExample": {
3495
+ "$ref": "#/components/examples/EnvironmentVariableNameInvalidErrorResponseExample"
3496
+ },
3497
+ "EnvironmentVariableSizeExceededErrorResponseExample": {
3498
+ "$ref": "#/components/examples/EnvironmentVariableSizeExceededErrorResponseExample"
3499
+ }
3500
+ }
3501
+ }
3502
+ }
3503
+ },
3504
+ "400BadRequest_AccessControlHeader": {
3505
+ "description": "Bad Request. The per-environment header limit has been reached, or the value is invalid.",
3506
+ "content": {
3507
+ "application/problem+json": {
3508
+ "schema": {
3509
+ "oneOf": [
3510
+ {
3511
+ "$ref": "#/components/schemas/AccessControlHeaderLimitReachedErrorResponse"
3512
+ },
3513
+ {
3514
+ "$ref": "#/components/schemas/AccessControlHeaderValueInvalidErrorResponse"
3515
+ }
3516
+ ]
3517
+ },
3518
+ "examples": {
3519
+ "AccessControlHeaderLimitReachedErrorResponseExample": {
3520
+ "$ref": "#/components/examples/AccessControlHeaderLimitReachedErrorResponseExample"
3521
+ },
3522
+ "AccessControlHeaderValueInvalidErrorResponseExample": {
3523
+ "$ref": "#/components/examples/AccessControlHeaderValueInvalidErrorResponseExample"
3524
+ }
3525
+ }
3526
+ }
3527
+ }
3528
+ },
3529
+ "404NotFound_AccessControlHeader": {
3530
+ "description": "The requested access control header was not found on the environment.",
3531
+ "content": {
3532
+ "application/problem+json": {
3533
+ "schema": {
3534
+ "$ref": "#/components/schemas/AccessControlHeaderNotFoundErrorResponse"
3535
+ },
3536
+ "examples": {
3537
+ "AccessControlHeaderNotFoundErrorResponseExample": {
3538
+ "$ref": "#/components/examples/AccessControlHeaderNotFoundErrorResponseExample"
3539
+ }
3540
+ }
3541
+ }
3542
+ }
3543
+ },
3544
+ "400BadRequest_Redirect": {
3545
+ "description": "Bad Request. A duplicate `source`, a redirect loop, or a field validation failure.",
3546
+ "content": {
3547
+ "application/problem+json": {
3548
+ "schema": {
3549
+ "oneOf": [
3550
+ {
3551
+ "$ref": "#/components/schemas/RedirectDuplicatePathErrorResponse"
3552
+ },
3553
+ {
3554
+ "$ref": "#/components/schemas/RedirectLoopErrorResponse"
3555
+ },
3556
+ {
3557
+ "$ref": "#/components/schemas/RedirectValidationErrorResponse"
3558
+ }
3559
+ ]
3560
+ },
3561
+ "examples": {
3562
+ "RedirectDuplicatePathErrorResponseExample": {
3563
+ "$ref": "#/components/examples/RedirectDuplicatePathErrorResponseExample"
3564
+ },
3565
+ "RedirectLoopErrorResponseExample": {
3566
+ "$ref": "#/components/examples/RedirectLoopErrorResponseExample"
3567
+ },
3568
+ "RedirectValidationErrorResponseExample": {
3569
+ "$ref": "#/components/examples/RedirectValidationErrorResponseExample"
3570
+ }
3571
+ }
3572
+ }
3573
+ }
3574
+ },
3575
+ "404NotFound_Redirect": {
3576
+ "description": "The requested redirect was not found on the environment.",
3577
+ "content": {
3578
+ "application/problem+json": {
3579
+ "schema": {
3580
+ "$ref": "#/components/schemas/RedirectNotFoundErrorResponse"
3581
+ },
3582
+ "examples": {
3583
+ "RedirectNotFoundErrorResponseExample": {
3584
+ "$ref": "#/components/examples/RedirectNotFoundErrorResponseExample"
3585
+ }
3586
+ }
3587
+ }
3588
+ }
3589
+ },
3590
+ "400BadRequest_RedirectClone": {
3591
+ "description": "Bad Request. The source environment must differ from the destination environment.",
3592
+ "content": {
3593
+ "application/problem+json": {
3594
+ "schema": {
3595
+ "$ref": "#/components/schemas/RedirectCloneSameEnvironmentErrorResponse"
3596
+ },
3597
+ "examples": {
3598
+ "RedirectCloneSameEnvironmentErrorResponseExample": {
3599
+ "$ref": "#/components/examples/RedirectCloneSameEnvironmentErrorResponseExample"
3600
+ }
3601
+ }
3602
+ }
3603
+ }
3604
+ }
3605
+ },
3606
+ "parameters": {
3607
+ "organizationId": {
3608
+ "name": "organizationId",
3609
+ "in": "path",
3610
+ "description": "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).",
3611
+ "required": true,
3612
+ "style": "simple",
3613
+ "explode": false,
3614
+ "schema": {
3615
+ "$ref": "#/components/schemas/OrganizationId"
3616
+ },
3617
+ "example": "f_ecom_zzxy_prd"
3618
+ },
3619
+ "storefrontId": {
3620
+ "name": "storefrontId",
3621
+ "in": "path",
3622
+ "description": "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.",
3623
+ "required": true,
3624
+ "style": "simple",
3625
+ "explode": false,
3626
+ "schema": {
3627
+ "type": "string",
3628
+ "example": "my-storefront-a1b2c3",
3629
+ "maxLength": 20,
3630
+ "minLength": 1,
3631
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
3632
+ }
3633
+ },
3634
+ "environmentId": {
3635
+ "name": "environmentId",
3636
+ "in": "path",
3637
+ "description": "The environment identifier that B2C Commerce generates based on the provided display name. It consists of lowercase letters, numbers, and hyphens only, with no leading or trailing hyphens.",
3638
+ "required": true,
3639
+ "style": "simple",
3640
+ "explode": false,
3641
+ "schema": {
3642
+ "type": "string",
3643
+ "example": "production-a1b2c3d4",
3644
+ "maxLength": 19,
3645
+ "minLength": 1,
3646
+ "pattern": "^[a-z0-9]+(?:-+[a-z0-9]+)*$"
3647
+ }
3648
+ },
3649
+ "accessControlHeaderOrderBy": {
3650
+ "name": "orderBy",
3651
+ "in": "query",
3652
+ "description": "Attributes to order the returned access control headers by, in priority order, applied left to right. Append `:asc` or `:desc` to set the direction; when omitted, `:asc` is assumed. Sortable attributes: `creation_date`, `id`, `publishing_status`.",
3653
+ "required": false,
3654
+ "style": "form",
3655
+ "explode": false,
3656
+ "schema": {
3657
+ "type": "array",
3658
+ "example": [
3659
+ "creation_date:desc"
3660
+ ],
3661
+ "items": {
3662
+ "type": "string",
3663
+ "example": "creation_date:desc",
3664
+ "pattern": "^(creation_date|id|publishing_status)(:(asc|desc))?$"
3665
+ },
3666
+ "maxItems": 3
3667
+ }
3668
+ },
3669
+ "accessControlHeaderId": {
3670
+ "name": "accessControlHeaderId",
3671
+ "in": "path",
3672
+ "description": "The access control header identifier, in UUID format.",
3673
+ "required": true,
3674
+ "style": "simple",
3675
+ "explode": false,
3676
+ "schema": {
3677
+ "type": "string",
3678
+ "format": "uuid",
3679
+ "example": "ff832a9e-0e55-11ef-8f23-0242ac110002"
3680
+ }
3681
+ },
3682
+ "redirectOrderBy": {
3683
+ "name": "orderBy",
3684
+ "in": "query",
3685
+ "description": "Attributes to order the returned redirects by, in priority order, applied left to right. Append `:asc` or `:desc` to set the direction; when omitted, `:asc` is assumed. Sortable attributes: `creation_date`, `last_modified`, `source`, `destination`, `last_modified_by`, `http_status_code`, `publishing_status`.",
3686
+ "required": false,
3687
+ "style": "form",
3688
+ "explode": false,
3689
+ "schema": {
3690
+ "type": "array",
3691
+ "example": [
3692
+ "creation_date:desc"
3693
+ ],
3694
+ "items": {
3695
+ "type": "string",
3696
+ "example": "creation_date:desc",
3697
+ "pattern": "^(creation_date|last_modified|source|destination|last_modified_by|http_status_code|publishing_status)(:(asc|desc))?$"
3698
+ },
3699
+ "maxItems": 7
3700
+ }
3701
+ },
3702
+ "redirectId": {
3703
+ "name": "redirectId",
3704
+ "in": "path",
3705
+ "description": "The redirect identifier, in UUID format.",
3706
+ "required": true,
3707
+ "style": "simple",
3708
+ "explode": false,
3709
+ "schema": {
3710
+ "type": "string",
3711
+ "format": "uuid",
3712
+ "example": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"
3713
+ }
3714
+ }
3715
+ },
3716
+ "examples": {
3717
+ "EnvironmentListSuccess": {
3718
+ "summary": "Successful environment list result",
3719
+ "description": "Example of a successful response returning the list of environments for a storefront.",
3720
+ "value": {
3721
+ "limit": 25,
3722
+ "offset": 0,
3723
+ "total": 1,
3724
+ "data": [
3725
+ {
3726
+ "environmentId": "production-a1b2c3d4",
3727
+ "displayName": "Production",
3728
+ "status": "ready",
3729
+ "isPrimary": true,
3730
+ "subdomain": "production",
3731
+ "mrtOrigin": "https://production-my-storefront.exp-delivery.com",
3732
+ "defaultEcdnHostname": "marketstreetb82739d375a9270f.zzzz-001.my.cc.salesforce.com",
3733
+ "creationDate": "2026-04-08T21:47:28.188965Z",
3734
+ "lastModified": "2026-04-08T21:47:31.307595Z"
3735
+ }
3736
+ ]
3737
+ }
3738
+ },
3739
+ "UnauthorizedExample": {
3740
+ "value": {
3741
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/unauthorized",
3742
+ "title": "Unauthorized",
3743
+ "detail": "Unauthorized request"
3744
+ }
3745
+ },
3746
+ "ForbiddenExample": {
3747
+ "value": {
3748
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/forbidden",
3749
+ "title": "Forbidden",
3750
+ "detail": "Access to requested resource forbidden"
3751
+ }
3752
+ },
3753
+ "CreateEnvironment": {
3754
+ "summary": "Create an environment",
3755
+ "description": "Create a new environment for a storefront.",
3756
+ "value": {
3757
+ "displayName": "Production"
3758
+ }
3759
+ },
3760
+ "EnvironmentCreatedSuccess": {
3761
+ "summary": "Successful environment creation",
3762
+ "description": "Example of a successful response when a new environment is queued for creation (202 Accepted).",
3763
+ "value": {
3764
+ "environmentId": "production-a1b2c3d4",
3765
+ "displayName": "Production",
3766
+ "status": "building",
3767
+ "isPrimary": true,
3768
+ "creationDate": "2026-04-08T21:47:28.188965Z",
3769
+ "lastModified": "2026-04-08T21:47:28.188965Z"
3770
+ }
3771
+ },
3772
+ "CloneEnvironment": {
3773
+ "summary": "Clone an environment",
3774
+ "description": "Create a new environment by cloning an existing one.",
3775
+ "value": {
3776
+ "sourceEnvironmentId": "production-a1b2c3d4",
3777
+ "displayName": "Production (EU)",
3778
+ "cloneEnvironmentVariables": true,
3779
+ "cloneRedirects": true
3780
+ }
3781
+ },
3782
+ "EnvironmentCloneAcceptedSuccess": {
3783
+ "summary": "Successful environment clone",
3784
+ "description": "Example of a successful response when a new environment is queued for creation via clone (202 Accepted).",
3785
+ "value": {
3786
+ "environmentId": "prod-eu-f9e8d7c6",
3787
+ "displayName": "Production (EU)",
3788
+ "status": "building",
3789
+ "isPrimary": false,
3790
+ "creationDate": "2026-04-09T09:45:00.000000Z",
3791
+ "lastModified": "2026-04-09T09:45:00.000000Z"
3792
+ }
3793
+ },
3794
+ "EnvironmentSuccess": {
3795
+ "summary": "Successful environment retrieval",
3796
+ "description": "Example of a successful response returning a single environment.",
3797
+ "value": {
3798
+ "environmentId": "production-a1b2c3d4",
3799
+ "displayName": "Production",
3800
+ "status": "ready",
3801
+ "isPrimary": true,
3802
+ "subdomain": "production",
3803
+ "mrtOrigin": "https://production-my-storefront.exp-delivery.com",
3804
+ "defaultEcdnHostname": "marketstreetb82739d375a9270f.zzzz-001.my.cc.salesforce.com",
3805
+ "creationDate": "2026-04-08T21:47:28.188965Z",
3806
+ "lastModified": "2026-04-08T21:47:31.307595Z"
3807
+ }
3808
+ },
3809
+ "EnvironmentDeleteAcceptedSuccess": {
3810
+ "summary": "Successful environment deletion request",
3811
+ "description": "Example of a successful response when an environment is queued for deletion (202 Accepted).",
3812
+ "value": {
3813
+ "environmentId": "production-a1b2c3d4",
3814
+ "displayName": "Production",
3815
+ "status": "deleting",
3816
+ "isPrimary": true,
3817
+ "subdomain": "production",
3818
+ "mrtOrigin": "https://production-my-storefront.exp-delivery.com",
3819
+ "defaultEcdnHostname": "marketstreetb82739d375a9270f.zzzz-001.my.cc.salesforce.com",
3820
+ "creationDate": "2026-04-08T21:47:28.188965Z",
3821
+ "lastModified": "2026-04-09T09:30:00.000000Z"
3822
+ }
3823
+ },
3824
+ "UpdateEnvironment": {
3825
+ "summary": "Update an environment",
3826
+ "description": "Update an environment's display name and server-side rendering configuration.",
3827
+ "value": {
3828
+ "displayName": "Production (EU)",
3829
+ "ssrRegion": "eu_west_1",
3830
+ "ssrArchitecture": "arm64",
3831
+ "allowCookies": true,
3832
+ "preserveProxyUserAgent": false,
3833
+ "logLevel": "warn"
3834
+ }
3835
+ },
3836
+ "EnvironmentUpdatedSuccess": {
3837
+ "summary": "Successful environment update",
3838
+ "description": "Example of a successful response after updating an environment.",
3839
+ "value": {
3840
+ "environmentId": "production-a1b2c3d4",
3841
+ "displayName": "Production (EU)",
3842
+ "status": "ready",
3843
+ "isPrimary": true,
3844
+ "subdomain": "production",
3845
+ "mrtOrigin": "https://production-my-storefront.exp-delivery.com",
3846
+ "defaultEcdnHostname": "marketstreetb82739d375a9270f.zzzz-001.my.cc.salesforce.com",
3847
+ "creationDate": "2026-04-08T21:47:28.188965Z",
3848
+ "lastModified": "2026-04-09T09:00:00.000000Z",
3849
+ "ssrRegion": "eu_west_1",
3850
+ "ssrArchitecture": "arm64",
3851
+ "ssrExternalHostname": "www.customer.com",
3852
+ "ssrExternalDomain": "customer.com",
3853
+ "isProduction": true,
3854
+ "allowCookies": true,
3855
+ "preserveProxyUserAgent": false,
3856
+ "enableSourceMaps": false,
3857
+ "logLevel": "warn",
3858
+ "distributedTracing": false,
3859
+ "distributedTracingSamplingRate": 0.1,
3860
+ "certificateId": 42
3861
+ }
3862
+ },
3863
+ "EnvironmentSetPrimarySuccess": {
3864
+ "summary": "Successful primary environment update",
3865
+ "description": "Example of a successful response after setting an environment as the storefront's primary environment.",
3866
+ "value": {
3867
+ "environmentId": "staging-e5f6a7b8",
3868
+ "displayName": "Staging",
3869
+ "status": "ready",
3870
+ "isPrimary": true,
3871
+ "subdomain": "staging",
3872
+ "mrtOrigin": "https://staging-my-storefront.exp-delivery.com",
3873
+ "defaultEcdnHostname": "marketstreet4c9b1e7f2a6d3081.zzzz-002.my.cc.salesforce.com",
3874
+ "creationDate": "2026-04-09T08:00:00.000000Z",
3875
+ "lastModified": "2026-08-20T09:15:00.000000Z"
3876
+ }
3877
+ },
3878
+ "CacheInvalidation": {
3879
+ "summary": "Trigger a cache invalidation",
3880
+ "description": "Invalidate every cached path beginning with `/products/` on the CDN.",
3881
+ "value": {
3882
+ "pattern": "/products/*"
3883
+ }
3884
+ },
3885
+ "EnvironmentVariablesSuccess": {
3886
+ "summary": "Successful environment variables retrieval",
3887
+ "description": "Example of a successful response returning the full set of environment variables, keyed by name, with masked values.",
3888
+ "value": {
3889
+ "PAYMENT_GATEWAY_API_KEY": {
3890
+ "value": "****e5f6",
3891
+ "createdBy": "jane.doe@example.com",
3892
+ "creationDate": "2026-08-24T09:23:28.872916Z",
3893
+ "lastModified": "2026-08-24T10:15:02.111000Z",
3894
+ "lastModifiedBy": "john.doe@example.com",
3895
+ "publishingStatus": "completed"
3896
+ },
3897
+ "LOG_LEVEL": {
3898
+ "value": "****info",
3899
+ "createdBy": "jane.doe@example.com",
3900
+ "creationDate": "2026-08-20T08:00:00.000000Z",
3901
+ "lastModified": "2026-08-20T08:00:00.000000Z",
3902
+ "lastModifiedBy": "jane.doe@example.com",
3903
+ "publishingStatus": "pending"
3904
+ }
3905
+ }
3906
+ },
3907
+ "EnvironmentVariablesUpdate": {
3908
+ "summary": "Merge-update environment variables",
3909
+ "description": "Upsert two variables and delete a third. Keys present in the payload are created or replaced; a key whose value is `null` is deleted; omitted keys are preserved.",
3910
+ "value": {
3911
+ "MAX_CART_ITEMS": {
3912
+ "value": 50
3913
+ },
3914
+ "PAYMENT_GATEWAY_API_KEY": {
3915
+ "value": "sk_live_a1b2c3d4e5f6"
3916
+ },
3917
+ "LEGACY_CHECKOUT_URL": {}
3918
+ }
3919
+ },
3920
+ "AccessControlHeaderListSuccess": {
3921
+ "summary": "Successful access control header list result",
3922
+ "description": "Example of a successful response returning a paginated list of access control headers.",
3923
+ "value": {
3924
+ "limit": 25,
3925
+ "offset": 0,
3926
+ "total": 2,
3927
+ "data": [
3928
+ {
3929
+ "id": "ff832a9e-0e55-11ef-8f23-0242ac110002",
3930
+ "value": "****************by0z",
3931
+ "createdBy": "jane.doe@example.com",
3932
+ "creationDate": "2026-08-24T09:23:28.872916Z",
3933
+ "publishingStatus": "completed"
3934
+ },
3935
+ {
3936
+ "id": "a1b2c3d4-0e55-11ef-8f23-0242ac110099",
3937
+ "value": "****************k9zq",
3938
+ "createdBy": "john.doe@example.com",
3939
+ "creationDate": "2026-08-22T11:05:10.000000Z",
3940
+ "publishingStatus": "pending"
3941
+ }
3942
+ ]
3943
+ }
3944
+ },
3945
+ "CreateAccessControlHeader": {
3946
+ "summary": "Create an access control header",
3947
+ "description": "Create a header-based access control rule on the environment.",
3948
+ "value": {
3949
+ "value": "jfoWikeaby0z"
3950
+ }
3951
+ },
3952
+ "AccessControlHeaderCreatedSuccess": {
3953
+ "summary": "Successful access control header creation",
3954
+ "description": "Example of a successful response after creating an access control header.",
3955
+ "value": {
3956
+ "id": "ff832a9e-0e55-11ef-8f23-0242ac110002",
3957
+ "value": "****************by0z",
3958
+ "createdBy": "jane.doe@example.com",
3959
+ "creationDate": "2026-08-24T09:23:28.872916Z",
3960
+ "publishingStatus": "pending"
3961
+ }
3962
+ },
3963
+ "AccessControlHeaderSuccess": {
3964
+ "summary": "Successful access control header retrieval",
3965
+ "description": "Example of a successful response returning a single access control header.",
3966
+ "value": {
3967
+ "id": "ff832a9e-0e55-11ef-8f23-0242ac110002",
3968
+ "value": "****************by0z",
3969
+ "createdBy": "jane.doe@example.com",
3970
+ "creationDate": "2026-08-24T09:23:28.872916Z",
3971
+ "publishingStatus": "completed"
3972
+ }
3973
+ },
3974
+ "RedirectListSuccess": {
3975
+ "summary": "Successful redirect list result",
3976
+ "description": "Example of a successful response returning a paginated list of redirects.",
3977
+ "value": {
3978
+ "limit": 25,
3979
+ "offset": 0,
3980
+ "total": 2,
3981
+ "data": [
3982
+ {
3983
+ "redirectId": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
3984
+ "source": "/spring",
3985
+ "destination": "/summer-newbranding",
3986
+ "httpStatusCode": 301,
3987
+ "forwardQuerystring": false,
3988
+ "forwardWildcard": false,
3989
+ "publishingStatus": "completed",
3990
+ "createdBy": "john.doe@example.com",
3991
+ "lastModifiedBy": "john.doe@example.com",
3992
+ "creationDate": "2026-08-24T00:00:00.000Z",
3993
+ "lastModified": "2026-08-24T00:00:00.000Z"
3994
+ },
3995
+ {
3996
+ "redirectId": "7c1e2f3a-8b9c-4d5e-6f7a-1b2c3d4e5f6a",
3997
+ "source": "/old-page",
3998
+ "destination": "/new-page",
3999
+ "httpStatusCode": 302,
4000
+ "forwardQuerystring": true,
4001
+ "forwardWildcard": false,
4002
+ "publishingStatus": "pending",
4003
+ "createdBy": "jane.doe@example.com",
4004
+ "lastModifiedBy": "jane.doe@example.com",
4005
+ "creationDate": "2026-08-23T12:30:00.000Z",
4006
+ "lastModified": "2026-08-23T12:30:00.000Z"
4007
+ }
4008
+ ]
4009
+ }
4010
+ },
4011
+ "CreateRedirect": {
4012
+ "summary": "Create a single redirect",
4013
+ "description": "Create one redirect rule on the environment.",
4014
+ "value": {
4015
+ "source": "/spring",
4016
+ "destination": "/summer-newbranding",
4017
+ "httpStatusCode": 301,
4018
+ "forwardQuerystring": false,
4019
+ "forwardWildcard": false
4020
+ }
4021
+ },
4022
+ "RedirectCreatedSuccess": {
4023
+ "summary": "Successful redirect creation",
4024
+ "description": "Example of a successful response after creating a single redirect.",
4025
+ "value": {
4026
+ "redirectId": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
4027
+ "source": "/spring",
4028
+ "destination": "/summer-newbranding",
4029
+ "httpStatusCode": 301,
4030
+ "forwardQuerystring": false,
4031
+ "forwardWildcard": false,
4032
+ "publishingStatus": "pending",
4033
+ "createdBy": "john.doe@example.com",
4034
+ "lastModifiedBy": "john.doe@example.com",
4035
+ "creationDate": "2026-08-24T00:00:00.000Z",
4036
+ "lastModified": "2026-08-24T00:00:00.000Z"
4037
+ }
4038
+ },
4039
+ "RedirectSuccess": {
4040
+ "summary": "Successful redirect retrieval",
4041
+ "description": "Example of a successful response returning a single redirect.",
4042
+ "value": {
4043
+ "redirectId": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
4044
+ "source": "/spring",
4045
+ "destination": "/summer-newbranding",
4046
+ "httpStatusCode": 301,
4047
+ "forwardQuerystring": false,
4048
+ "forwardWildcard": false,
4049
+ "publishingStatus": "completed",
4050
+ "createdBy": "john.doe@example.com",
4051
+ "lastModifiedBy": "john.doe@example.com",
4052
+ "creationDate": "2026-08-24T00:00:00.000Z",
4053
+ "lastModified": "2026-08-24T00:00:00.000Z"
4054
+ }
4055
+ },
4056
+ "UpdateRedirect": {
4057
+ "summary": "Update a redirect",
4058
+ "description": "Partially update a redirect; only the supplied fields are changed.",
4059
+ "value": {
4060
+ "destination": "/summer-2027"
4061
+ }
4062
+ },
4063
+ "RedirectUpdatedSuccess": {
4064
+ "summary": "Successful redirect update",
4065
+ "description": "Example of a successful response after partially updating a redirect.",
4066
+ "value": {
4067
+ "redirectId": "3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
4068
+ "source": "/spring",
4069
+ "destination": "/summer-2027",
4070
+ "httpStatusCode": 301,
4071
+ "forwardQuerystring": false,
4072
+ "forwardWildcard": false,
4073
+ "publishingStatus": "pending",
4074
+ "createdBy": "john.doe@example.com",
4075
+ "lastModifiedBy": "jane.doe@example.com",
4076
+ "creationDate": "2026-08-24T00:00:00.000Z",
4077
+ "lastModified": "2026-08-25T08:12:44.000Z"
4078
+ }
4079
+ },
4080
+ "CloneRedirects": {
4081
+ "summary": "Clone redirects from a source environment",
4082
+ "description": "Copy all redirects from a source environment into this environment.",
4083
+ "value": {
4084
+ "sourceEnvironmentId": "staging"
4085
+ }
4086
+ },
4087
+ "StorefrontNotFoundErrorResponseExample": {
4088
+ "value": {
4089
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/storefront-not-found",
4090
+ "detail": "We couldn't find storefront my-storefront-a1b2c3.",
4091
+ "title": "Storefront Not Found"
4092
+ }
4093
+ },
4094
+ "InvalidEnvironmentCreateRequestErrorResponseExample": {
4095
+ "value": {
4096
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/invalid-environment-create-request",
4097
+ "detail": "The environment creation request body is invalid. A valid displayName is required.",
4098
+ "title": "Invalid Environment Create Request"
4099
+ }
4100
+ },
4101
+ "InvalidEnvironmentCloneRequestErrorResponseExample": {
4102
+ "value": {
4103
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/invalid-environment-clone-request",
4104
+ "detail": "The environment clone request body is invalid. A valid sourceEnvironmentId and displayName are required.",
4105
+ "title": "Invalid Environment Clone Request"
4106
+ }
4107
+ },
4108
+ "SourceEnvironmentNotFoundErrorResponseExample": {
4109
+ "value": {
4110
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/source-environment-not-found",
4111
+ "detail": "We couldn't find source environment production-a1b2c3d4 for storefront my-storefront-a1b2c3.",
4112
+ "title": "Source Environment Not Found"
4113
+ }
4114
+ },
4115
+ "EnvironmentNotFoundErrorResponseExample": {
4116
+ "value": {
4117
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-not-found",
4118
+ "detail": "We couldn't find environment production-a1b2c3d4 for storefront my-storefront-a1b2c3.",
4119
+ "title": "Environment Not Found"
4120
+ }
4121
+ },
4122
+ "EnvironmentBusyErrorResponseExample": {
4123
+ "value": {
4124
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-busy",
4125
+ "detail": "Environment 'production-a1b2c3d4' can't be deleted while it is 'building'.",
4126
+ "title": "Environment Busy"
4127
+ }
4128
+ },
4129
+ "InvalidEnvironmentUpdateRequestErrorResponseExample": {
4130
+ "value": {
4131
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/invalid-environment-update-request",
4132
+ "detail": "The environment update request body is invalid.",
4133
+ "title": "Invalid Environment Update Request"
4134
+ }
4135
+ },
4136
+ "EnvironmentSsrRegionDisabledErrorResponseExample": {
4137
+ "value": {
4138
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-ssr-region-disabled",
4139
+ "detail": "SSR region 'eu_south_1' is temporarily disabled. Choose a different region.",
4140
+ "title": "Environment Ssr Region Disabled"
4141
+ }
4142
+ },
4143
+ "EnvironmentSsrArchitectureNotEnabledErrorResponseExample": {
4144
+ "value": {
4145
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-ssr-architecture-not-enabled",
4146
+ "detail": "The Server-Side Rendering architecture configuration isn't enabled for this organization.",
4147
+ "title": "Environment Ssr Architecture Not Enabled"
4148
+ }
4149
+ },
4150
+ "EnvironmentSsrArchitectureX86EndOfLifeErrorResponseExample": {
4151
+ "value": {
4152
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-ssr-architecture-x86-end-of-life",
4153
+ "detail": "x86 is past end-of-life and can no longer be selected. Use arm64.",
4154
+ "title": "Environment Ssr Architecture X86 End Of Life"
4155
+ }
4156
+ },
4157
+ "EnvironmentCertificateInvalidErrorResponseExample": {
4158
+ "value": {
4159
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-certificate-invalid",
4160
+ "detail": "The supplied certificateId is invalid for this environment.",
4161
+ "title": "Environment Certificate Invalid"
4162
+ }
4163
+ },
4164
+ "EnvironmentSsrFieldBusinessManagerErrorResponseExample": {
4165
+ "value": {
4166
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-ssr-field-business-manager",
4167
+ "detail": "Updates to ssrExternalHostname when the environment uses eCDN must be done in Business Manager.",
4168
+ "title": "Environment Ssr Field Business Manager"
4169
+ }
4170
+ },
4171
+ "EnvironmentInvalidProxyConfigErrorResponseExample": {
4172
+ "value": {
4173
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-invalid-proxy-config",
4174
+ "detail": "The ssrProxyConfigs are invalid: The max number of proxies allowed is 8, but 9 given.",
4175
+ "title": "Environment Invalid Proxy Config"
4176
+ }
4177
+ },
4178
+ "EnvironmentUpdateForbiddenErrorResponseExample": {
4179
+ "value": {
4180
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-update-forbidden",
4181
+ "detail": "The requested environment update is not permitted.",
4182
+ "title": "Environment Update Forbidden"
4183
+ }
4184
+ },
4185
+ "PrimaryEnvironmentInvalidStatusErrorResponseExample": {
4186
+ "value": {
4187
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/primary-environment-invalid-status",
4188
+ "detail": "Environment 'production-a1b2c3d4' can't be made primary while it is 'building'.",
4189
+ "title": "Primary Environment Invalid Status"
4190
+ }
4191
+ },
4192
+ "CacheInvalidationPatternInvalidErrorResponseExample": {
4193
+ "value": {
4194
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/cache-invalidation-pattern-invalid",
4195
+ "detail": "The invalidation pattern is missing or does not start with '/'.",
4196
+ "title": "Cache Invalidation Pattern Invalid"
4197
+ }
4198
+ },
4199
+ "CacheInvalidationNoBundleErrorResponseExample": {
4200
+ "value": {
4201
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/cache-invalidation-no-bundle",
4202
+ "detail": "No SSR bundle is deployed to this environment, so there is nothing to invalidate.",
4203
+ "title": "Cache Invalidation No Bundle"
4204
+ }
4205
+ },
4206
+ "EnvironmentVariableNameInvalidErrorResponseExample": {
4207
+ "value": {
4208
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-variable-name-invalid",
4209
+ "detail": "The environment variable name MRT_INTERNAL_FLAG is invalid or restricted.",
4210
+ "title": "Environment Variable Name Invalid"
4211
+ }
4212
+ },
4213
+ "EnvironmentVariableSizeExceededErrorResponseExample": {
4214
+ "value": {
4215
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/environment-variable-size-exceeded",
4216
+ "detail": "The combined size of all environment variable values exceeds the 32 KB limit.",
4217
+ "title": "Environment Variable Size Exceeded"
4218
+ }
4219
+ },
4220
+ "AccessControlHeaderLimitReachedErrorResponseExample": {
4221
+ "value": {
4222
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/access-control-header-limit-reached",
4223
+ "detail": "The maximum number of access control headers for this environment has been reached.",
4224
+ "title": "Access Control Header Limit Reached"
4225
+ }
4226
+ },
4227
+ "AccessControlHeaderValueInvalidErrorResponseExample": {
4228
+ "value": {
4229
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/access-control-header-value-invalid",
4230
+ "detail": "The supplied access control header value is invalid.",
4231
+ "title": "Access Control Header Value Invalid"
4232
+ }
4233
+ },
4234
+ "AccessControlHeaderNotFoundErrorResponseExample": {
4235
+ "value": {
4236
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/access-control-header-not-found",
4237
+ "detail": "We couldn't find access control header ff832a9e-0e55-11ef-8f23-0242ac110002.",
4238
+ "title": "Access Control Header Not Found"
4239
+ }
4240
+ },
4241
+ "RedirectDuplicatePathErrorResponseExample": {
4242
+ "value": {
4243
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/redirect-duplicate-path",
4244
+ "detail": "A redirect already exists for the source path /spring.",
4245
+ "title": "Redirect Duplicate Path"
4246
+ }
4247
+ },
4248
+ "RedirectLoopErrorResponseExample": {
4249
+ "value": {
4250
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/redirect-loop",
4251
+ "detail": "The redirect would create a redirect loop.",
4252
+ "title": "Redirect Loop"
4253
+ }
4254
+ },
4255
+ "RedirectValidationErrorResponseExample": {
4256
+ "value": {
4257
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/redirect-validation",
4258
+ "detail": "The redirect request failed validation: destination must be a valid path or URL",
4259
+ "title": "Redirect Validation"
4260
+ }
4261
+ },
4262
+ "RedirectNotFoundErrorResponseExample": {
4263
+ "value": {
4264
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/redirect-not-found",
4265
+ "detail": "We couldn't find redirect 3f9b1c2d-4e5f-6a7b-8c9d-0e1f2a3b4c5d.",
4266
+ "title": "Redirect Not Found"
4267
+ }
4268
+ },
4269
+ "RedirectCloneSameEnvironmentErrorResponseExample": {
4270
+ "value": {
4271
+ "type": "https://api.commercecloud.salesforce.com/documentation/error/v1/errors/redirect-clone-same-environment",
4272
+ "detail": "The source environment must differ from the destination environment.",
4273
+ "title": "Redirect Clone Same Environment"
4274
+ }
4275
+ }
4276
+ },
4277
+ "securitySchemes": {
4278
+ "AmOAuth2": {
4279
+ "type": "oauth2",
4280
+ "description": "AccountManager OAuth 2.0 bearer token Authentication.",
4281
+ "flows": {
4282
+ "clientCredentials": {
4283
+ "tokenUrl": "https://account.demandware.com/dwsso/oauth2/access_token",
4284
+ "scopes": {
4285
+ "sfcc.storefront.environments": "Read-only access to the Environments API.",
4286
+ "sfcc.storefront.environments.rw": "Read and write access to the Environments API."
4287
+ }
4288
+ }
4289
+ }
4290
+ }
4291
+ }
4292
+ }
4293
+ }