From 8aafa44075e006332bc19e8fc6265ebb2dfa4b07 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 17 Jul 2025 16:33:18 -0500 Subject: [PATCH 01/48] add server var for tenant ID --- src/openapi/data-ingestion-schema-v1.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/openapi/data-ingestion-schema-v1.yaml b/src/openapi/data-ingestion-schema-v1.yaml index dfb21ee0..59ef6c0f 100644 --- a/src/openapi/data-ingestion-schema-v1.yaml +++ b/src/openapi/data-ingestion-schema-v1.yaml @@ -15,8 +15,12 @@ info: - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 servers: - - url: https://na1-sandbox.api.commerce.adobe.com/ - description: Production endpoint. The TENANT_ID value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. + - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} + description: Production endpoint. The tenantId value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. + variables: + tenantId: + description: The identifier of the Adobe Commerce instance + default: your-tenant-id tags: - name: Metadata From fe2993e0d84a1aca7cc07acfd3f2071ee4b72e8a Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 17 Jul 2025 16:41:01 -0500 Subject: [PATCH 02/48] optimize security schemes --- src/openapi/data-ingestion-schema-v1.yaml | 84 ++++++----------------- 1 file changed, 20 insertions(+), 64 deletions(-) diff --git a/src/openapi/data-ingestion-schema-v1.yaml b/src/openapi/data-ingestion-schema-v1.yaml index 59ef6c0f..fa0764cc 100644 --- a/src/openapi/data-ingestion-schema-v1.yaml +++ b/src/openapi/data-ingestion-schema-v1.yaml @@ -14,6 +14,10 @@ info: - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 +security: + - apiKeyAuth: [] + - bearerAuth: [] + - imsOrgAuth: [] servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} description: Production endpoint. The tenantId value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. @@ -94,12 +98,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -249,12 +247,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -337,12 +329,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token. - name: Content-Encoding in: header required: false @@ -503,7 +489,6 @@ paths: operationId: createProducts parameters: - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ContentEncoding" responses: "200": @@ -906,7 +891,6 @@ paths: operationId: updateProducts parameters: - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ContentEncoding" responses: "200": @@ -1069,7 +1053,6 @@ paths: operationId: deleteProducts parameters: - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ContentEncoding" responses: "200": @@ -1118,12 +1101,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -1206,12 +1183,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token. - name: Content-Encoding in: header required: false @@ -1288,12 +1259,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token. - name: Content-Encoding in: header required: false @@ -1367,12 +1332,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -1458,12 +1417,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -1544,12 +1497,6 @@ paths: schema: type: string enum: [application/json] - - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token - name: Content-Encoding in: header required: false @@ -1605,6 +1552,21 @@ paths: $ref: "#/components/schemas/429Response" components: + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: x-api-key + description: API key for authentication + bearerAuth: + type: http + scheme: bearer + description: Bearer token for authorization + imsOrgAuth: + type: apiKey + in: header + name: x-gw-ims-org-id + description: Adobe IMS organization ID responses: AcceptedResponse: description: All items accepted and will be processed asynchronously @@ -1638,13 +1600,7 @@ components: schema: type: string enum: [application/json] - Authorization: - name: Authorization - in: header - required: true - schema: - type: string - description: Authorization Bearer token + ContentEncoding: name: Content-Encoding in: header From dc22fe35d5b9fc71e3a78f49cd5214d0403367d3 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Fri, 18 Jul 2025 16:08:50 -0500 Subject: [PATCH 03/48] get credential for openapi specs --- src/pages/credential/GetCredentialOAuthS2s.js | 171 ++ src/pages/credential/images/commerce.svg | 1 + src/pages/reference/rest/index.md | 6 +- static/rest/data-ingestion-schema-v1.yaml | 2482 +++++++++++++++++ 4 files changed, 2659 insertions(+), 1 deletion(-) create mode 100644 src/pages/credential/GetCredentialOAuthS2s.js create mode 100644 src/pages/credential/images/commerce.svg create mode 100644 static/rest/data-ingestion-schema-v1.yaml diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js new file mode 100644 index 00000000..22df35ac --- /dev/null +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -0,0 +1,171 @@ +import React from 'react' +import { GetCredential } from '@adobe/gatsby-theme-aio/src/components/GetCredential'; +import commerce from "./images/commerce.svg"; + +const GetCredentialOAuthS2s = () => { + + return ( + + + + + + + + + + + + + + + + +
+
+

+ OAuth server-to-server credential +

+

+ This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type. +

+
+ +
+
+ +
+ + + + + + +
+
+

+ OAuth server-to-server credential +

+

+ This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type. +

+
+ +
+
+ + + + + + + + + + + + Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> + + + Credential details

You can use the following credential details to try out the Adobe Commerce as a Cloud Service REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Commerce APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> + + + +
+ +
+ + + + + +
+

Welcome back

+

You can either re-use an existing credential or create a new credential.

+
+
+ +
+ + Credential details

You can use the following credential details to try out the Adobe Commerce as a Cloud Service REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Platform APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> + + + +
+ + + + + + Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> + + + + + + + +
+ + + + + + + + + + + + + + +
+
+

+ OAuth server-to-server credential +

+

+ This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type. +

+
+ +
+
+
+
+ + ) +} + +export default GetCredentialOAuthS2s; diff --git a/src/pages/credential/images/commerce.svg b/src/pages/credential/images/commerce.svg new file mode 100644 index 00000000..4b22c80c --- /dev/null +++ b/src/pages/credential/images/commerce.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pages/reference/rest/index.md b/src/pages/reference/rest/index.md index fe9eb64e..40bdad9b 100644 --- a/src/pages/reference/rest/index.md +++ b/src/pages/reference/rest/index.md @@ -9,6 +9,10 @@ keywords: layout: none --- +import GetCredentialOAuthS2s from '/src/pages/credential/GetCredentialOAuthS2s.js' + + + # API Reference - + diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml new file mode 100644 index 00000000..fa0764cc --- /dev/null +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -0,0 +1,2482 @@ +openapi: 3.0.3 +externalDocs: + url: https://github.com/adobe-commerce/aco-ts-sdk/blob/main/README.md + description: Learn about the Adobe Commerce Optimizer TypeScript and JavaScript SDK for Merchandising Services +info: + title: Catalog Data Ingestion API + description: | + The Catalog Data Ingestion API allows you to create and manage products and price books and directly integrate catalog data with the Commerce catalog service. + + This API provides the following resource collections to create and update catalog data: + + - [Metadata](#tag/Metadata)—define and manage product attribute metadata including display settings, search characteristics, filtering options, and sorting rules. + - [Products](#tag/Products)—define and manage catalog items with their attributes (name, description, SKU, images, and variants). + - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. + - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. + version: 1.0.0 +security: + - apiKeyAuth: [] + - bearerAuth: [] + - imsOrgAuth: [] +servers: + - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} + description: Production endpoint. The tenantId value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. + variables: + tenantId: + description: The identifier of the Adobe Commerce instance + default: your-tenant-id + +tags: + - name: Metadata + description: | + Manage product attribute definitions including display settings, search behavior, and filtering capabilities. + These settings control how product attributes appear and function throughout the storefront. + + Product attribute metadata specifies how product attributes are displayed on the storefront. + For example, you can define a product attribute as searchable, filterable, and sortable. + You can also define the search type for a product attribute, such as autocomplete or exact match. + - name: Products + description: Create and manage product data including simple products, configurable products, and their variants. Control product visibility, attributes, images, and pricing + - name: Price Books + description: | + Define pricing scopes to manage product prices across different customer tiers and markets. Price books support a hierarchical model, allowing up to three levels of nested child price books under each base price book. Each price book can reference a parent price book, forming a tree structure for pricing scopes. + + The base price book defines the currency for itself and all its child price books. Child price books inherit this currency and cannot override it. + + Note: You cannot assign a parent price book to a base price book. Due to the asynchronous nature of the API, this validation is not enforced at runtime. API requests that attempt to set a parent price book for a base price book are ignored. + + - name: Prices + description: | + Manage product SKU prices across different price books and customer tiers. Define regular prices and + special discounts for specific customer segments or markets by specifying a price book id. + + Before creating prices with the Prices API, first create [Price books](#tag/Price-Books). Prices that reference a non-existing price book are ignored. + + Price lookup logic + + The product price lookup follows a hierarchical path through price books. The search starts at the specified price book and traverses upward through parent price books until it reaches the root level. A product is not assigned a price if: + - No price is found in the entire hierarchy + - The price book specified in a price record has not been created + + Note: You cannot define prices for configurable products. Prices for configurable products + are calculated based on the price of the selected product variant. + +paths: + /v1/catalog/products/metadata: + post: + tags: + - Metadata + summary: Create product attribute metadata + description: | + To ensure product data is indexed for discovery, create or replace existing product attribute metadata resources before creating products. + + For each Commerce project, you must define metadata for the following attributes for each catalog source (`locale`): + - `sku` + - `name` + - `description` + - `shortDescription` + - `price` + + Also, you can define metadata for custom attributes. + + When creating product attribute metadata: + - Each product attribute requires a unique `code` and `source`. + - Use the `dataType` field to define the data type for the product attribute. + - Use the `visibleIn` field to define where the product attribute is displayed on the storefront. + - Use the `filterable`, `sortable`, and `searchable` fields to define how the product attribute + is used for filtering, sorting, and searching. + - Use the `searchWeight` field to define the search weight for the product attribute. + - Use the `searchTypes` field to define the search type for the product attribute. + + To update existing product attribute metadata, use the update operation. + + operationId: createProductMetadata + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedMetadata" + examples: + FeedWithMetadataInformation: + summary: Create product attributes metadata + description: | + Creates searchable text attributes. This example defines metadata for the required attributes + with recommended default values. + value: + [ + { + "code": "sku", + "source": { "locale": "en" }, + "label": "Product Name", + "dataType": "TEXT", + "visibleIn": + [ + "PRODUCT_DETAIL", + "PRODUCT_LISTING", + "SEARCH_RESULTS", + "PRODUCT_COMPARE" + ], + "filterable": true, + "sortable": false, + "searchable": true, + "searchWeight": 1, + "searchTypes": ["AUTOCOMPLETE"] + }, + { + "code": "name", + "source": { "locale": "en" }, + "label": "Product Name", + "dataType": "TEXT", + "visibleIn": + [ + "PRODUCT_DETAIL", + "PRODUCT_LISTING", + "SEARCH_RESULTS", + "PRODUCT_COMPARE" + ], + "filterable": false, + "sortable": true, + "searchable": true, + "searchWeight": 1, + "searchTypes": ["AUTOCOMPLETE"] + }, + { + "code": "description", + "source": { "locale": "en" }, + "label": "Product Description", + "dataType": "TEXT", + "visibleIn": ["PRODUCT_DETAIL"], + "filterable": false, + "sortable": false, + "searchable": false, + "searchWeight": 1, + "searchTypes": ["AUTOCOMPLETE"] + }, + { + "code": "shortDescription", + "source": { "locale": "en" }, + "label": "Product Short Description", + "dataType": "TEXT", + "visibleIn": ["PRODUCT_DETAIL"], + "filterable": false, + "sortable": false, + "searchable": true, + "searchWeight": 1, + "searchTypes": ["AUTOCOMPLETE"] + }, + { + "code": "price", + "source": { "locale": "en" }, + "label": "Price", + "dataType": "DECIMAL", + "visibleIn": + [ + "PRODUCT_DETAIL", + "PRODUCT_LISTING", + "SEARCH_RESULTS", + "PRODUCT_COMPARE" + ], + "filterable": true, + "sortable": true, + "searchable": false, + "searchWeight": 1, + "searchTypes": [] + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "message" and "errors" fields for details. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + patch: + tags: + - Metadata + summary: Update product attribute metadata + description: | + Update existing product attribute metadata with new values. + When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. + operationId: updateProductMetadata + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedMetadataUpdate" + examples: + FeedWithMetadataInformation: + summary: Example of product attribute metadata + description: | + Update existing product attribute metadata with new values. + Note that fields with the `array` type will replace existing data. + The example below updates the following attributes: + * `label` - Change the product attribute label. + * `visibleIn` - Add `PRODUCT_LISTING` role to the product attribute. + value: + [ + { + "code": "name", + "source": { "locale": "en" }, + "label": "Updated - Product Name", + "visibleIn": [ + "PRODUCT_DETAIL", + "PRODUCT_LISTING" + ] + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + /v1/catalog/products/metadata/delete: + post: + tags: + - Metadata + summary: Delete product attributes metadata + description: Remove product attribute metadata resources from the catalog data. + operationId: deleteProductMetadata + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedMetadataDelete" + examples: + FeedWithMetadataInformation: + summary: Delete product attribute metadata + description: Marks existing product attribute metadata as deleted. + value: [ + { + "code": "name", + "source": { "locale": "en" } + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Some received items are invalid. Check the ‘invalidFeedItems’ node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + + /v1/catalog/products: + post: + tags: + - Products + summary: Create or replace products + description: | + You can create different types of products, such as simple products and configurable products. + + When creating products: + - Each product requires a unique SKU identifier. + - Products must have a defined catalog source, for example `locale`. + - Add values for the required `name`, `slug`, and `status` fields. + - Define optional fields such as descriptions, images, and custom attributes as needed. + - Use the `links` field to define relationships between products, such as linking a product variant to its parent + configurable product. + - You can create multiple products in a single request, and also create product variants for configurable products in the same request. + +

Simple Products

+ Create products or replace existing products with specified `sku` and `source` values. + + Use the [update operation](#operation/updateProducts) to modify values for an existing product. + +

Configurable Products

+ A configurable product is a parent product that allows customers to select from multiple predefined attributes such as color, size, and material. + Each unique combination of these attribute values (for example, `color=green`, `size=large`) represents a product variant. + + Each variant is treated as a distinct child product with its own SKU, price, and inventory. These variants are stored as separate entities in the database and linked to the parent configurable product. + + The configurable product itself acts as a container or abstraction layer, enabling a unified frontend experience while maintaining + granular control over each variant on the backend. + + To create a configurable product, you need the following: + + * Product attributesCreate product attributes (for example, "color", "size") + that will be used to differentiate product variants. These attributes must be registered in the system before they can be referenced in + product definitions. + + * Configurable product—Define the parent product and include a + [configurations](#operation/createProducts!path=configurations&t=request) array that specifies the selectable options + and maps each option to a set of possible values. Each value must include a + [variantReferenceId](#operation/createProducts!path=configurations/values/variantReferenceId&t=request), + which links to a specific variant. + + * Product variants—Define a product variant for each valid combination of attribute values. Each variant must: + * Include relevant attribute values in an [attributes](#operation/createProducts!path=attributes&t=request) array. + * Reference the parent configurable product using variantReferenceId. + * Include a [links](#operation/createProducts!path=links&t=request) array with a link of type `VARIANT_OF` pointing to the configurable product. + + For example: + +
+          {
+            "sku": "pants-red-32",
+            "attributes": [
+              {
+                "code": "color",
+                "values": ["Red"],
+                "variantReferenceId": "pants-color-red"
+              }
+            ],
+            "links": [
+              {
+                "type": "VARIANT_OF",
+                "sku": "pants"
+              }
+            ]
+          }
+        
+ + Each product variant links back to the configurable product through its `variantReferenceId`, which corresponds to specific `configurations[].values[].variantReferenceId` in the configurable product. + + To unassign a product variant from a configurable product, do one of the following: + - Use [Delete Product API](#operation/deleteProducts) to delete the product variant. + - Use [Update Product API](#operation/updateProducts) to set the ["variantReferenceId"](#operation/createProducts!path=attributes/variantReferenceId&t=request) to `null` and unassign the product variant from the configurable product by removing the ["links"](#operation/createProducts!path=links&t=request) association. + +

Bundle Products

+ + A bundle product combines several simple products into one sellable unit. Items within the bundle can be categorized into logical groups like `tops`, `bottoms`, and `accessories`. + Each group can have multiple items, and shoppers can select items from each group to create a customized bundle. + + To create a bundle product, you need the following: + + * Bundle product—[Define the parent product](#operation/createProducts) and include a [bundles](#operation/createProducts!path=bundles) array that + specifies the groups and items included in the bundle. Each group must define: + * `group` - Name of the group (for example, "tops", "bottoms") + * `required` - Whether a selection from this group is mandatory + * `multiSelect` - Whether multiple items can be selected + * `items` - List of products that can be selected from this group + + * Simple products—Define each simple product to include in the bundle. Each product must: + * Include a [links](#operation/createProducts!path=links) array with a link of type `IN_BUNDLE` pointing to the bundle product + * Be created separately using the [create product API](#operation/createProducts) + + Note: A simple product can be included only once in each bundle. + If the same item is specified in multiple groups, the API returns a `Duplicate SKU found in bundle items` error. + + To update a bundle product, do one of the following: + * Use the [Update products API](#operation/updateProducts) to modify the groups and items in the bundle + * Use the [Delete products API](#operation/deleteProducts) to remove items from the bundle + operationId: createProducts + parameters: + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" + responses: + "200": + $ref: "#/components/responses/AcceptedResponse" + "400": + $ref: "#/components/responses/InvalidItemsResponse" + "401": + $ref: "#/components/responses/UnauthorizedResponse" + "403": + $ref: "#/components/responses/ForbiddenResponse" + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedProduct" + examples: + SimpleProductWithImages: + summary: Create a simple product + description: > + Create a simple product with required and optional fields. + value: + [ + { + "sku": "red-pants", + "source": { "locale": "en" }, + "name": "red pants", + "slug": "red-pants.html", + "status": "ENABLED", + "description": "long description about red pants", + "shortDescription": "just pants", + "visibleIn": + [ + "CATALOG", + "SEARCH" + ], + "metaTags": + { + "title": "Yoga pants ", + "description": "Climb with Zeppelin Yoga Pant", + "keywords": ["pants", "yoga"] + }, + "attributes": + [ + { + "code": "cost", + "values": ["10.5"] + }, + { + "code": "states", + "values": ["TX", "CA"] + } + ], + "images": + [ + { + "url": "https://example.com/images/pants.jpg", + "label": "photo of my pants!", + "roles": ["BASE", "SMALL"], + "customRoles": ["widget"] + } + ], + "routes": + [ + { "path": "red-pants" }, + { "path": "pants/red-pants", "position": 1 } + ] + } + ] + ConfigurableProductWithVariants: + summary: Create a configurable product with four product variants + description: > + Create a configurable product `pants` with four product variants: `pants-red-32`, `pants-red-44`, `pants-green-32` and `pants-green-44`. + value: + [ + { + "sku": "pants", + "source": { "locale": "en" }, + "name": "Yoga pants", + "slug": "zeppelin-yoga-pant", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "configurations": + [ + { + "attributeCode": "color", + "label": "Pants color", + "defaultVariantReferenceId": "pants-color-red", + "type": "SWATCH", + "values": + [ + { + "variantReferenceId": "pants-color-red", + "label": "Red", + "colorHex": "#ff0000" + }, + { + "variantReferenceId": "pants-color-green", + "label": "Green", + "imageUrl": "https://www.example.com/media/catalog/product/green_main_1.jpg" + } + ] + }, + { + "attributeCode": "size", + "label": "Pants size", + "defaultVariantReferenceId": "pants-size-32", + "type": "CONFIGURABLE", + "values": + [ + { + "variantReferenceId": "pants-size-32", + "label": "32" + }, + { + "variantReferenceId": "pants-size-44", + "label": "44" + } + ] + } + ] + }, + { + "sku": "pants-red-32", + "source": { "locale": "en" }, + "name": "Zeppelin Yoga Pant Red 32 size", + "slug": "pants-red-32", + "status": "ENABLED", + "attributes": + [ + { + "code": "color", + "values": ["Red Pants"], + "variantReferenceId": "pants-color-red" + }, + { + "code": "size", + "values": ["32"], + "variantReferenceId": "pants-size-32" + } + ], + "links": + [ + { + "type": "variant_of", + "sku": "pants" + } + ] + }, + { + "sku": "pants-red-44", + "source": { "locale": "en" }, + "name": "Zeppelin Yoga Pant Red 44 size", + "slug": "pants-red-44", + "status": "ENABLED", + "attributes": + [ + { + "code": "color", + "values": ["Red Pants"], + "variantReferenceId": "pants-color-red" + }, + { + "code": "size", + "values": ["44"], + "variantReferenceId": "pants-size-44" + } + ], + "links": + [ + { + "type": "VARIANT_OF", + "sku": "pants" + } + ] + }, + { + "sku": "pants-green-32", + "source": { "locale": "en" }, + "name": "Zeppelin Yoga Pant Green 32 size", + "slug": "pants-green-32", + "status": "ENABLED", + "attributes": + [ + { + "code": "color", + "values": ["Green Pants"], + "variantReferenceId": "pants-color-green" + }, + { + "code": "size", + "values": ["32"], + "variantReferenceId": "pants-size-32" + } + ], + "links": + [ + { + "type": "VARIANT_OF", + "sku": "pants" + } + ] + }, + { + "sku": "pants-green-44", + "source": { "locale": "en" }, + "name": "Zeppelin Yoga Pant green 44 size", + "slug": "pants-green-44", + "status": "ENABLED", + "attributes": + [ + { + "code": "color", + "values": ["Green Pants"], + "variantReferenceId": "pants-color-green" + }, + { + "code": "size", + "values": ["44"], + "variantReferenceId": "pants-size-44" + } + ], + "links": + [ + { + "type": "VARIANT_OF", + "sku": "pants" + } + ] + } + ] + BundleProductWithItems: + summary: Create a bundle product with multiple items + description: > + Create a bundle product `bundle-outfit` with multiple items grouped into categories like `tops`, `bottoms`, and `accessories`. + An item can be included only once in each bundle product. + value: + [ + { + "sku": "bundle-outfit", + "source": { "locale": "en" }, + "name": "Bundle Outfit", + "slug": "bundle-outfit", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "bundles": + [ + { + "group": "tops", + "required": true, + "multiSelect": false, + "defaultItemSkus": ["top-red"], + "items": + [ + { + "sku": "top-red", + "qty": 1, + "userDefinedQty": false + }, + { + "sku": "top-blue", + "qty": 1, + "userDefinedQty": false + } + ] + }, + { + "group": "bottoms", + "required": true, + "multiSelect": false, + "defaultItemSkus": ["bottom-black"], + "items": + [ + { + "sku": "bottom-black", + "qty": 1, + "userDefinedQty": false + }, + { + "sku": "bottom-white", + "qty": 1, + "userDefinedQty": false + } + ] + }, + { + "group": "accessories", + "required": false, + "multiSelect": true, + "items": + [ + { + "sku": "socks", + "qty": 1, + "userDefinedQty": true + }, + { + "sku": "headband", + "qty": 1, + "userDefinedQty": true + } + ] + } + ] + }, + { + "sku": "top-red", + "source": { "locale": "en" }, + "name": "Red Top", + "slug": "top-red", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + }, + { + "sku": "top-blue", + "source": { "locale": "en" }, + "name": "Blue Top", + "slug": "top-blue", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + }, + { + "sku": "bottom-black", + "source": { "locale": "en" }, + "name": "Black Bottom", + "slug": "bottom-black", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + }, + { + "sku": "bottom-white", + "source": { "locale": "en" }, + "name": "White Bottom", + "slug": "bottom-white", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + }, + { + "sku": "socks", + "source": { "locale": "en" }, + "name": "Socks", + "slug": "socks", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + }, + { + "sku": "headband", + "source": { "locale": "en" }, + "name": "Headband", + "slug": "headband", + "status": "ENABLED", + "visibleIn": ["CATALOG"], + "links": + [ + { "type": "in_bundle", + "sku": "bundle-outfit" + } + ] + } + ] + patch: + tags: + - Products + summary: Update products + description: | + Update products with specified `sku` and `source` values to replace existing field data with the data supplied in the request. + When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. + The replace strategy is used to apply changes for fields in an `array`. + operationId: updateProducts + parameters: + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" + responses: + "200": + $ref: "#/components/responses/AcceptedResponse" + "400": + $ref: "#/components/responses/InvalidItemsResponse" + "401": + $ref: "#/components/responses/UnauthorizedResponse" + "403": + $ref: "#/components/responses/ForbiddenResponse" + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedProductUpdate" + examples: + SimpleProductWithImages: + summary: Update a simple product + description: | + Update a simple product with the values provided in the request. + On update, changes to `scalar` and `object` type fields are applied using the merge strategy. + The replace strategy is used to apply changes for fields in an `array`. + + In the example below, the following attributes are updated. + * `name` - Change the product name. + * `metaTags.title` - Change the title of the product detail page. + * `attributes` - Add a new state, `NM` to the `states` attribute. + value: + [ + { + "sku": "red-pants", + "source": { "locale": "en" }, + "name": "Red pants - discounts!", + "metaTags": { "title": "Updated - Red" }, + "attributes": + [ + { + "code": "cost", + "values": ["10.5"] + }, + { + "code": "states", + "values": ["TX", "CA", "NM"] + } + ] + } + ] + UnassignProductVariant: + summary: Unassign product variant `pants-red-32` from configurable product `pants` + description: | + To unassign product variant `pants-red-32` from configurable product `pants` you need: + * remove the `variantReferenceId` from the `attributes` field + * remove the `links` association + value: + [ + { + "sku": "pants-red-32", + "source": { "locale": "en" }, + "attributes": + [ + { + "code": "color", + "values": ["Red Pants"], + "variantReferenceId": null + }, + { + "code": "size", + "values": ["32"], + "variantReferenceId": null + } + ], + "links": [] + } + ] + AddNewAccessoryItem: + summary: Add a new item `gloves` to the accessories group of the bundle product `bundle-outfit` + description: | + To add a new item `gloves` to the accessories group of the bundle product `bundle-outfit`, include the new item in the `items` array of the `accessories` group. + Note that simple product `gloves` must be created separately using the create product API. + value: + [ + { + "sku": "bundle-outfit", + "source": { "locale": "en" }, + "bundles": + [ + { + "group": "tops", + "required": true, + "multiSelect": false, + "defaultItemSkus": ["top-red"], + "items": + [ + { + "sku": "top-red", + "qty": 1, + "userDefinedQty": false + }, + { + "sku": "top-blue", + "qty": 1, + "userDefinedQty": false + } + ] + }, + { + "group": "bottoms", + "required": true, + "multiSelect": false, + "defaultItemSkus": ["bottom-black"], + "items": + [ + { + "sku": "bottom-black", + "qty": 1, + "userDefinedQty": false + }, + { + "sku": "bottom-white", + "qty": 1, + "userDefinedQty": false + } + ] + }, + { + "group": "accessories", + "required": false, + "multiSelect": true, + "items": + [ + { + "sku": "socks", + "qty": 1, + "userDefinedQty": true + }, + { + "sku": "headband", + "qty": 1, + "userDefinedQty": true + }, + { + "sku": "gloves", + "qty": 1, + "userDefinedQty": true + } + ] + } + ] + } + ] + /v1/catalog/products/delete: + post: + tags: + - Products + summary: Delete products + description: > + Delete products with specified `sku`` and `source`` values + operationId: deleteProducts + parameters: + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" + responses: + "200": + $ref: "#/components/responses/AcceptedResponse" + "400": + $ref: "#/components/responses/InvalidItemsResponse" + "401": + $ref: "#/components/responses/UnauthorizedResponse" + "403": + $ref: "#/components/responses/ForbiddenResponse" + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedProductDelete" + examples: + DeleteSimpleProduct: + summary: Delete product + description: > + Delete a simple product with specified `sku` and `source` values + value: + [ + { + "sku": "red-pants", + "source": { "locale": "en" } + } + ] + /v1/catalog/price-books: + post: + tags: + - Price Books + summary: Create price books + description: | + Create or replace existing price books. + + Use the [update price books operation](#operation/updatePriceBooks) to modify values for existing price books. + + Note: After you assign a `parentId` to a price book, you cannot change the parentId value using the update operation. If you want to define a different parent-child relationship, delete the child price book and create a new one with the desired parent-child relationship. + operationId: createPriceBooks + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPricebook" + examples: + FeedWithPricebookInformation: + summary: Create a base price book with child price books + description: Create a base price book and two child price books. The base price book specifies the `USD` currency for the parent and child price books. + value: + [ + { + "priceBookId": "us", + "name": "Dealer North price book name", + "currency": "USD" + }, { + "priceBookId": "dealer-north", + "parentId": "us", + "name": "Dealer North price book" + }, { + "priceBookId": "dealer-west", + "parentId": "us", + "name": "Dealer West price book" + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + patch: + tags: + - Price Books + summary: Update price books + description: |- + Change the name of a base or child price book, or change the currency assigned to the base price book. + When you submit the update request for a child price book, include the correct `parentId`. If the request includes a different `parentId`, the value is ignored. + operationId: updatePriceBooks + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPricebook" + examples: + FeedWithPriceBookInformation: + summary: Update existing price books + description: Update the name of child price book, "dealer-north" + value: + [ + { + "priceBookId": "dealer-north", + "parentId": "us", + "name": "North dealership" + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the `invalidFeedItems` node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + /v1/catalog/price-books/delete: + post: + tags: + - Price Books + summary: Delete price books + description: | + When you delete a price book, all its child price books and all prices assigned to the `priceBookId` and its children are also deleted. + + If a price book is deleted by mistake, you have up to one week to restore the deleted price books and their associated prices. Restoring is done by recreating the top-level parent price book that was deleted, using the same payload submitted in the original create price book request. The state of the price books and prices are restored to the status and price values assigned when the price book was deleted. + operationId: deletePriceBooks + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPricebookDelete" + examples: + DeleteExistingPricebook: + summary: Delete price book "dealer-north" + description: Delete the "dealer-north" price book. All prices assigned to this price book are also deleted. + value: [{ "priceBookId": "dealer-north" }] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + + /v1/catalog/products/prices: + post: + tags: + - Prices + summary: Create prices + description: | + Create or replace existing product prices. + +

Configurable Products

+ Because configurable product price is calculated based on the price of the selected product variant, you don't need to send price + data for configurable product skus. Sending price data for these skus can cause incorrect price calculations. + + operationId: createPrices + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPrices" + examples: + FeedWithNewProductPrice: + summary: Add product price information + description: Add product price information to the catalog data. + value: + [ + { + "sku": "red-pants", + "priceBookId": "us", + "regular": 20 + }, + { + "sku": "red-pants", + "priceBookId": "dealer-north", + "regular": 19.9, + "discounts": [ + { + "code": "discount", + "percentage": 10 + } + ] + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + patch: + tags: + - Prices + summary: Update prices + description: | + Change existing product prices + When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. + operationId: updatePrices + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPricesUpdate" + examples: + FeedWithProductPricesInformation: + summary: Product prices update + description: Update existing product prices for the given SKU ("red-pants") and price book id ("dealer-north"). + value: + [ + { + "sku": "red-pants", + "priceBookId": "dealer-north", + "discounts": [ + { "code": "discount", + "percentage": 30 + } + ] + } + ] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: | + Request rejected. Some of the received items are invalid. + Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + /v1/catalog/products/prices/delete: + post: + tags: + - Prices + summary: Delete prices + description: > + Delete existing product prices + operationId: deletePrices + parameters: + - name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + - name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FeedPricesDelete" + examples: + FeedWithProductPricesInformation: + summary: Delete product prices + description: > + Delete the existing product prices information + value: [{ "sku": "red-pants", "priceBookId": "dealer-north" }] + responses: + "200": + description: All items in the request are accepted for further processing. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + "400": + description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + "401": + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + "403": + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + "429": + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + content: + text/html;charset=UTF-8: + schema: + $ref: "#/components/schemas/429Response" + +components: + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: x-api-key + description: API key for authentication + bearerAuth: + type: http + scheme: bearer + description: Bearer token for authorization + imsOrgAuth: + type: apiKey + in: header + name: x-gw-ims-org-id + description: Adobe IMS organization ID + responses: + AcceptedResponse: + description: All items accepted and will be processed asynchronously + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/ProcessFeedResponse" + InvalidItemsResponse: + description: One or all received items are invalid. Check the "invalidFeedItems" node for details + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/400ProcessFeedResponse" + UnauthorizedResponse: + description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/401Response" + ForbiddenResponse: + description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. + content: + application/json;charset=UTF-8: + schema: + $ref: "#/components/schemas/403Response" + parameters: + ContentType: + name: Content-Type + in: header + required: true + schema: + type: string + enum: [application/json] + + ContentEncoding: + name: Content-Encoding + in: header + required: false + schema: + type: string + enum: [gzip] + description: Use this header if the payload is compressed with gzip. + + schemas: + FeedItemFailedValidationResult: + title: FeedItemFailedValidationResult + type: object + properties: + code: + type: string + description: Code name of invalid field. + itemIndex: + type: integer + format: int32 + description: Reference to the line item with an invalid payload. The line count begins at 0. + message: + type: string + description: Error description + value: + type: string + description: Original value passed in the request. + FeedMetadata: + title: FeedMetadata + description: Metadata information for a product attribute. + required: + - code + - source + - label + - dataType + type: object + properties: + code: + type: string + description: Attribute code + source: + $ref: "#/components/schemas/Source" + visibleIn: + type: array + description: | + Determines how the attribute is used on the storefront. + * `PRODUCT_DETAIL`: Product attribute is visible on the Product Detail Page. + * `PRODUCT_LISTING`: Product attribute is visible on Product Listing Page. + * `SEARCH_RESULTS`: Product attribute is visible on Search Results Page. + * `PRODUCT_COMPARE`: Product attribute is visible on Product Compare Page. + items: + enum: + - PRODUCT_DETAIL + - PRODUCT_LISTING + - SEARCH_RESULTS + - PRODUCT_COMPARE + label: + type: string + description: Label for the attribute that is displayed in user interfaces. + example: Attribute Name + dataType: + type: string + description: Data type + example: TEXT + enum: + - TEXT + - DECIMAL + - INTEGER + - BOOLEAN + filterable: + type: boolean + description: Indicates whether the attribute can be used to filter products. + example: true + sortable: + type: boolean + description: Indicates whether the attribute can be used to sort products. + example: true + searchable: + type: boolean + description: Indicates whether the attribute value can be used in search queries to filter results. + example: true + searchWeight: + type: number + description: | + The weight associated with a searchable attribute. + Attributes with a greater weight are returned before attributes with a lower weight. + format: float + searchTypes: + type: array + description: > + Search types associated with this attribute, for example: `autocomplete`, `starts_with`, and so on. + items: + type: string + enum: + - AUTOCOMPLETE + - CONTAINS + - STARTS_WITH + FeedMetadataUpdate: + title: FeedMetadataUpdate + description: Metadata information for a product attribute. + required: + - code + - source + type: object + properties: + code: + type: string + description: Attribute code + source: + $ref: "#/components/schemas/Source" + visibleIn: + type: array + description: | + Determines how the attribute is used on the storefront. + * `PRODUCT_DETAIL`: Product attribute is visible on the Product Detail Page. + * `PRODUCT_LISTING`: Product attribute is visible on Product Listing Page. + * `SEARCH_RESULTS`: Product attribute is visible on Search Results Page. + * `PRODUCT_COMPARE`: Product attribute is visible on Product Compare Page. + items: + enum: + - PRODUCT_DETAIL + - PRODUCT_LISTING + - SEARCH_RESULTS + - PRODUCT_COMPARE + label: + type: string + description: Label for the attribute that is displayed in user interfaces. + example: Attribute Name + dataType: + type: string + description: Data type + example: TEXT + enum: + - TEXT + - DECIMAL + - INTEGER + - BOOLEAN + filterable: + type: boolean + description: Indicates whether the attribute can be used to filter products. + example: true + sortable: + type: boolean + description: Indicates whether the attribute can be used to sort products. + example: true + searchable: + type: boolean + description: Indicates whether the attribute value can be used in search queries to filter results. + example: true + searchWeight: + type: number + description: | + The weight associated with a searchable attribute. + Attributes with a greater weight are returned before attributes with a lower weight. + format: float + searchTypes: + type: array + description: > + Search types associated with this attribute, for example: `autocomplete`, `starts_with`, and so on. + items: + type: string + enum: + - AUTOCOMPLETE + - CONTAINS + - STARTS_WITH + FeedMetadataDelete: + title: Delete metadata attribute + description: Delete metadata information for a product attribute. + required: + - code + - source + type: object + properties: + code: + type: string + description: Attribute code + source: + $ref: "#/components/schemas/Source" + FeedProduct: + title: Catalog Product payload + type: object + required: + - sku + - source + - name + - slug + - status + properties: + sku: + type: string + description: SKU (Stock Keeping Unit) is a unique identifier for a product. + example: MH01 + source: + $ref: "#/components/schemas/Source" + name: + type: string + description: Product name + example: Kangaroo Hoodie + slug: + type: string + description: The URL key for the product. + example: kangaroo-hoodie.html + description: + type: string + nullable: true + description: The main description for the product + example: A kangaroo hoodie for all seasons + shortDescription: + type: string + nullable: true + description: A short description of the product + example: A hoodie for all seasons with a kangaroo pocket + status: + type: string + description: | + Indicates whether the product is visible on the storefront. + The value is "Enabled" if it is visible, and "Disabled" if it is not visible. + example: ENABLED + enum: + - ENABLED + - DISABLED + visibleIn: + type: array + description: | + Storefront area where the product is visible. An empty list means that it is not visible as a stand alone product. + * `CATALOG`: Product is visible on Product Listing Page and Product Detail Page. + * `SEARCH`: Product is visible on Search Results Page and Product Detail Page. + example: [CATALOG] + items: + enum: + - CATALOG + - SEARCH + metaTags: + $ref: "#/components/schemas/ProductMetaAttribute" + attributes: + type: array + description: A list of product attributes. + items: + $ref: "#/components/schemas/ProductAttribute" + images: + type: array + description: A list of product images. + items: + $ref: "#/components/schemas/ProductImage" + links: + type: array + description: A list of linked SKUs. + items: + $ref: "#/components/schemas/ProductLink" + routes: + type: array + description: A list of product routes. + items: + $ref: "#/components/schemas/ProductRoutes" + configurations: + type: array + description: Composite products, such as configurable products, must provide a list of product options that a shopper can select (for example, "color", "size", etc.). + items: + $ref: "#/components/schemas/ProductConfiguration" + bundles: + type: array + description: Composite products, such as bundle products, must include a list of individual products that are part of the bundle, organized into groups (for example, "shirts", "pants", "accessories"). + items: + $ref: "#/components/schemas/ProductBundle" + externalIds: + type: array + description: A list of external IDs for the product. + items: + $ref: "#/components/schemas/ProductExternalId" + FeedProductUpdate: + title: Catalog Product payload + type: object + required: + - sku + - source + properties: + sku: + type: string + description: SKU (Stock Keeping Unit) is a unique identifier for a product. + example: MH01 + source: + $ref: "#/components/schemas/Source" + name: + type: string + description: Product name + example: Kangaroo Hoodie + slug: + type: string + description: The URL key for the product. + example: kangaroo-hoodie.html + description: + type: string + nullable: true + description: The main description for the product + example: A kangaroo hoodie for all seasons + shortDescription: + type: string + nullable: true + description: A short description of the product + example: A hoodie for all seasons with a kangaroo pocket + status: + type: string + description: | + Indicates whether the product is visible on the storefront. + The value is "Enabled" if it is visible, and "Disabled" if it is not visible. + example: ENABLED + enum: + - ENABLED + - DISABLED + visibleIn: + type: array + description: | + Storefront area where the product is visible. An empty list means that it is not visible as a stand alone product. + * `CATALOG`: Product is visible on Product Listing Page and Product Detail Page. + * `SEARCH`: Product is visible on Search Results Page and Product Detail Page. + example: [CATALOG] + items: + enum: + - CATALOG + - SEARCH + metaTags: + $ref: "#/components/schemas/ProductMetaAttribute" + attributes: + type: array + description: A list of product attributes. + items: + $ref: "#/components/schemas/ProductAttribute" + images: + type: array + description: A list of product images. + items: + $ref: "#/components/schemas/ProductImage" + links: + type: array + description: | + A list of linked SKUs. For product variants, this is a required field that establishes a link between a product variant and the corresponding configurable product. + `VARIANT_OF` link type must be specified to establish a connection to the configurable product SKU. + items: + $ref: "#/components/schemas/ProductLink" + routes: + type: array + description: A list of product routes. + items: + $ref: "#/components/schemas/ProductRoutes" + configurations: + type: array + description: Composite products, such as configurable products, must provide a list of product options that a shopper can select (for example, "color", "size", etc.). + items: + $ref: "#/components/schemas/ProductConfiguration" + bundles: + type: array + description: Composite products, such as bundle products, must include a list of individual products that are part of the bundle, organized into groups (for example, "shirts", "pants", "accessories"). + items: + $ref: "#/components/schemas/ProductBundle" + externalIds: + type: array + description: A list of external IDs for the product. + items: + $ref: "#/components/schemas/ProductExternalId" + FeedProductDelete: + title: Catalog Product delete payload + type: object + required: + - sku + - source + properties: + sku: + type: string + description: Product unique identifier + example: MH01 + source: + $ref: "#/components/schemas/Source" + FeedPricebook: + title: FeedPricebook + description: Price book information + oneOf: + - $ref: '#/components/schemas/PriceBookBase' + - $ref: '#/components/schemas/PriceBookChild' + PriceBookBase: + title: Base price book + type: object + required: [priceBookId, name, currency] + properties: + priceBookId: + type: string + description: Base price book id + minLength: 1 + maxLength: 64 + name: + type: string + description: Price book name + minLength: 1 + currency: + type: string + description: Price book currency + minLength: 1 + maxLength: 5 + PriceBookChild: + title: Child price book + type: object + required: [priceBookId, name, parentId] + properties: + priceBookId: + type: string + description: Child price book id + minLength: 1 + maxLength: 64 + name: + type: string + description: Price book name + minLength: 1 + parentId: + type: string + description: Base price book id + minLength: 1 + maxLength: 64 + FeedPricebookDelete: + title: FeedPricebookDelete + description: Price book information + required: + - priceBookId + type: object + properties: + priceBookId: + type: string + description: Price book id + FeedPrices: + title: FeedPrices + description: Product price information. + required: + - sku + - priceBookId + - regular + type: object + properties: + sku: + type: string + description: Product SKU + priceBookId: + type: string + description: Price book id + regular: + type: number + format: float + description: Regular price + discounts: + type: array + description: Active discounts + items: + anyOf: + - $ref: "#/components/schemas/DiscountsFinalPrice" + - $ref: "#/components/schemas/DiscountsPercentage" + FeedPricesUpdate: + title: FeedPrices + description: Product price information. + required: + - sku + - priceBookId + type: object + properties: + sku: + type: string + description: Product SKU + priceBookId: + type: string + description: Price book id + regular: + type: number + format: float + description: Regular price + discounts: + type: array + description: Active discounts + items: + anyOf: + - $ref: "#/components/schemas/DiscountsFinalPrice" + - $ref: "#/components/schemas/DiscountsPercentage" + FeedPricesDelete: + title: FeedPricesDelete + description: Delete product price information. + required: + - sku + - priceBookId + type: object + properties: + sku: + type: string + description: Product SKU + priceBookId: + type: string + description: Price book id + DiscountsFinalPrice: + title: Final Price + type: object + required: + - code + - price + properties: + code: + type: string + price: + type: number + format: float + DiscountsPercentage: + title: Discount + type: object + required: + - code + - percentage + properties: + code: + type: string + percentage: + type: number + format: float + Source: + title: Catalog source + description: Source of the entity. For example it's locale "English" + type: object + required: + - locale + properties: + locale: + type: string + description: A single value that represents content locale, for example, English. + example: English + ProductMetaAttribute: + title: Meta Attributes + description: Meta attributes that are specified in tags. + type: object + properties: + title: + type: string + description: A meta title + keywords: + type: array + description: A meta keywords + items: + type: string + description: + type: string + description: A meta description + ProductAttribute: + title: Product Attribute + type: object + required: + - code + - values + properties: + code: + type: string + description: Product Attribute Code +# DCAT-2461: +# type: +# enum: +# - BOOLEAN +# - NUMBER +# - STRING +# - ARRAY +# - OBJECT +# description: | +# Type of attribute value to be applied during the rendering phase. Validation occurs only when the code is rendered. Invalid values are ignored. +# - `BOOLEAN`: Accept single value: "true" or false +# - `NUMBER`: Accept single number,e.g. "85", "0.42", etc. +# - `STRING`: Accept single string,e.g. "Great day, yall!" +# - `ARRAY`: Accept list of strings ,e.g. ["red", "green", "blue"] +# - `OBJECT`: Accept JSON object `"{"name": "swatch", "color": "red"}"` + values: + type: array + description: A list of value(s) associated with a specified attribute code. + items: + type: string + variantReferenceId: + type: string + nullable: true + description: | + The variant reference ID establishes a link between a product variant and the corresponding + [Option Value ID](#operation/createProducts!path=options/values/id&t=request) in a configurable product. + + A variant reference ID can be specified only for a product that represents a variant of a configurable product. + ProductRoutes: + title: Routes + type: object + required: + - path + properties: + path: + type: string + description: URL path + position: + type: integer + description: Position of a product in the URL path. The default value is 0. + format: int32 + ProductImage: + title: Product Image + type: object + required: + - url + properties: + url: + type: string + description: Media resource URL + label: + type: string + description: Media resource label + roles: + type: array + description: | + Roles associated with this image that determine how the image is used on the storefront. + - `BASE`: Product image is visible as a main image on the Product Detail Page. + - `SMALL`: Product image is visible as a main image on the Category or search result page or other product listing pages. + - `THUMBNAIL`: Thumbnail images appear in the thumbnail gallery, shopping cart, etc. + - `SWATCH`: A swatch can be used to illustrate the color, pattern, or texture. + items: + enum: + - BASE + - SMALL + - THUMBNAIL + - SWATCH + customRoles: + type: array + description: > + Custom image role. Merchants can define custom roles in addition to the predefined values. + items: + type: string + ProductConfiguration: + title: Configurations + type: object + required: + - attributeCode + - type + - values + properties: + attributeCode: + type: string + description: | + Product option attribute code. For `CONFIGURABLE` or `SWATCH` option types, this ID must match the + ["attribute code"](#operation/createProducts!path=attributes/code&t=request) + used for the configurable product (for example, "color"). + label: + type: string + description: Option label + defaultVariantReferenceId: + type: string + description: Specifies the pre-selected value variant reference id of the current option. + nullable: true + type: + type: string + enum: + - CONFIGURABLE + - SWATCH + description: | + Option type. Indicates the product type the option can be assigned to. + - `CONFIGURABLE`: Configurable product option + - `SWATCH`: Swatch product option. Must be used for color or text swatches attributes + values: + type: array + description: A list of option values. Defines option values available to shoppers (for example, "red" color or "large" size). + items: + $ref: "#/components/schemas/ProductOptionValue" + ProductOptionValue: + title: ProductOptionValue + type: object + required: + - variantReferenceId + properties: + variantReferenceId: + type: string + description: | + Option value ID. + For `CONFIGURABLE` or `SWATCH` option types, this ID must match the ["variantReferenceId"](#operation/createProducts!path=attributes/variantReferenceId&t=request) + defined in the product variant. + label: + type: string + description: Option value label + colorHex: + type: string + description: A hex representation of the color of the option value. Can be used for option with a SWATCH type. + imageUrl: + type: string + description: Image URL of the option value. Can be used for option with a SWATCH type. + ProductBundle: + title: Bundles + type: object + required: + - group + - items + properties: + group: + type: string + description: | + Name of the group that organizes the bundle items. + This helps in categorizing the items within the bundle for better organization. + For example, groups can be "shirts", "pants", "accessories", etc. + required: + type: boolean + description: Indicates whether a shopper is required to select any products from this group to add the bundle to the shopping cart. + example: false + multiSelect: + type: boolean + description: Indicates whether multiple products can be selected by a shopper. + example: false + defaultItemSkus: + type: array + description: A list of default product SKUs that are selected in this bundle group. + items: + type: string + items: + type: array + description: | + A list of individual products that are part of the bundle. + Each item in the list represents a product that can be selected as part of the bundle. + items: + $ref: "#/components/schemas/ProductBundleItem" + ProductExternalId: + title: External Ids + type: object + required: + - id + - origin + properties: + id: + type: string + description: External ID of the product. + origin: + type: string + description: External ID origin. Specifies the system that generated the external ID, such as Adobe Commerce, Google Product Ratings, etc. + ProductBundleItem: + title: ProductBundleItem + type: object + required: + - sku + properties: + sku: + type: string + description: Product SKU of the bundle item. + qty: + type: number + description: Quantity of the item in the bundle. + format: float + userDefinedQty: + type: boolean + description: Indicates whether the quantity of the item in the bundle can be defined by a shopper. + example: false + ProductLink: + title: Links + required: + - type + - sku + type: object + properties: + type: + type: string + description: | + Product link type. Merchants can define custom types in addition to the predefined values. + - `VARIANT_OF` link type must be specified to establish a connection to the configurable product SKU. + - `IN_BUNDLE` link type must be specified to establish a connection to the bundle product SKU. + sku: + type: string + description: Product SKU + description: Product association + ItemFailedValidationResult: + title: ItemFailedValidationResult + type: object + properties: + code: + type: string + description: Code for the validation error. + itemIndex: + type: integer + description: Index of the conflicting item + format: int32 + message: + type: string + description: Validation error message for the item. + value: + type: string + description: The value supplied to the API. + ProcessFeedResponse: + title: Response payload + type: object + properties: + status: + type: string + description: Request status. + default: ACCEPTED + acceptedCount: + type: integer + description: The number of received and accepted items. + format: int32 + example: { "status": "ACCEPTED", "acceptedCount": 4 } + 400ProcessFeedResponse: + title: Response payload + type: object + properties: + status: + type: string + description: Request status. + default: FAILED + message: + type: string + description: Error summary. + errors: + type: array + description: List of items that did not pass validation. Fix the payload for invalid items before resubmitting the request. + items: + $ref: "#/components/schemas/FeedItemFailedValidationResult" + example: + { + "status": "FAILED", + "message": "Items validation failed for 2 items", + "errors": + [ + { + "itemIndex": 0, + "code": "status", + "message": 'status: does not have a value in the enumeration ["ENABLED", "DISABLED"]', + "value": "active" + }, + { + "itemIndex": 1, + "code": "source", + "message": "required property 'source' not found", + "value": "" + } + ] + } + 401Response: + title: 401 Unauthorized + type: object + properties: + title: + type: string + description: Error title + status: + type: string + description: Error status code + error_code: + type: string + description: Error code + message: + type: string + description: Error message + example: + { + "title": "ErrInvalidOauthToken", + "status": "401", + "error_code": "401013", + "message": "Oauth token is not valid" + } + 403Response: + title: 403 Forbidden + type: object + properties: + title: + type: string + description: Error title + status: + type: string + description: Error status code + error_code: + type: string + description: Error code + message: + type: string + description: Error message + example: + { + "title": "ErrMissingOauthToken", + "status": "403", + "error_code": "403010", + "message": "Oauth token is missing" + } + 429Response: + title: 429 Too Many Requests + description: | + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. + type: string \ No newline at end of file From f8cd0062819531da1f2ccde1e236e5db0509a1bb Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Fri, 18 Jul 2025 16:11:22 -0500 Subject: [PATCH 04/48] fix: replaced ACCS with ACO --- src/pages/credential/GetCredentialOAuthS2s.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 22df35ac..a7aeeb78 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -6,7 +6,7 @@ const GetCredentialOAuthS2s = () => { return ( - + @@ -15,7 +15,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -69,7 +69,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -81,7 +81,7 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> - Credential details

You can use the following credential details to try out the Adobe Commerce as a Cloud Service REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Commerce APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> + Credential details

You can use the following credential details to try out the Adobe Commerce Optimizer REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Commerce APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> @@ -89,7 +89,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -101,7 +101,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

You can use the following credential details to try out the Adobe Commerce as a Cloud Service REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Platform APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> + Credential details

You can use the following credential details to try out the Adobe Commerce Optimizer REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Platform APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> @@ -116,7 +116,7 @@ const GetCredentialOAuthS2s = () => { - +
@@ -126,9 +126,9 @@ const GetCredentialOAuthS2s = () => { paragraph="Create unique credentials that you will use to call multiple APIs from your application." > - - - + + + { From 5ce556da5a644ba86d04f4739ba448f389d13761 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Fri, 18 Jul 2025 16:12:17 -0500 Subject: [PATCH 05/48] fix: long description --- static/rest/data-ingestion-schema-v1.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index fa0764cc..4c1a5b2c 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -225,8 +225,9 @@ paths: schema: $ref: "#/components/schemas/403Response" "429": + x-summary: Too many requests description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. + Indicates that a client has exceeded the rate limit of 300 requests per minute. Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. content: text/html;charset=UTF-8: From 1e72f8b6b2dbfc97b898d3febf763fa4bf90a1de Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Fri, 18 Jul 2025 16:13:07 -0500 Subject: [PATCH 06/48] Revert "fix: long description" This reverts commit 5ce556da5a644ba86d04f4739ba448f389d13761. --- static/rest/data-ingestion-schema-v1.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 4c1a5b2c..fa0764cc 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -225,9 +225,8 @@ paths: schema: $ref: "#/components/schemas/403Response" "429": - x-summary: Too many requests description: | - Indicates that a client has exceeded the rate limit of 300 requests per minute. + Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. content: text/html;charset=UTF-8: From 36be64ed58188fee77c3ece20a6802d37ff86503 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Fri, 18 Jul 2025 16:32:44 -0500 Subject: [PATCH 07/48] move original spec to static dir --- src/openapi/.redocly.yaml | 26 - src/openapi/data-ingestion-schema-v1.yaml | 2482 --------------------- {src/openapi => static/rest}/README.md | 0 3 files changed, 2508 deletions(-) delete mode 100644 src/openapi/.redocly.yaml delete mode 100644 src/openapi/data-ingestion-schema-v1.yaml rename {src/openapi => static/rest}/README.md (100%) diff --git a/src/openapi/.redocly.yaml b/src/openapi/.redocly.yaml deleted file mode 100644 index f3190981..00000000 --- a/src/openapi/.redocly.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# See https://docs.redoc.ly/cli/configuration/ for more information. -organization: adobe-developers -extends: - - minimal -apis: - Data Ingestion@1.0: - root: src/openapi/openapi/data-ingestion-schema-v1.yaml - labels: - - main - Data Ingestion@1.0.0: - root: src/openapi/data-ingestion-schema-v1.yaml -theme: - openapi: - pagination: section - hideHostname: true - sortPropsAlphabetically: false - pathInMiddlePanel: true - hideDownloadButton: false - hideTryItPanel: true - layout: stacked - showExtensions: true - nativeScrollbars: true - ctrlFHijack: true - scrollYOffset: 64 - disableSidebar: true - disableDeepLinks: false \ No newline at end of file diff --git a/src/openapi/data-ingestion-schema-v1.yaml b/src/openapi/data-ingestion-schema-v1.yaml deleted file mode 100644 index fa0764cc..00000000 --- a/src/openapi/data-ingestion-schema-v1.yaml +++ /dev/null @@ -1,2482 +0,0 @@ -openapi: 3.0.3 -externalDocs: - url: https://github.com/adobe-commerce/aco-ts-sdk/blob/main/README.md - description: Learn about the Adobe Commerce Optimizer TypeScript and JavaScript SDK for Merchandising Services -info: - title: Catalog Data Ingestion API - description: | - The Catalog Data Ingestion API allows you to create and manage products and price books and directly integrate catalog data with the Commerce catalog service. - - This API provides the following resource collections to create and update catalog data: - - - [Metadata](#tag/Metadata)—define and manage product attribute metadata including display settings, search characteristics, filtering options, and sorting rules. - - [Products](#tag/Products)—define and manage catalog items with their attributes (name, description, SKU, images, and variants). - - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. - - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. - version: 1.0.0 -security: - - apiKeyAuth: [] - - bearerAuth: [] - - imsOrgAuth: [] -servers: - - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} - description: Production endpoint. The tenantId value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. - variables: - tenantId: - description: The identifier of the Adobe Commerce instance - default: your-tenant-id - -tags: - - name: Metadata - description: | - Manage product attribute definitions including display settings, search behavior, and filtering capabilities. - These settings control how product attributes appear and function throughout the storefront. - - Product attribute metadata specifies how product attributes are displayed on the storefront. - For example, you can define a product attribute as searchable, filterable, and sortable. - You can also define the search type for a product attribute, such as autocomplete or exact match. - - name: Products - description: Create and manage product data including simple products, configurable products, and their variants. Control product visibility, attributes, images, and pricing - - name: Price Books - description: | - Define pricing scopes to manage product prices across different customer tiers and markets. Price books support a hierarchical model, allowing up to three levels of nested child price books under each base price book. Each price book can reference a parent price book, forming a tree structure for pricing scopes. - - The base price book defines the currency for itself and all its child price books. Child price books inherit this currency and cannot override it. - - Note: You cannot assign a parent price book to a base price book. Due to the asynchronous nature of the API, this validation is not enforced at runtime. API requests that attempt to set a parent price book for a base price book are ignored. - - - name: Prices - description: | - Manage product SKU prices across different price books and customer tiers. Define regular prices and - special discounts for specific customer segments or markets by specifying a price book id. - - Before creating prices with the Prices API, first create [Price books](#tag/Price-Books). Prices that reference a non-existing price book are ignored. - - Price lookup logic - - The product price lookup follows a hierarchical path through price books. The search starts at the specified price book and traverses upward through parent price books until it reaches the root level. A product is not assigned a price if: - - No price is found in the entire hierarchy - - The price book specified in a price record has not been created - - Note: You cannot define prices for configurable products. Prices for configurable products - are calculated based on the price of the selected product variant. - -paths: - /v1/catalog/products/metadata: - post: - tags: - - Metadata - summary: Create product attribute metadata - description: | - To ensure product data is indexed for discovery, create or replace existing product attribute metadata resources before creating products. - - For each Commerce project, you must define metadata for the following attributes for each catalog source (`locale`): - - `sku` - - `name` - - `description` - - `shortDescription` - - `price` - - Also, you can define metadata for custom attributes. - - When creating product attribute metadata: - - Each product attribute requires a unique `code` and `source`. - - Use the `dataType` field to define the data type for the product attribute. - - Use the `visibleIn` field to define where the product attribute is displayed on the storefront. - - Use the `filterable`, `sortable`, and `searchable` fields to define how the product attribute - is used for filtering, sorting, and searching. - - Use the `searchWeight` field to define the search weight for the product attribute. - - Use the `searchTypes` field to define the search type for the product attribute. - - To update existing product attribute metadata, use the update operation. - - operationId: createProductMetadata - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedMetadata" - examples: - FeedWithMetadataInformation: - summary: Create product attributes metadata - description: | - Creates searchable text attributes. This example defines metadata for the required attributes - with recommended default values. - value: - [ - { - "code": "sku", - "source": { "locale": "en" }, - "label": "Product Name", - "dataType": "TEXT", - "visibleIn": - [ - "PRODUCT_DETAIL", - "PRODUCT_LISTING", - "SEARCH_RESULTS", - "PRODUCT_COMPARE" - ], - "filterable": true, - "sortable": false, - "searchable": true, - "searchWeight": 1, - "searchTypes": ["AUTOCOMPLETE"] - }, - { - "code": "name", - "source": { "locale": "en" }, - "label": "Product Name", - "dataType": "TEXT", - "visibleIn": - [ - "PRODUCT_DETAIL", - "PRODUCT_LISTING", - "SEARCH_RESULTS", - "PRODUCT_COMPARE" - ], - "filterable": false, - "sortable": true, - "searchable": true, - "searchWeight": 1, - "searchTypes": ["AUTOCOMPLETE"] - }, - { - "code": "description", - "source": { "locale": "en" }, - "label": "Product Description", - "dataType": "TEXT", - "visibleIn": ["PRODUCT_DETAIL"], - "filterable": false, - "sortable": false, - "searchable": false, - "searchWeight": 1, - "searchTypes": ["AUTOCOMPLETE"] - }, - { - "code": "shortDescription", - "source": { "locale": "en" }, - "label": "Product Short Description", - "dataType": "TEXT", - "visibleIn": ["PRODUCT_DETAIL"], - "filterable": false, - "sortable": false, - "searchable": true, - "searchWeight": 1, - "searchTypes": ["AUTOCOMPLETE"] - }, - { - "code": "price", - "source": { "locale": "en" }, - "label": "Price", - "dataType": "DECIMAL", - "visibleIn": - [ - "PRODUCT_DETAIL", - "PRODUCT_LISTING", - "SEARCH_RESULTS", - "PRODUCT_COMPARE" - ], - "filterable": true, - "sortable": true, - "searchable": false, - "searchWeight": 1, - "searchTypes": [] - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "message" and "errors" fields for details. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - patch: - tags: - - Metadata - summary: Update product attribute metadata - description: | - Update existing product attribute metadata with new values. - When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. - operationId: updateProductMetadata - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedMetadataUpdate" - examples: - FeedWithMetadataInformation: - summary: Example of product attribute metadata - description: | - Update existing product attribute metadata with new values. - Note that fields with the `array` type will replace existing data. - The example below updates the following attributes: - * `label` - Change the product attribute label. - * `visibleIn` - Add `PRODUCT_LISTING` role to the product attribute. - value: - [ - { - "code": "name", - "source": { "locale": "en" }, - "label": "Updated - Product Name", - "visibleIn": [ - "PRODUCT_DETAIL", - "PRODUCT_LISTING" - ] - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - /v1/catalog/products/metadata/delete: - post: - tags: - - Metadata - summary: Delete product attributes metadata - description: Remove product attribute metadata resources from the catalog data. - operationId: deleteProductMetadata - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedMetadataDelete" - examples: - FeedWithMetadataInformation: - summary: Delete product attribute metadata - description: Marks existing product attribute metadata as deleted. - value: [ - { - "code": "name", - "source": { "locale": "en" } - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Some received items are invalid. Check the ‘invalidFeedItems’ node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - - /v1/catalog/products: - post: - tags: - - Products - summary: Create or replace products - description: | - You can create different types of products, such as simple products and configurable products. - - When creating products: - - Each product requires a unique SKU identifier. - - Products must have a defined catalog source, for example `locale`. - - Add values for the required `name`, `slug`, and `status` fields. - - Define optional fields such as descriptions, images, and custom attributes as needed. - - Use the `links` field to define relationships between products, such as linking a product variant to its parent - configurable product. - - You can create multiple products in a single request, and also create product variants for configurable products in the same request. - -

Simple Products

- Create products or replace existing products with specified `sku` and `source` values. - - Use the [update operation](#operation/updateProducts) to modify values for an existing product. - -

Configurable Products

- A configurable product is a parent product that allows customers to select from multiple predefined attributes such as color, size, and material. - Each unique combination of these attribute values (for example, `color=green`, `size=large`) represents a product variant. - - Each variant is treated as a distinct child product with its own SKU, price, and inventory. These variants are stored as separate entities in the database and linked to the parent configurable product. - - The configurable product itself acts as a container or abstraction layer, enabling a unified frontend experience while maintaining - granular control over each variant on the backend. - - To create a configurable product, you need the following: - - * Product attributesCreate product attributes (for example, "color", "size") - that will be used to differentiate product variants. These attributes must be registered in the system before they can be referenced in - product definitions. - - * Configurable product—Define the parent product and include a - [configurations](#operation/createProducts!path=configurations&t=request) array that specifies the selectable options - and maps each option to a set of possible values. Each value must include a - [variantReferenceId](#operation/createProducts!path=configurations/values/variantReferenceId&t=request), - which links to a specific variant. - - * Product variants—Define a product variant for each valid combination of attribute values. Each variant must: - * Include relevant attribute values in an [attributes](#operation/createProducts!path=attributes&t=request) array. - * Reference the parent configurable product using variantReferenceId. - * Include a [links](#operation/createProducts!path=links&t=request) array with a link of type `VARIANT_OF` pointing to the configurable product. - - For example: - -
-          {
-            "sku": "pants-red-32",
-            "attributes": [
-              {
-                "code": "color",
-                "values": ["Red"],
-                "variantReferenceId": "pants-color-red"
-              }
-            ],
-            "links": [
-              {
-                "type": "VARIANT_OF",
-                "sku": "pants"
-              }
-            ]
-          }
-        
- - Each product variant links back to the configurable product through its `variantReferenceId`, which corresponds to specific `configurations[].values[].variantReferenceId` in the configurable product. - - To unassign a product variant from a configurable product, do one of the following: - - Use [Delete Product API](#operation/deleteProducts) to delete the product variant. - - Use [Update Product API](#operation/updateProducts) to set the ["variantReferenceId"](#operation/createProducts!path=attributes/variantReferenceId&t=request) to `null` and unassign the product variant from the configurable product by removing the ["links"](#operation/createProducts!path=links&t=request) association. - -

Bundle Products

- - A bundle product combines several simple products into one sellable unit. Items within the bundle can be categorized into logical groups like `tops`, `bottoms`, and `accessories`. - Each group can have multiple items, and shoppers can select items from each group to create a customized bundle. - - To create a bundle product, you need the following: - - * Bundle product—[Define the parent product](#operation/createProducts) and include a [bundles](#operation/createProducts!path=bundles) array that - specifies the groups and items included in the bundle. Each group must define: - * `group` - Name of the group (for example, "tops", "bottoms") - * `required` - Whether a selection from this group is mandatory - * `multiSelect` - Whether multiple items can be selected - * `items` - List of products that can be selected from this group - - * Simple products—Define each simple product to include in the bundle. Each product must: - * Include a [links](#operation/createProducts!path=links) array with a link of type `IN_BUNDLE` pointing to the bundle product - * Be created separately using the [create product API](#operation/createProducts) - - Note: A simple product can be included only once in each bundle. - If the same item is specified in multiple groups, the API returns a `Duplicate SKU found in bundle items` error. - - To update a bundle product, do one of the following: - * Use the [Update products API](#operation/updateProducts) to modify the groups and items in the bundle - * Use the [Delete products API](#operation/deleteProducts) to remove items from the bundle - operationId: createProducts - parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" - responses: - "200": - $ref: "#/components/responses/AcceptedResponse" - "400": - $ref: "#/components/responses/InvalidItemsResponse" - "401": - $ref: "#/components/responses/UnauthorizedResponse" - "403": - $ref: "#/components/responses/ForbiddenResponse" - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedProduct" - examples: - SimpleProductWithImages: - summary: Create a simple product - description: > - Create a simple product with required and optional fields. - value: - [ - { - "sku": "red-pants", - "source": { "locale": "en" }, - "name": "red pants", - "slug": "red-pants.html", - "status": "ENABLED", - "description": "long description about red pants", - "shortDescription": "just pants", - "visibleIn": - [ - "CATALOG", - "SEARCH" - ], - "metaTags": - { - "title": "Yoga pants ", - "description": "Climb with Zeppelin Yoga Pant", - "keywords": ["pants", "yoga"] - }, - "attributes": - [ - { - "code": "cost", - "values": ["10.5"] - }, - { - "code": "states", - "values": ["TX", "CA"] - } - ], - "images": - [ - { - "url": "https://example.com/images/pants.jpg", - "label": "photo of my pants!", - "roles": ["BASE", "SMALL"], - "customRoles": ["widget"] - } - ], - "routes": - [ - { "path": "red-pants" }, - { "path": "pants/red-pants", "position": 1 } - ] - } - ] - ConfigurableProductWithVariants: - summary: Create a configurable product with four product variants - description: > - Create a configurable product `pants` with four product variants: `pants-red-32`, `pants-red-44`, `pants-green-32` and `pants-green-44`. - value: - [ - { - "sku": "pants", - "source": { "locale": "en" }, - "name": "Yoga pants", - "slug": "zeppelin-yoga-pant", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "configurations": - [ - { - "attributeCode": "color", - "label": "Pants color", - "defaultVariantReferenceId": "pants-color-red", - "type": "SWATCH", - "values": - [ - { - "variantReferenceId": "pants-color-red", - "label": "Red", - "colorHex": "#ff0000" - }, - { - "variantReferenceId": "pants-color-green", - "label": "Green", - "imageUrl": "https://www.example.com/media/catalog/product/green_main_1.jpg" - } - ] - }, - { - "attributeCode": "size", - "label": "Pants size", - "defaultVariantReferenceId": "pants-size-32", - "type": "CONFIGURABLE", - "values": - [ - { - "variantReferenceId": "pants-size-32", - "label": "32" - }, - { - "variantReferenceId": "pants-size-44", - "label": "44" - } - ] - } - ] - }, - { - "sku": "pants-red-32", - "source": { "locale": "en" }, - "name": "Zeppelin Yoga Pant Red 32 size", - "slug": "pants-red-32", - "status": "ENABLED", - "attributes": - [ - { - "code": "color", - "values": ["Red Pants"], - "variantReferenceId": "pants-color-red" - }, - { - "code": "size", - "values": ["32"], - "variantReferenceId": "pants-size-32" - } - ], - "links": - [ - { - "type": "variant_of", - "sku": "pants" - } - ] - }, - { - "sku": "pants-red-44", - "source": { "locale": "en" }, - "name": "Zeppelin Yoga Pant Red 44 size", - "slug": "pants-red-44", - "status": "ENABLED", - "attributes": - [ - { - "code": "color", - "values": ["Red Pants"], - "variantReferenceId": "pants-color-red" - }, - { - "code": "size", - "values": ["44"], - "variantReferenceId": "pants-size-44" - } - ], - "links": - [ - { - "type": "VARIANT_OF", - "sku": "pants" - } - ] - }, - { - "sku": "pants-green-32", - "source": { "locale": "en" }, - "name": "Zeppelin Yoga Pant Green 32 size", - "slug": "pants-green-32", - "status": "ENABLED", - "attributes": - [ - { - "code": "color", - "values": ["Green Pants"], - "variantReferenceId": "pants-color-green" - }, - { - "code": "size", - "values": ["32"], - "variantReferenceId": "pants-size-32" - } - ], - "links": - [ - { - "type": "VARIANT_OF", - "sku": "pants" - } - ] - }, - { - "sku": "pants-green-44", - "source": { "locale": "en" }, - "name": "Zeppelin Yoga Pant green 44 size", - "slug": "pants-green-44", - "status": "ENABLED", - "attributes": - [ - { - "code": "color", - "values": ["Green Pants"], - "variantReferenceId": "pants-color-green" - }, - { - "code": "size", - "values": ["44"], - "variantReferenceId": "pants-size-44" - } - ], - "links": - [ - { - "type": "VARIANT_OF", - "sku": "pants" - } - ] - } - ] - BundleProductWithItems: - summary: Create a bundle product with multiple items - description: > - Create a bundle product `bundle-outfit` with multiple items grouped into categories like `tops`, `bottoms`, and `accessories`. - An item can be included only once in each bundle product. - value: - [ - { - "sku": "bundle-outfit", - "source": { "locale": "en" }, - "name": "Bundle Outfit", - "slug": "bundle-outfit", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "bundles": - [ - { - "group": "tops", - "required": true, - "multiSelect": false, - "defaultItemSkus": ["top-red"], - "items": - [ - { - "sku": "top-red", - "qty": 1, - "userDefinedQty": false - }, - { - "sku": "top-blue", - "qty": 1, - "userDefinedQty": false - } - ] - }, - { - "group": "bottoms", - "required": true, - "multiSelect": false, - "defaultItemSkus": ["bottom-black"], - "items": - [ - { - "sku": "bottom-black", - "qty": 1, - "userDefinedQty": false - }, - { - "sku": "bottom-white", - "qty": 1, - "userDefinedQty": false - } - ] - }, - { - "group": "accessories", - "required": false, - "multiSelect": true, - "items": - [ - { - "sku": "socks", - "qty": 1, - "userDefinedQty": true - }, - { - "sku": "headband", - "qty": 1, - "userDefinedQty": true - } - ] - } - ] - }, - { - "sku": "top-red", - "source": { "locale": "en" }, - "name": "Red Top", - "slug": "top-red", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - }, - { - "sku": "top-blue", - "source": { "locale": "en" }, - "name": "Blue Top", - "slug": "top-blue", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - }, - { - "sku": "bottom-black", - "source": { "locale": "en" }, - "name": "Black Bottom", - "slug": "bottom-black", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - }, - { - "sku": "bottom-white", - "source": { "locale": "en" }, - "name": "White Bottom", - "slug": "bottom-white", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - }, - { - "sku": "socks", - "source": { "locale": "en" }, - "name": "Socks", - "slug": "socks", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - }, - { - "sku": "headband", - "source": { "locale": "en" }, - "name": "Headband", - "slug": "headband", - "status": "ENABLED", - "visibleIn": ["CATALOG"], - "links": - [ - { "type": "in_bundle", - "sku": "bundle-outfit" - } - ] - } - ] - patch: - tags: - - Products - summary: Update products - description: | - Update products with specified `sku` and `source` values to replace existing field data with the data supplied in the request. - When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. - The replace strategy is used to apply changes for fields in an `array`. - operationId: updateProducts - parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" - responses: - "200": - $ref: "#/components/responses/AcceptedResponse" - "400": - $ref: "#/components/responses/InvalidItemsResponse" - "401": - $ref: "#/components/responses/UnauthorizedResponse" - "403": - $ref: "#/components/responses/ForbiddenResponse" - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedProductUpdate" - examples: - SimpleProductWithImages: - summary: Update a simple product - description: | - Update a simple product with the values provided in the request. - On update, changes to `scalar` and `object` type fields are applied using the merge strategy. - The replace strategy is used to apply changes for fields in an `array`. - - In the example below, the following attributes are updated. - * `name` - Change the product name. - * `metaTags.title` - Change the title of the product detail page. - * `attributes` - Add a new state, `NM` to the `states` attribute. - value: - [ - { - "sku": "red-pants", - "source": { "locale": "en" }, - "name": "Red pants - discounts!", - "metaTags": { "title": "Updated - Red" }, - "attributes": - [ - { - "code": "cost", - "values": ["10.5"] - }, - { - "code": "states", - "values": ["TX", "CA", "NM"] - } - ] - } - ] - UnassignProductVariant: - summary: Unassign product variant `pants-red-32` from configurable product `pants` - description: | - To unassign product variant `pants-red-32` from configurable product `pants` you need: - * remove the `variantReferenceId` from the `attributes` field - * remove the `links` association - value: - [ - { - "sku": "pants-red-32", - "source": { "locale": "en" }, - "attributes": - [ - { - "code": "color", - "values": ["Red Pants"], - "variantReferenceId": null - }, - { - "code": "size", - "values": ["32"], - "variantReferenceId": null - } - ], - "links": [] - } - ] - AddNewAccessoryItem: - summary: Add a new item `gloves` to the accessories group of the bundle product `bundle-outfit` - description: | - To add a new item `gloves` to the accessories group of the bundle product `bundle-outfit`, include the new item in the `items` array of the `accessories` group. - Note that simple product `gloves` must be created separately using the create product API. - value: - [ - { - "sku": "bundle-outfit", - "source": { "locale": "en" }, - "bundles": - [ - { - "group": "tops", - "required": true, - "multiSelect": false, - "defaultItemSkus": ["top-red"], - "items": - [ - { - "sku": "top-red", - "qty": 1, - "userDefinedQty": false - }, - { - "sku": "top-blue", - "qty": 1, - "userDefinedQty": false - } - ] - }, - { - "group": "bottoms", - "required": true, - "multiSelect": false, - "defaultItemSkus": ["bottom-black"], - "items": - [ - { - "sku": "bottom-black", - "qty": 1, - "userDefinedQty": false - }, - { - "sku": "bottom-white", - "qty": 1, - "userDefinedQty": false - } - ] - }, - { - "group": "accessories", - "required": false, - "multiSelect": true, - "items": - [ - { - "sku": "socks", - "qty": 1, - "userDefinedQty": true - }, - { - "sku": "headband", - "qty": 1, - "userDefinedQty": true - }, - { - "sku": "gloves", - "qty": 1, - "userDefinedQty": true - } - ] - } - ] - } - ] - /v1/catalog/products/delete: - post: - tags: - - Products - summary: Delete products - description: > - Delete products with specified `sku`` and `source`` values - operationId: deleteProducts - parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" - responses: - "200": - $ref: "#/components/responses/AcceptedResponse" - "400": - $ref: "#/components/responses/InvalidItemsResponse" - "401": - $ref: "#/components/responses/UnauthorizedResponse" - "403": - $ref: "#/components/responses/ForbiddenResponse" - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedProductDelete" - examples: - DeleteSimpleProduct: - summary: Delete product - description: > - Delete a simple product with specified `sku` and `source` values - value: - [ - { - "sku": "red-pants", - "source": { "locale": "en" } - } - ] - /v1/catalog/price-books: - post: - tags: - - Price Books - summary: Create price books - description: | - Create or replace existing price books. - - Use the [update price books operation](#operation/updatePriceBooks) to modify values for existing price books. - - Note: After you assign a `parentId` to a price book, you cannot change the parentId value using the update operation. If you want to define a different parent-child relationship, delete the child price book and create a new one with the desired parent-child relationship. - operationId: createPriceBooks - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPricebook" - examples: - FeedWithPricebookInformation: - summary: Create a base price book with child price books - description: Create a base price book and two child price books. The base price book specifies the `USD` currency for the parent and child price books. - value: - [ - { - "priceBookId": "us", - "name": "Dealer North price book name", - "currency": "USD" - }, { - "priceBookId": "dealer-north", - "parentId": "us", - "name": "Dealer North price book" - }, { - "priceBookId": "dealer-west", - "parentId": "us", - "name": "Dealer West price book" - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - patch: - tags: - - Price Books - summary: Update price books - description: |- - Change the name of a base or child price book, or change the currency assigned to the base price book. - When you submit the update request for a child price book, include the correct `parentId`. If the request includes a different `parentId`, the value is ignored. - operationId: updatePriceBooks - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPricebook" - examples: - FeedWithPriceBookInformation: - summary: Update existing price books - description: Update the name of child price book, "dealer-north" - value: - [ - { - "priceBookId": "dealer-north", - "parentId": "us", - "name": "North dealership" - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the `invalidFeedItems` node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - /v1/catalog/price-books/delete: - post: - tags: - - Price Books - summary: Delete price books - description: | - When you delete a price book, all its child price books and all prices assigned to the `priceBookId` and its children are also deleted. - - If a price book is deleted by mistake, you have up to one week to restore the deleted price books and their associated prices. Restoring is done by recreating the top-level parent price book that was deleted, using the same payload submitted in the original create price book request. The state of the price books and prices are restored to the status and price values assigned when the price book was deleted. - operationId: deletePriceBooks - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPricebookDelete" - examples: - DeleteExistingPricebook: - summary: Delete price book "dealer-north" - description: Delete the "dealer-north" price book. All prices assigned to this price book are also deleted. - value: [{ "priceBookId": "dealer-north" }] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - - /v1/catalog/products/prices: - post: - tags: - - Prices - summary: Create prices - description: | - Create or replace existing product prices. - -

Configurable Products

- Because configurable product price is calculated based on the price of the selected product variant, you don't need to send price - data for configurable product skus. Sending price data for these skus can cause incorrect price calculations. - - operationId: createPrices - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPrices" - examples: - FeedWithNewProductPrice: - summary: Add product price information - description: Add product price information to the catalog data. - value: - [ - { - "sku": "red-pants", - "priceBookId": "us", - "regular": 20 - }, - { - "sku": "red-pants", - "priceBookId": "dealer-north", - "regular": 19.9, - "discounts": [ - { - "code": "discount", - "percentage": 10 - } - ] - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - patch: - tags: - - Prices - summary: Update prices - description: | - Change existing product prices - When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. - operationId: updatePrices - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPricesUpdate" - examples: - FeedWithProductPricesInformation: - summary: Product prices update - description: Update existing product prices for the given SKU ("red-pants") and price book id ("dealer-north"). - value: - [ - { - "sku": "red-pants", - "priceBookId": "dealer-north", - "discounts": [ - { "code": "discount", - "percentage": 30 - } - ] - } - ] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: | - Request rejected. Some of the received items are invalid. - Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - /v1/catalog/products/prices/delete: - post: - tags: - - Prices - summary: Delete prices - description: > - Delete existing product prices - operationId: deletePrices - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - requestBody: - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/FeedPricesDelete" - examples: - FeedWithProductPricesInformation: - summary: Delete product prices - description: > - Delete the existing product prices information - value: [{ "sku": "red-pants", "priceBookId": "dealer-north" }] - responses: - "200": - description: All items in the request are accepted for further processing. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - "400": - description: Request rejected. Some of the received items are invalid. Check the "invalidFeedItems" node for specific errors. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - "401": - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - "403": - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - "429": - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - content: - text/html;charset=UTF-8: - schema: - $ref: "#/components/schemas/429Response" - -components: - securitySchemes: - apiKeyAuth: - type: apiKey - in: header - name: x-api-key - description: API key for authentication - bearerAuth: - type: http - scheme: bearer - description: Bearer token for authorization - imsOrgAuth: - type: apiKey - in: header - name: x-gw-ims-org-id - description: Adobe IMS organization ID - responses: - AcceptedResponse: - description: All items accepted and will be processed asynchronously - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/ProcessFeedResponse" - InvalidItemsResponse: - description: One or all received items are invalid. Check the "invalidFeedItems" node for details - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/400ProcessFeedResponse" - UnauthorizedResponse: - description: Unauthorized request. Verify that the Bearer token provided in the `Authorization` header is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/401Response" - ForbiddenResponse: - description: Forbidden request. Verify that the `Authorization` header is present, and that the Bearer token is still valid. - content: - application/json;charset=UTF-8: - schema: - $ref: "#/components/schemas/403Response" - parameters: - ContentType: - name: Content-Type - in: header - required: true - schema: - type: string - enum: [application/json] - - ContentEncoding: - name: Content-Encoding - in: header - required: false - schema: - type: string - enum: [gzip] - description: Use this header if the payload is compressed with gzip. - - schemas: - FeedItemFailedValidationResult: - title: FeedItemFailedValidationResult - type: object - properties: - code: - type: string - description: Code name of invalid field. - itemIndex: - type: integer - format: int32 - description: Reference to the line item with an invalid payload. The line count begins at 0. - message: - type: string - description: Error description - value: - type: string - description: Original value passed in the request. - FeedMetadata: - title: FeedMetadata - description: Metadata information for a product attribute. - required: - - code - - source - - label - - dataType - type: object - properties: - code: - type: string - description: Attribute code - source: - $ref: "#/components/schemas/Source" - visibleIn: - type: array - description: | - Determines how the attribute is used on the storefront. - * `PRODUCT_DETAIL`: Product attribute is visible on the Product Detail Page. - * `PRODUCT_LISTING`: Product attribute is visible on Product Listing Page. - * `SEARCH_RESULTS`: Product attribute is visible on Search Results Page. - * `PRODUCT_COMPARE`: Product attribute is visible on Product Compare Page. - items: - enum: - - PRODUCT_DETAIL - - PRODUCT_LISTING - - SEARCH_RESULTS - - PRODUCT_COMPARE - label: - type: string - description: Label for the attribute that is displayed in user interfaces. - example: Attribute Name - dataType: - type: string - description: Data type - example: TEXT - enum: - - TEXT - - DECIMAL - - INTEGER - - BOOLEAN - filterable: - type: boolean - description: Indicates whether the attribute can be used to filter products. - example: true - sortable: - type: boolean - description: Indicates whether the attribute can be used to sort products. - example: true - searchable: - type: boolean - description: Indicates whether the attribute value can be used in search queries to filter results. - example: true - searchWeight: - type: number - description: | - The weight associated with a searchable attribute. - Attributes with a greater weight are returned before attributes with a lower weight. - format: float - searchTypes: - type: array - description: > - Search types associated with this attribute, for example: `autocomplete`, `starts_with`, and so on. - items: - type: string - enum: - - AUTOCOMPLETE - - CONTAINS - - STARTS_WITH - FeedMetadataUpdate: - title: FeedMetadataUpdate - description: Metadata information for a product attribute. - required: - - code - - source - type: object - properties: - code: - type: string - description: Attribute code - source: - $ref: "#/components/schemas/Source" - visibleIn: - type: array - description: | - Determines how the attribute is used on the storefront. - * `PRODUCT_DETAIL`: Product attribute is visible on the Product Detail Page. - * `PRODUCT_LISTING`: Product attribute is visible on Product Listing Page. - * `SEARCH_RESULTS`: Product attribute is visible on Search Results Page. - * `PRODUCT_COMPARE`: Product attribute is visible on Product Compare Page. - items: - enum: - - PRODUCT_DETAIL - - PRODUCT_LISTING - - SEARCH_RESULTS - - PRODUCT_COMPARE - label: - type: string - description: Label for the attribute that is displayed in user interfaces. - example: Attribute Name - dataType: - type: string - description: Data type - example: TEXT - enum: - - TEXT - - DECIMAL - - INTEGER - - BOOLEAN - filterable: - type: boolean - description: Indicates whether the attribute can be used to filter products. - example: true - sortable: - type: boolean - description: Indicates whether the attribute can be used to sort products. - example: true - searchable: - type: boolean - description: Indicates whether the attribute value can be used in search queries to filter results. - example: true - searchWeight: - type: number - description: | - The weight associated with a searchable attribute. - Attributes with a greater weight are returned before attributes with a lower weight. - format: float - searchTypes: - type: array - description: > - Search types associated with this attribute, for example: `autocomplete`, `starts_with`, and so on. - items: - type: string - enum: - - AUTOCOMPLETE - - CONTAINS - - STARTS_WITH - FeedMetadataDelete: - title: Delete metadata attribute - description: Delete metadata information for a product attribute. - required: - - code - - source - type: object - properties: - code: - type: string - description: Attribute code - source: - $ref: "#/components/schemas/Source" - FeedProduct: - title: Catalog Product payload - type: object - required: - - sku - - source - - name - - slug - - status - properties: - sku: - type: string - description: SKU (Stock Keeping Unit) is a unique identifier for a product. - example: MH01 - source: - $ref: "#/components/schemas/Source" - name: - type: string - description: Product name - example: Kangaroo Hoodie - slug: - type: string - description: The URL key for the product. - example: kangaroo-hoodie.html - description: - type: string - nullable: true - description: The main description for the product - example: A kangaroo hoodie for all seasons - shortDescription: - type: string - nullable: true - description: A short description of the product - example: A hoodie for all seasons with a kangaroo pocket - status: - type: string - description: | - Indicates whether the product is visible on the storefront. - The value is "Enabled" if it is visible, and "Disabled" if it is not visible. - example: ENABLED - enum: - - ENABLED - - DISABLED - visibleIn: - type: array - description: | - Storefront area where the product is visible. An empty list means that it is not visible as a stand alone product. - * `CATALOG`: Product is visible on Product Listing Page and Product Detail Page. - * `SEARCH`: Product is visible on Search Results Page and Product Detail Page. - example: [CATALOG] - items: - enum: - - CATALOG - - SEARCH - metaTags: - $ref: "#/components/schemas/ProductMetaAttribute" - attributes: - type: array - description: A list of product attributes. - items: - $ref: "#/components/schemas/ProductAttribute" - images: - type: array - description: A list of product images. - items: - $ref: "#/components/schemas/ProductImage" - links: - type: array - description: A list of linked SKUs. - items: - $ref: "#/components/schemas/ProductLink" - routes: - type: array - description: A list of product routes. - items: - $ref: "#/components/schemas/ProductRoutes" - configurations: - type: array - description: Composite products, such as configurable products, must provide a list of product options that a shopper can select (for example, "color", "size", etc.). - items: - $ref: "#/components/schemas/ProductConfiguration" - bundles: - type: array - description: Composite products, such as bundle products, must include a list of individual products that are part of the bundle, organized into groups (for example, "shirts", "pants", "accessories"). - items: - $ref: "#/components/schemas/ProductBundle" - externalIds: - type: array - description: A list of external IDs for the product. - items: - $ref: "#/components/schemas/ProductExternalId" - FeedProductUpdate: - title: Catalog Product payload - type: object - required: - - sku - - source - properties: - sku: - type: string - description: SKU (Stock Keeping Unit) is a unique identifier for a product. - example: MH01 - source: - $ref: "#/components/schemas/Source" - name: - type: string - description: Product name - example: Kangaroo Hoodie - slug: - type: string - description: The URL key for the product. - example: kangaroo-hoodie.html - description: - type: string - nullable: true - description: The main description for the product - example: A kangaroo hoodie for all seasons - shortDescription: - type: string - nullable: true - description: A short description of the product - example: A hoodie for all seasons with a kangaroo pocket - status: - type: string - description: | - Indicates whether the product is visible on the storefront. - The value is "Enabled" if it is visible, and "Disabled" if it is not visible. - example: ENABLED - enum: - - ENABLED - - DISABLED - visibleIn: - type: array - description: | - Storefront area where the product is visible. An empty list means that it is not visible as a stand alone product. - * `CATALOG`: Product is visible on Product Listing Page and Product Detail Page. - * `SEARCH`: Product is visible on Search Results Page and Product Detail Page. - example: [CATALOG] - items: - enum: - - CATALOG - - SEARCH - metaTags: - $ref: "#/components/schemas/ProductMetaAttribute" - attributes: - type: array - description: A list of product attributes. - items: - $ref: "#/components/schemas/ProductAttribute" - images: - type: array - description: A list of product images. - items: - $ref: "#/components/schemas/ProductImage" - links: - type: array - description: | - A list of linked SKUs. For product variants, this is a required field that establishes a link between a product variant and the corresponding configurable product. - `VARIANT_OF` link type must be specified to establish a connection to the configurable product SKU. - items: - $ref: "#/components/schemas/ProductLink" - routes: - type: array - description: A list of product routes. - items: - $ref: "#/components/schemas/ProductRoutes" - configurations: - type: array - description: Composite products, such as configurable products, must provide a list of product options that a shopper can select (for example, "color", "size", etc.). - items: - $ref: "#/components/schemas/ProductConfiguration" - bundles: - type: array - description: Composite products, such as bundle products, must include a list of individual products that are part of the bundle, organized into groups (for example, "shirts", "pants", "accessories"). - items: - $ref: "#/components/schemas/ProductBundle" - externalIds: - type: array - description: A list of external IDs for the product. - items: - $ref: "#/components/schemas/ProductExternalId" - FeedProductDelete: - title: Catalog Product delete payload - type: object - required: - - sku - - source - properties: - sku: - type: string - description: Product unique identifier - example: MH01 - source: - $ref: "#/components/schemas/Source" - FeedPricebook: - title: FeedPricebook - description: Price book information - oneOf: - - $ref: '#/components/schemas/PriceBookBase' - - $ref: '#/components/schemas/PriceBookChild' - PriceBookBase: - title: Base price book - type: object - required: [priceBookId, name, currency] - properties: - priceBookId: - type: string - description: Base price book id - minLength: 1 - maxLength: 64 - name: - type: string - description: Price book name - minLength: 1 - currency: - type: string - description: Price book currency - minLength: 1 - maxLength: 5 - PriceBookChild: - title: Child price book - type: object - required: [priceBookId, name, parentId] - properties: - priceBookId: - type: string - description: Child price book id - minLength: 1 - maxLength: 64 - name: - type: string - description: Price book name - minLength: 1 - parentId: - type: string - description: Base price book id - minLength: 1 - maxLength: 64 - FeedPricebookDelete: - title: FeedPricebookDelete - description: Price book information - required: - - priceBookId - type: object - properties: - priceBookId: - type: string - description: Price book id - FeedPrices: - title: FeedPrices - description: Product price information. - required: - - sku - - priceBookId - - regular - type: object - properties: - sku: - type: string - description: Product SKU - priceBookId: - type: string - description: Price book id - regular: - type: number - format: float - description: Regular price - discounts: - type: array - description: Active discounts - items: - anyOf: - - $ref: "#/components/schemas/DiscountsFinalPrice" - - $ref: "#/components/schemas/DiscountsPercentage" - FeedPricesUpdate: - title: FeedPrices - description: Product price information. - required: - - sku - - priceBookId - type: object - properties: - sku: - type: string - description: Product SKU - priceBookId: - type: string - description: Price book id - regular: - type: number - format: float - description: Regular price - discounts: - type: array - description: Active discounts - items: - anyOf: - - $ref: "#/components/schemas/DiscountsFinalPrice" - - $ref: "#/components/schemas/DiscountsPercentage" - FeedPricesDelete: - title: FeedPricesDelete - description: Delete product price information. - required: - - sku - - priceBookId - type: object - properties: - sku: - type: string - description: Product SKU - priceBookId: - type: string - description: Price book id - DiscountsFinalPrice: - title: Final Price - type: object - required: - - code - - price - properties: - code: - type: string - price: - type: number - format: float - DiscountsPercentage: - title: Discount - type: object - required: - - code - - percentage - properties: - code: - type: string - percentage: - type: number - format: float - Source: - title: Catalog source - description: Source of the entity. For example it's locale "English" - type: object - required: - - locale - properties: - locale: - type: string - description: A single value that represents content locale, for example, English. - example: English - ProductMetaAttribute: - title: Meta Attributes - description: Meta attributes that are specified in tags. - type: object - properties: - title: - type: string - description: A meta title - keywords: - type: array - description: A meta keywords - items: - type: string - description: - type: string - description: A meta description - ProductAttribute: - title: Product Attribute - type: object - required: - - code - - values - properties: - code: - type: string - description: Product Attribute Code -# DCAT-2461: -# type: -# enum: -# - BOOLEAN -# - NUMBER -# - STRING -# - ARRAY -# - OBJECT -# description: | -# Type of attribute value to be applied during the rendering phase. Validation occurs only when the code is rendered. Invalid values are ignored. -# - `BOOLEAN`: Accept single value: "true" or false -# - `NUMBER`: Accept single number,e.g. "85", "0.42", etc. -# - `STRING`: Accept single string,e.g. "Great day, yall!" -# - `ARRAY`: Accept list of strings ,e.g. ["red", "green", "blue"] -# - `OBJECT`: Accept JSON object `"{"name": "swatch", "color": "red"}"` - values: - type: array - description: A list of value(s) associated with a specified attribute code. - items: - type: string - variantReferenceId: - type: string - nullable: true - description: | - The variant reference ID establishes a link between a product variant and the corresponding - [Option Value ID](#operation/createProducts!path=options/values/id&t=request) in a configurable product. - - A variant reference ID can be specified only for a product that represents a variant of a configurable product. - ProductRoutes: - title: Routes - type: object - required: - - path - properties: - path: - type: string - description: URL path - position: - type: integer - description: Position of a product in the URL path. The default value is 0. - format: int32 - ProductImage: - title: Product Image - type: object - required: - - url - properties: - url: - type: string - description: Media resource URL - label: - type: string - description: Media resource label - roles: - type: array - description: | - Roles associated with this image that determine how the image is used on the storefront. - - `BASE`: Product image is visible as a main image on the Product Detail Page. - - `SMALL`: Product image is visible as a main image on the Category or search result page or other product listing pages. - - `THUMBNAIL`: Thumbnail images appear in the thumbnail gallery, shopping cart, etc. - - `SWATCH`: A swatch can be used to illustrate the color, pattern, or texture. - items: - enum: - - BASE - - SMALL - - THUMBNAIL - - SWATCH - customRoles: - type: array - description: > - Custom image role. Merchants can define custom roles in addition to the predefined values. - items: - type: string - ProductConfiguration: - title: Configurations - type: object - required: - - attributeCode - - type - - values - properties: - attributeCode: - type: string - description: | - Product option attribute code. For `CONFIGURABLE` or `SWATCH` option types, this ID must match the - ["attribute code"](#operation/createProducts!path=attributes/code&t=request) - used for the configurable product (for example, "color"). - label: - type: string - description: Option label - defaultVariantReferenceId: - type: string - description: Specifies the pre-selected value variant reference id of the current option. - nullable: true - type: - type: string - enum: - - CONFIGURABLE - - SWATCH - description: | - Option type. Indicates the product type the option can be assigned to. - - `CONFIGURABLE`: Configurable product option - - `SWATCH`: Swatch product option. Must be used for color or text swatches attributes - values: - type: array - description: A list of option values. Defines option values available to shoppers (for example, "red" color or "large" size). - items: - $ref: "#/components/schemas/ProductOptionValue" - ProductOptionValue: - title: ProductOptionValue - type: object - required: - - variantReferenceId - properties: - variantReferenceId: - type: string - description: | - Option value ID. - For `CONFIGURABLE` or `SWATCH` option types, this ID must match the ["variantReferenceId"](#operation/createProducts!path=attributes/variantReferenceId&t=request) - defined in the product variant. - label: - type: string - description: Option value label - colorHex: - type: string - description: A hex representation of the color of the option value. Can be used for option with a SWATCH type. - imageUrl: - type: string - description: Image URL of the option value. Can be used for option with a SWATCH type. - ProductBundle: - title: Bundles - type: object - required: - - group - - items - properties: - group: - type: string - description: | - Name of the group that organizes the bundle items. - This helps in categorizing the items within the bundle for better organization. - For example, groups can be "shirts", "pants", "accessories", etc. - required: - type: boolean - description: Indicates whether a shopper is required to select any products from this group to add the bundle to the shopping cart. - example: false - multiSelect: - type: boolean - description: Indicates whether multiple products can be selected by a shopper. - example: false - defaultItemSkus: - type: array - description: A list of default product SKUs that are selected in this bundle group. - items: - type: string - items: - type: array - description: | - A list of individual products that are part of the bundle. - Each item in the list represents a product that can be selected as part of the bundle. - items: - $ref: "#/components/schemas/ProductBundleItem" - ProductExternalId: - title: External Ids - type: object - required: - - id - - origin - properties: - id: - type: string - description: External ID of the product. - origin: - type: string - description: External ID origin. Specifies the system that generated the external ID, such as Adobe Commerce, Google Product Ratings, etc. - ProductBundleItem: - title: ProductBundleItem - type: object - required: - - sku - properties: - sku: - type: string - description: Product SKU of the bundle item. - qty: - type: number - description: Quantity of the item in the bundle. - format: float - userDefinedQty: - type: boolean - description: Indicates whether the quantity of the item in the bundle can be defined by a shopper. - example: false - ProductLink: - title: Links - required: - - type - - sku - type: object - properties: - type: - type: string - description: | - Product link type. Merchants can define custom types in addition to the predefined values. - - `VARIANT_OF` link type must be specified to establish a connection to the configurable product SKU. - - `IN_BUNDLE` link type must be specified to establish a connection to the bundle product SKU. - sku: - type: string - description: Product SKU - description: Product association - ItemFailedValidationResult: - title: ItemFailedValidationResult - type: object - properties: - code: - type: string - description: Code for the validation error. - itemIndex: - type: integer - description: Index of the conflicting item - format: int32 - message: - type: string - description: Validation error message for the item. - value: - type: string - description: The value supplied to the API. - ProcessFeedResponse: - title: Response payload - type: object - properties: - status: - type: string - description: Request status. - default: ACCEPTED - acceptedCount: - type: integer - description: The number of received and accepted items. - format: int32 - example: { "status": "ACCEPTED", "acceptedCount": 4 } - 400ProcessFeedResponse: - title: Response payload - type: object - properties: - status: - type: string - description: Request status. - default: FAILED - message: - type: string - description: Error summary. - errors: - type: array - description: List of items that did not pass validation. Fix the payload for invalid items before resubmitting the request. - items: - $ref: "#/components/schemas/FeedItemFailedValidationResult" - example: - { - "status": "FAILED", - "message": "Items validation failed for 2 items", - "errors": - [ - { - "itemIndex": 0, - "code": "status", - "message": 'status: does not have a value in the enumeration ["ENABLED", "DISABLED"]', - "value": "active" - }, - { - "itemIndex": 1, - "code": "source", - "message": "required property 'source' not found", - "value": "" - } - ] - } - 401Response: - title: 401 Unauthorized - type: object - properties: - title: - type: string - description: Error title - status: - type: string - description: Error status code - error_code: - type: string - description: Error code - message: - type: string - description: Error message - example: - { - "title": "ErrInvalidOauthToken", - "status": "401", - "error_code": "401013", - "message": "Oauth token is not valid" - } - 403Response: - title: 403 Forbidden - type: object - properties: - title: - type: string - description: Error title - status: - type: string - description: Error status code - error_code: - type: string - description: Error code - message: - type: string - description: Error message - example: - { - "title": "ErrMissingOauthToken", - "status": "403", - "error_code": "403010", - "message": "Oauth token is missing" - } - 429Response: - title: 429 Too Many Requests - description: | - Too many requests. Indicates that a client has exceeded the rate limit of 300 requests per minute. - Check the `retry-after` header to get the time (in seconds) to wait before sending the next request. - type: string \ No newline at end of file diff --git a/src/openapi/README.md b/static/rest/README.md similarity index 100% rename from src/openapi/README.md rename to static/rest/README.md From 3686ac97da67ae0e345e09c10ab160a9e9ef3112 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 28 Jul 2025 15:23:39 -0500 Subject: [PATCH 08/48] added stage project template ID for testing --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index a7aeeb78..858b2ab0 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -6,7 +6,7 @@ const GetCredentialOAuthS2s = () => { return ( - + From 58c908bcf29730ef2939707e1e870af751037f2c Mon Sep 17 00:00:00 2001 From: Margaret Eker Date: Fri, 1 Aug 2025 14:52:13 -0500 Subject: [PATCH 09/48] Delete src/pages/optimizer/data-ingestion/api-reference.md Remove unneeded file. Data Ingestion API reference is pulled --- src/pages/optimizer/data-ingestion/api-reference.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/pages/optimizer/data-ingestion/api-reference.md diff --git a/src/pages/optimizer/data-ingestion/api-reference.md b/src/pages/optimizer/data-ingestion/api-reference.md deleted file mode 100644 index d663c07d..00000000 --- a/src/pages/optimizer/data-ingestion/api-reference.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Data Ingestion API Reference (REST) -description: Learn about the Data Ingestion Rest API for Adobe Commerce Optimizer. -layout: none ---- - -# API Reference - - From a8bd9f0a6484afa8f7d4a70702638b05e5586360 Mon Sep 17 00:00:00 2001 From: Margaret Eker Date: Fri, 1 Aug 2025 16:14:49 -0500 Subject: [PATCH 10/48] Delete src/pages/optimizer/merchandising-services/api-reference.md Remove obsolete file. --- .../optimizer/merchandising-services/api-reference.md | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/pages/optimizer/merchandising-services/api-reference.md diff --git a/src/pages/optimizer/merchandising-services/api-reference.md b/src/pages/optimizer/merchandising-services/api-reference.md deleted file mode 100644 index b1a467d9..00000000 --- a/src/pages/optimizer/merchandising-services/api-reference.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Merchandising API Reference -edition: saas -description: Get information about the storefront APIs to retrieve product and catalog data to create storefront experiences. -keywords: - - GraphQL - - Services - - Search - - Recommendations -frameSrc: /graphql-api/merchandising-api/index.html ---- From ed4a06caa93929162bea807b6407d0b653f27027 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 13:28:35 -0500 Subject: [PATCH 11/48] remove unnecessary heading --- src/pages/reference/rest/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pages/reference/rest/index.md b/src/pages/reference/rest/index.md index 40bdad9b..c780adc4 100644 --- a/src/pages/reference/rest/index.md +++ b/src/pages/reference/rest/index.md @@ -13,6 +13,4 @@ import GetCredentialOAuthS2s from '/src/pages/credential/GetCredentialOAuthS2s.j -# API Reference - From 769963d34be30df1fa4ddbcb2ad17a34956727be Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 13:40:38 -0500 Subject: [PATCH 12/48] initial attempt at guidance for retrieving tenant ID --- src/pages/credential/GetCredentialOAuthS2s.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 858b2ab0..d0377b91 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -29,6 +29,9 @@ const GetCredentialOAuthS2s = () => {

This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

+

+ This credential does not automatically return the tenant ID for your sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field. +

From b2daceaa52d550fbaa6793921c66ab950bb56ff5 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 14:16:56 -0500 Subject: [PATCH 13/48] refine help message for finding tenant ID --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index d0377b91..81b151fb 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -30,7 +30,7 @@ const GetCredentialOAuthS2s = () => { This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

- This credential does not automatically return the tenant ID for your sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field. + This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Adobe Commerce Optimizer Developer Guide for help finding your tenant ID.

From 8f64dc6573c14add6ea17a8e7f2fac3d9e74a30a Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 14:17:04 -0500 Subject: [PATCH 14/48] remove server description --- static/rest/data-ingestion-schema-v1.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index ed2b91be..5943e459 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -20,11 +20,10 @@ security: - imsOrgAuth: [] servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} - description: Production endpoint. The tenantId value is the identifier of the Adobe Commerce instance. See [Adobe Commerce Cloud Manager](https://experience.adobe.com/#/commerce/cloud-service/instances) to see your available instances. variables: tenantId: description: The identifier of the Adobe Commerce instance - default: your-tenant-id + default: (string) tags: - name: Metadata From 7b05fe1515ba40a868a95ba6be3ebbad7cd6039c Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 14:43:04 -0500 Subject: [PATCH 15/48] add styling to tenant ID help --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- static/rest/data-ingestion-schema-v1.yaml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 81b151fb..1d49b8a7 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -29,7 +29,7 @@ const GetCredentialOAuthS2s = () => {

This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

-

+

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Adobe Commerce Optimizer Developer Guide for help finding your tenant ID.

diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 5943e459..48b6d5df 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -22,8 +22,7 @@ servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} variables: tenantId: - description: The identifier of the Adobe Commerce instance - default: (string) + default: string tags: - name: Metadata From c70576d44a88bd87ca3881e61d8f95877e523090 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 15:17:36 -0500 Subject: [PATCH 16/48] replaced securitySchemes w/ parameters for better UX --- static/rest/data-ingestion-schema-v1.yaml | 73 +++++++++++++++++------ 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 48b6d5df..42862f83 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -14,10 +14,6 @@ info: - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 -security: - - apiKeyAuth: [] - - bearerAuth: [] - - imsOrgAuth: [] servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} variables: @@ -191,6 +187,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -307,6 +306,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -357,6 +359,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -490,6 +495,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -894,6 +902,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1058,6 +1069,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1152,6 +1166,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1195,6 +1212,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1260,6 +1280,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1415,6 +1438,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1482,6 +1508,9 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/x-api-key" + - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1508,21 +1537,6 @@ paths: value: [{ "sku": "red-pants", "priceBookId": "dealer-north" }] components: - securitySchemes: - apiKeyAuth: - type: apiKey - in: header - name: x-api-key - description: API key for authentication - bearerAuth: - type: http - scheme: bearer - description: Bearer token for authorization - imsOrgAuth: - type: apiKey - in: header - name: x-gw-ims-org-id - description: Adobe IMS organization ID responses: AcceptedResponse: x-summary: All items accepted @@ -1575,6 +1589,27 @@ components: schema: $ref: "#/components/schemas/429Response" parameters: + authorization: + name: Authorization (Bearer) + in: header + required: true + schema: + type: string + + x-api-key: + name: x-api-key + in: header + required: true + schema: + type: string + + x-gw-ims-org-id: + name: x-gw-ims-org-id + in: header + required: true + schema: + type: string + ContentType: name: Content-Type in: header From 0800f799e070ee74c9891c7b8c4d45833413e8f2 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 15:51:52 -0500 Subject: [PATCH 17/48] Revert "replaced securitySchemes w/ parameters for better UX" This reverts commit c70576d44a88bd87ca3881e61d8f95877e523090. --- static/rest/data-ingestion-schema-v1.yaml | 73 ++++++----------------- 1 file changed, 19 insertions(+), 54 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 42862f83..48b6d5df 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -14,6 +14,10 @@ info: - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 +security: + - apiKeyAuth: [] + - bearerAuth: [] + - imsOrgAuth: [] servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} variables: @@ -187,9 +191,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -306,9 +307,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -359,9 +357,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -495,9 +490,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -902,9 +894,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1069,9 +1058,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1166,9 +1152,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1212,9 +1195,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1280,9 +1260,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1438,9 +1415,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1508,9 +1482,6 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" - - $ref: "#/components/parameters/authorization" - - $ref: "#/components/parameters/x-api-key" - - $ref: "#/components/parameters/x-gw-ims-org-id" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1537,6 +1508,21 @@ paths: value: [{ "sku": "red-pants", "priceBookId": "dealer-north" }] components: + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: x-api-key + description: API key for authentication + bearerAuth: + type: http + scheme: bearer + description: Bearer token for authorization + imsOrgAuth: + type: apiKey + in: header + name: x-gw-ims-org-id + description: Adobe IMS organization ID responses: AcceptedResponse: x-summary: All items accepted @@ -1589,27 +1575,6 @@ components: schema: $ref: "#/components/schemas/429Response" parameters: - authorization: - name: Authorization (Bearer) - in: header - required: true - schema: - type: string - - x-api-key: - name: x-api-key - in: header - required: true - schema: - type: string - - x-gw-ims-org-id: - name: x-gw-ims-org-id - in: header - required: true - schema: - type: string - ContentType: name: Content-Type in: header From 4dd1cef51e3839cde4262722065c2357c7f415be Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 16:44:47 -0500 Subject: [PATCH 18/48] change target server to stage --- static/rest/data-ingestion-schema-v1.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 48b6d5df..a005f565 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -19,7 +19,7 @@ security: - bearerAuth: [] - imsOrgAuth: [] servers: - - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} + - url: https://na1-stage.api.commerce.adobe.com/{tenantId} variables: tenantId: default: string From 7b4aa3c8b82e9cbf85ae07f006f34601c62cc9c2 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 18:01:59 -0500 Subject: [PATCH 19/48] separate bearer auth security from API key and IMS org ID parameters --- static/rest/data-ingestion-schema-v1.yaml | 53 ++++++++++++++++------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index a005f565..7d1976b0 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -15,15 +15,12 @@ info: - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 security: - - apiKeyAuth: [] - bearerAuth: [] - - imsOrgAuth: [] servers: - url: https://na1-stage.api.commerce.adobe.com/{tenantId} variables: tenantId: default: string - tags: - name: Metadata description: | @@ -191,6 +188,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -307,6 +306,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -357,6 +358,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -490,6 +493,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -894,6 +899,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1058,6 +1065,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1103,6 +1112,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1152,6 +1163,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1195,6 +1208,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1260,6 +1275,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1415,6 +1432,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1482,6 +1501,8 @@ paths: parameters: - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/ApiKey" + - $ref: "#/components/parameters/ImsOrgId" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1509,20 +1530,10 @@ paths: components: securitySchemes: - apiKeyAuth: - type: apiKey - in: header - name: x-api-key - description: API key for authentication bearerAuth: type: http scheme: bearer description: Bearer token for authorization - imsOrgAuth: - type: apiKey - in: header - name: x-gw-ims-org-id - description: Adobe IMS organization ID responses: AcceptedResponse: x-summary: All items accepted @@ -1575,6 +1586,20 @@ components: schema: $ref: "#/components/schemas/429Response" parameters: + ApiKey: + name: x-api-key + in: header + required: true + schema: + type: string + description: API key for authorization + ImsOrgId: + name: x-gw-ims-org-id + in: header + required: true + schema: + type: string + description: Adobe IMS organization ID ContentType: name: Content-Type in: header @@ -1582,7 +1607,6 @@ components: schema: type: string enum: [application/json] - ContentEncoding: name: Content-Encoding in: header @@ -1591,7 +1615,6 @@ components: type: string enum: [gzip] description: Use this header if the payload is compressed with gzip. - schemas: FeedItemFailedValidationResult: title: FeedItemFailedValidationResult From 19395dd2509cec728aad49e5f2a69e3da70f5564 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 18:47:00 -0500 Subject: [PATCH 20/48] replace security scheme with parameters again --- static/rest/data-ingestion-schema-v1.yaml | 73 +++++++++++++---------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 7d1976b0..e0b570f5 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -14,8 +14,6 @@ info: - [Price books](#tag/Price-Books)—define and manage pricing scopes for different customer tiers and markets. - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 -security: - - bearerAuth: [] servers: - url: https://na1-stage.api.commerce.adobe.com/{tenantId} variables: @@ -186,10 +184,11 @@ paths: operationId: createProductMetadata parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -304,10 +303,11 @@ paths: When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. operationId: updateProductMetadata parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -356,10 +356,11 @@ paths: description: Remove product attribute metadata resources from the catalog data. operationId: deleteProductMetadata parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -491,10 +492,11 @@ paths: * Use the [Delete products API](#operation/deleteProducts) to remove items from the bundle operationId: createProducts parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -897,10 +899,11 @@ paths: The replace strategy is used to apply changes for fields in an `array`. operationId: updateProducts parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1063,10 +1066,11 @@ paths: Delete products with specified `sku`` and `source`` values operationId: deleteProducts parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1110,10 +1114,11 @@ paths: Note: After you assign a `parentId` to a price book, you cannot change the parentId value using the update operation. If you want to define a different parent-child relationship, delete the child price book and create a new one with the desired parent-child relationship. operationId: createPriceBooks parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1161,10 +1166,11 @@ paths: When you submit the update request for a child price book, include the correct `parentId`. If the request includes a different `parentId`, the value is ignored. operationId: updatePriceBooks parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1206,10 +1212,11 @@ paths: If a price book is deleted by mistake, you have up to one week to restore the deleted price books and their associated prices. Restoring is done by recreating the top-level parent price book that was deleted, using the same payload submitted in the original create price book request. The state of the price books and prices are restored to the status and price values assigned when the price book was deleted. operationId: deletePriceBooks parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1273,10 +1280,11 @@ paths: operationId: createPrices parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1430,10 +1438,11 @@ paths: operationId: updatePrices parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1499,10 +1508,11 @@ paths: operationId: deletePrices parameters: - - $ref: "#/components/parameters/ContentType" - - $ref: "#/components/parameters/ContentEncoding" + - $ref: "#/components/parameters/authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" + - $ref: "#/components/parameters/ContentType" + - $ref: "#/components/parameters/ContentEncoding" responses: "200": $ref: "#/components/responses/AcceptedResponse" @@ -1529,11 +1539,6 @@ paths: value: [{ "sku": "red-pants", "priceBookId": "dealer-north" }] components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - description: Bearer token for authorization responses: AcceptedResponse: x-summary: All items accepted @@ -1586,6 +1591,12 @@ components: schema: $ref: "#/components/schemas/429Response" parameters: + authorization: + name: Authorization + in: header + required: true + schema: + type: string ApiKey: name: x-api-key in: header From d7491f0ede7c6723a46ae9db22af87b3d05cff74 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 18:48:51 -0500 Subject: [PATCH 21/48] fix: use consistent case --- static/rest/data-ingestion-schema-v1.yaml | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index e0b570f5..2492aff6 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -184,7 +184,7 @@ paths: operationId: createProductMetadata parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -303,7 +303,7 @@ paths: When the update is processed, the merge strategy is used to apply changes to `scalar` and `object` type fields. The replace strategy is used to apply changes for fields in an `array`. operationId: updateProductMetadata parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -356,7 +356,7 @@ paths: description: Remove product attribute metadata resources from the catalog data. operationId: deleteProductMetadata parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -492,7 +492,7 @@ paths: * Use the [Delete products API](#operation/deleteProducts) to remove items from the bundle operationId: createProducts parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -899,7 +899,7 @@ paths: The replace strategy is used to apply changes for fields in an `array`. operationId: updateProducts parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1066,7 +1066,7 @@ paths: Delete products with specified `sku`` and `source`` values operationId: deleteProducts parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1114,7 +1114,7 @@ paths: Note: After you assign a `parentId` to a price book, you cannot change the parentId value using the update operation. If you want to define a different parent-child relationship, delete the child price book and create a new one with the desired parent-child relationship. operationId: createPriceBooks parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1166,7 +1166,7 @@ paths: When you submit the update request for a child price book, include the correct `parentId`. If the request includes a different `parentId`, the value is ignored. operationId: updatePriceBooks parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1212,7 +1212,7 @@ paths: If a price book is deleted by mistake, you have up to one week to restore the deleted price books and their associated prices. Restoring is done by recreating the top-level parent price book that was deleted, using the same payload submitted in the original create price book request. The state of the price books and prices are restored to the status and price values assigned when the price book was deleted. operationId: deletePriceBooks parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1280,7 +1280,7 @@ paths: operationId: createPrices parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1438,7 +1438,7 @@ paths: operationId: updatePrices parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1508,7 +1508,7 @@ paths: operationId: deletePrices parameters: - - $ref: "#/components/parameters/authorization" + - $ref: "#/components/parameters/Authorization" - $ref: "#/components/parameters/ApiKey" - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" @@ -1591,7 +1591,7 @@ components: schema: $ref: "#/components/schemas/429Response" parameters: - authorization: + Authorization: name: Authorization in: header required: true From 440d8959adfc141bd3d3d808e2f099ef56f0b054 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Mon, 4 Aug 2025 19:38:19 -0500 Subject: [PATCH 22/48] removed api key and IMS org ID headers --- static/rest/data-ingestion-schema-v1.yaml | 38 ----------------------- 1 file changed, 38 deletions(-) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 2492aff6..1f7b5a5d 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -185,8 +185,6 @@ paths: operationId: createProductMetadata parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -304,8 +302,6 @@ paths: operationId: updateProductMetadata parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -357,8 +353,6 @@ paths: operationId: deleteProductMetadata parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -493,8 +487,6 @@ paths: operationId: createProducts parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -900,8 +892,6 @@ paths: operationId: updateProducts parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1067,8 +1057,6 @@ paths: operationId: deleteProducts parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1115,8 +1103,6 @@ paths: operationId: createPriceBooks parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1167,8 +1153,6 @@ paths: operationId: updatePriceBooks parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1213,8 +1197,6 @@ paths: operationId: deletePriceBooks parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1281,8 +1263,6 @@ paths: operationId: createPrices parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1439,8 +1419,6 @@ paths: operationId: updatePrices parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1509,8 +1487,6 @@ paths: operationId: deletePrices parameters: - $ref: "#/components/parameters/Authorization" - - $ref: "#/components/parameters/ApiKey" - - $ref: "#/components/parameters/ImsOrgId" - $ref: "#/components/parameters/ContentType" - $ref: "#/components/parameters/ContentEncoding" responses: @@ -1597,20 +1573,6 @@ components: required: true schema: type: string - ApiKey: - name: x-api-key - in: header - required: true - schema: - type: string - description: API key for authorization - ImsOrgId: - name: x-gw-ims-org-id - in: header - required: true - schema: - type: string - description: Adobe IMS organization ID ContentType: name: Content-Type in: header From 23481c035831ac695884a3b9362a714c3996b08d Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 12:45:57 -0500 Subject: [PATCH 23/48] replace credential detail with tenant ID guidance --- src/pages/credential/GetCredentialOAuthS2s.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 1d49b8a7..21ef82bf 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -8,9 +8,9 @@ const GetCredentialOAuthS2s = () => { - + - + @@ -30,14 +30,14 @@ const GetCredentialOAuthS2s = () => { This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

- This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Adobe Commerce Optimizer Developer Guide for help finding your tenant ID. + This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.

@@ -83,11 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> - - Credential details

You can use the following credential details to try out the Adobe Commerce Optimizer REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Commerce APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> - - - + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}>
@@ -104,10 +100,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

You can use the following credential details to try out the Adobe Commerce Optimizer REST API below.
  • Client ID: Your public identifier for accessing the API. This acts as an API key when used with the Platform APIs, and corresponds with the x-api-key header.
  • Organization ID: The ID of the organization you're using with the Commerce APIs. This corresponds with the x-gw-ims-org-id header.
)} orderBy="ClientId,ImsOrgID"> - - - + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}>
From 77a5f4e94609908d93a90125a49fa778205315c6 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 12:57:50 -0500 Subject: [PATCH 24/48] test: access token heading --- src/pages/credential/GetCredentialOAuthS2s.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 21ef82bf..d5394c9f 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,8 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="AccessToken"> +
@@ -100,7 +101,8 @@ const GetCredentialOAuthS2s = () => { - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="AccessToken"> +
From dc663f577e1e702118ad6e8fe4e2c2086126fbee Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 13:06:40 -0500 Subject: [PATCH 25/48] fix: add scopes --- src/pages/credential/GetCredentialOAuthS2s.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index d5394c9f..4e7553a8 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -64,7 +64,7 @@ const GetCredentialOAuthS2s = () => {

Learn more

- + Authentication documentation @@ -83,8 +83,8 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="AccessToken"> - + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> +
@@ -101,8 +101,8 @@ const GetCredentialOAuthS2s = () => { - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="AccessToken"> - + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> +
From d53a698575d29c4153cf419307c6870f91b2707a Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 13:13:26 -0500 Subject: [PATCH 26/48] fix: restore client ID and IMS org ID (partially) --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 4e7553a8..f1ef4b7e 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -84,6 +84,8 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + +
@@ -102,6 +104,8 @@ const GetCredentialOAuthS2s = () => { Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + +
From 7aa102c5f7ed9aab29feb3663d40d4dfaf55f161 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 13:21:11 -0500 Subject: [PATCH 27/48] fix: add orderby for client Id and IMS org ID --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index f1ef4b7e..0794ca36 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)}> + Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> From 31ccb32c97716b3af9d7881d4734d21d6d58a275 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 13:57:00 -0500 Subject: [PATCH 28/48] clarify token use --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 0794ca36..1ab3003a 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -81,7 +81,7 @@ const GetCredentialOAuthS2s = () => { - Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> + Access token

Click the following button to generate an access token. After copying the access token, you must paste it into the Authorization header parameter of your API requests below.)} /> Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> @@ -113,7 +113,7 @@ const GetCredentialOAuthS2s = () => { - Access token

After copying the access token, you must prepend the token with Bearer to use it with API calls.)} /> + Access token

Click the following button to generate an access token. After copying the access token, you must paste it into the Authorization header parameter of your API requests below.)} /> From 452ba010d151be3d9382bd6c635e2e084e9c2291 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 14:33:34 -0500 Subject: [PATCH 29/48] clarify copy token --- src/pages/credential/GetCredentialOAuthS2s.js | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 1ab3003a..3cc1fd88 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -81,11 +81,29 @@ const GetCredentialOAuthS2s = () => { - Access token

Click the following button to generate an access token. After copying the access token, you must paste it into the Authorization header parameter of your API requests below.)} /> + + Access token +
+
+ + + Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below. +
+
+ After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you. +
+
+ + } + /> Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> - +
@@ -105,7 +123,7 @@ const GetCredentialOAuthS2s = () => { Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> - +
@@ -113,7 +131,24 @@ const GetCredentialOAuthS2s = () => { - Access token

Click the following button to generate an access token. After copying the access token, you must paste it into the Authorization header parameter of your API requests below.)} /> + + Access token +
+
+ + + Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below. +
+
+ After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you. +
+
+ + } /> From 1a13e23306f4225a4e9043eca58661b5de6bd72c Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 14:55:37 -0500 Subject: [PATCH 30/48] fix: access token return console error --- src/pages/credential/GetCredentialOAuthS2s.js | 39 +------------------ 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 3cc1fd88..a8e35f7a 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -81,25 +81,7 @@ const GetCredentialOAuthS2s = () => { - - Access token -
-
- - - Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below. -
-
- After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you. -
-
- - } - /> + Access token

Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below.

After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you.
)}/> Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> @@ -131,24 +113,7 @@ const GetCredentialOAuthS2s = () => { - - Access token -
-
- - - Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below. -
-
- After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you. -
-
- - } /> + Access token

Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below.

After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you.
)} /> From 68ee975de710d0abd7fdc1dc39a97e7f830ed892 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 15:55:13 -0500 Subject: [PATCH 31/48] fix: credential return for client id --- src/pages/credential/GetCredentialOAuthS2s.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index a8e35f7a..697befc5 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -104,9 +104,9 @@ const GetCredentialOAuthS2s = () => { Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> - - - + + +
From 4fe37510ac17ab2553ca45630f2c569903e6f9a7 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 16:09:10 -0500 Subject: [PATCH 32/48] simplfy component text --- src/pages/credential/GetCredentialOAuthS2s.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 697befc5..c416864c 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -10,7 +10,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -81,9 +81,9 @@ const GetCredentialOAuthS2s = () => { - Access token

Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below.

After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you.
)}/> + Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> + Credential details

Copy your tenant ID from the Commerce Cloud Manager and paste it in the tenantID field in the Try it panel below. You only need to do this once; future requests will use it automatically. Learn more.)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.)} orderBy="ClientId,ImsOrgID"> + Credential details

Copy your tenant ID from the Commerce Cloud Manager and paste it in the tenantID field in the Try it panel below. You only need to do this once; future requests will use it automatically. Learn more.)} orderBy="ClientId,ImsOrgID"> @@ -113,7 +113,7 @@ const GetCredentialOAuthS2s = () => { - Access token

Click the following button to generate an access token with the Client ID (x-api-key) and Organization ID (x-gw-ims-org-id) displayed in the Credential details section below.

After copying the access token, paste it into the Authorization header parameter of any API request in the Try it panel below. You only need to paste it once—after that, all other Authorization header fields in subsequent requests will be automatically populated for you.
)} /> + Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)} /> From 0a409bc841ee1fc233c7a679de3527ebc5d8fc49 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 17:54:47 -0500 Subject: [PATCH 33/48] fix: remove br tags that render as plaintext --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index c416864c..698ce206 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -10,7 +10,7 @@ const GetCredentialOAuthS2s = () => { - + From c178ae7574a6e64a26d2b715b4701294a88a5265 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 18:01:00 -0500 Subject: [PATCH 34/48] wordsmithing --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 698ce206..49e3d3d7 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -10,7 +10,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -30,7 +30,7 @@ const GetCredentialOAuthS2s = () => { This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

- This credential does not automatically return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments. You must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. + This credential only provides an access token. It does not return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments, which is required for API calls. In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.

From f0b77d0e64b5da1e9777c53af7e271cf0998028d Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 18:04:25 -0500 Subject: [PATCH 35/48] separate tenant ID from client and org ID --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 49e3d3d7..f3b5bb16 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

Copy your tenant ID from the Commerce Cloud Manager and paste it in the tenantID field in the Try it panel below. You only need to do this once; future requests will use it automatically. Learn more.)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will use it automatically.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

Copy your tenant ID from the Commerce Cloud Manager and paste it in the tenantID field in the Try it panel below. You only need to do this once; future requests will use it automatically. Learn more.)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will use it automatically.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> From 5b2b42fc900a0920ed95d98c899d3f5d49586b07 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 19:45:10 -0500 Subject: [PATCH 36/48] Apply suggestions from code review Co-authored-by: Margaret Eker --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index f3b5bb16..ee959f1e 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will use it automatically.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will use it automatically.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> + Credential details

To try the API, you also need the tenant ID for an Optimizer instance in the sandbox environment. Copy the instance ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. For help, see Get started. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID values are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> From df810ee9dc61b8736da76f5dbc3a8616884ed1d6 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 19:46:06 -0500 Subject: [PATCH 37/48] Apply suggestions from code review Co-authored-by: Margaret Eker --- src/pages/reference/rest/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/reference/rest/index.md b/src/pages/reference/rest/index.md index c780adc4..62690825 100644 --- a/src/pages/reference/rest/index.md +++ b/src/pages/reference/rest/index.md @@ -13,4 +13,4 @@ import GetCredentialOAuthS2s from '/src/pages/credential/GetCredentialOAuthS2s.j - + From 232373ab84f6da4b0da79fe5a9a1a7ba66ece503 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 19:52:00 -0500 Subject: [PATCH 38/48] normalize review suggestions for new and return --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index ee959f1e..2097761c 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The client ID and Organization ID below are used to generate the access token.
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID below are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

To try the API, you also need the tenant ID for an Optimizer instance in the sandbox environment. Copy the instance ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. For help, see Get started. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID values are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID below are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> From a014f2ab1e7d07cb040be7633b3f98b1ab605686 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 20:03:18 -0500 Subject: [PATCH 39/48] fix: editorial --- src/pages/credential/GetCredentialOAuthS2s.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 2097761c..7e96cf8f 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -30,7 +30,7 @@ const GetCredentialOAuthS2s = () => { This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

- This credential only provides an access token. It does not return the tenant IDs associated with your Adobe Commerce Optimizer sandbox environments, which is required for API calls. In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. + This credential only provides an access token. It does not return the tenant ID associated with your Adobe Commerce Optimizer sandbox environment, which is required for API calls. In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID.

@@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID below are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID below are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> From 009df3b1d006675e27f4a4730252324ef5676d52 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Tue, 5 Aug 2025 20:10:21 -0500 Subject: [PATCH 40/48] fix: case --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 7e96cf8f..195722f0 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -83,7 +83,7 @@ const GetCredentialOAuthS2s = () => { Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following Client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following Client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> From 1db7b80f543539da5c81602e40dc6a7f30fa3b37 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Wed, 6 Aug 2025 09:11:24 -0500 Subject: [PATCH 41/48] Apply suggestions from code review Co-authored-by: Margaret Eker --- src/pages/credential/GetCredentialOAuthS2s.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 195722f0..0b16c032 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -10,7 +10,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -81,9 +81,9 @@ const GetCredentialOAuthS2s = () => { - Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)}/> + Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)}/> - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following Client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

The following Client ID and Organization ID are used to generate the access token:)} orderBy="ClientId,ImsOrgID"> From 3707fee5e7182f8144da6f72252918756a46b4e2 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Wed, 6 Aug 2025 09:13:20 -0500 Subject: [PATCH 42/48] fix: normalize return credential block with review suggestions --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 0b16c032..2ddf1bc5 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -103,7 +103,7 @@ const GetCredentialOAuthS2s = () => { - Credential details

In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. You only need to do this once; future requests will reuse the value.

The following Client ID and Organization ID are used to generate the access token:
)} orderBy="ClientId,ImsOrgID"> + Credential details

The following Client ID and Organization ID are used to generate the access token:)} orderBy="ClientId,ImsOrgID"> From 01fdc0424218dc8281cb150eace1de7b4e774102 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Wed, 6 Aug 2025 09:24:15 -0500 Subject: [PATCH 43/48] fix: normalize return credential block with review suggestions --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 2ddf1bc5..9b5e3432 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -113,7 +113,7 @@ const GetCredentialOAuthS2s = () => { - Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically.)} /> + Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)} /> From e1005487d26309cc5ad91bedad4c389f80c9fcf9 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Wed, 6 Aug 2025 09:41:36 -0500 Subject: [PATCH 44/48] fix: remove redundant sentence --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 9b5e3432..bde13dd4 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -113,7 +113,7 @@ const GetCredentialOAuthS2s = () => { - Access token

Paste the access token into the Authorization header in the Try it panel below. You only need to do this once; future requests will use it automatically. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)} /> + Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)} /> From c1960e861a6a2c445f2f3c6f29869b6bdc29e698 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 7 Aug 2025 10:35:44 -0500 Subject: [PATCH 45/48] fix: set default content type --- static/rest/data-ingestion-schema-v1.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 1f7b5a5d..1ef963a7 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -1580,6 +1580,7 @@ components: schema: type: string enum: [application/json] + default: application/json ContentEncoding: name: Content-Encoding in: header From ceb39f99620eadc82fe213853e60d3a533f837f8 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 7 Aug 2025 10:50:29 -0500 Subject: [PATCH 46/48] feat: replace staging template ID and server URL with production sandbox --- src/pages/credential/GetCredentialOAuthS2s.js | 2 +- static/rest/data-ingestion-schema-v1.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index bde13dd4..942296a2 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -6,7 +6,7 @@ const GetCredentialOAuthS2s = () => { return ( - + diff --git a/static/rest/data-ingestion-schema-v1.yaml b/static/rest/data-ingestion-schema-v1.yaml index 1ef963a7..bf035618 100644 --- a/static/rest/data-ingestion-schema-v1.yaml +++ b/static/rest/data-ingestion-schema-v1.yaml @@ -15,7 +15,7 @@ info: - [Prices](#tag/Prices)—define and manage product SKU prices and their associated price books. version: 1.0.0 servers: - - url: https://na1-stage.api.commerce.adobe.com/{tenantId} + - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} variables: tenantId: default: string From 27f946a740c6c9474bf5fa04a3b61930e0c75d87 Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 7 Aug 2025 11:50:18 -0500 Subject: [PATCH 47/48] fix: normalize references to tenant ID (instance ID) --- src/_includes/authentication/get-tenant-id.md | 8 ++++---- src/pages/credential/GetCredentialOAuthS2s.js | 8 ++++---- src/pages/optimizer/admin/using-the-api.md | 2 +- src/pages/optimizer/data-ingestion/using-the-api.md | 2 +- .../optimizer/merchandising-services/troubleshooting.md | 2 +- .../optimizer/merchandising-services/using-the-api.md | 8 ++++---- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/_includes/authentication/get-tenant-id.md b/src/_includes/authentication/get-tenant-id.md index 80d65ec7..ff312d3a 100644 --- a/src/_includes/authentication/get-tenant-id.md +++ b/src/_includes/authentication/get-tenant-id.md @@ -1,4 +1,4 @@ -From Cloud Manager, you can find your tenant ID in the instance detailLs for your Commerce Optimizer project. +From Cloud Manager, you can find your instance ID in the instance detailLs for your Commerce Optimizer project. 1. Log in to your [Adobe Experience Cloud](https://experience.adobe.com/) account. @@ -6,13 +6,13 @@ From Cloud Manager, you can find your tenant ID in the instance detailLs for you The Commerce Cloud Manager displays a list of instances that are available in your Adobe IMS organization. -1. To get the tenant ID, click the information icon next to the Adobe Commerce Optimizer instance name. +1. To get the instance ID, click the information icon next to the Adobe Commerce Optimizer instance name. ![Access URLs for Commerce Optimizer UI, REST, and GraphQL APIs](../../pages/_images/reporting/aco-instance-details.png) - The instance details page opens, displaying the tenant ID and other instance information. The tenant ID is displayed in the `Instance ID` field. + The instance details page opens, displaying the instance ID and other instance information. The instance ID is displayed in the `Instance ID` field. -You can also find the tenant ID from the access URL for the Adobe Commerce Optimizer application interface, the value is in the path, for example `/in:XDevkG9W6UbwgQmPn995r3/`. +You can also find the instance ID from the access URL for the Adobe Commerce Optimizer application interface, the value is in the path, for example `/in:XDevkG9W6UbwgQmPn995r3/`. diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 942296a2..0dcf2432 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -10,7 +10,7 @@ const GetCredentialOAuthS2s = () => { - + @@ -30,7 +30,7 @@ const GetCredentialOAuthS2s = () => { This credential allows you to use industry standard OAuth2.0 libraries to generate access tokens using the OAuth 2.0 client credentials grant type.

- This credential only provides an access token. It does not return the tenant ID associated with your Adobe Commerce Optimizer sandbox environment, which is required for API calls. In addition to the access token, you must manually copy and paste a tenant ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your tenant ID. + This credential only provides an access token. It does not return the instance ID associated with your Adobe Commerce Optimizer sandbox environment, which is required for API calls. In addition to the access token, you must manually copy and paste a instance ID from the Commerce Cloud Manager into the tenantID field in the Try it panel below. See the Get started documentation for help finding your instance ID.

@@ -81,7 +81,7 @@ const GetCredentialOAuthS2s = () => { - Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)}/> + Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the instance ID to the instance ID field. You only need to do this once; future requests reuse the values automatically.)}/> Credential details

The following Client ID and Organization ID are used to generate the access token:)} orderBy="ClientId,ImsOrgID"> @@ -113,7 +113,7 @@ const GetCredentialOAuthS2s = () => { - Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the tenant ID to the tenant ID field. You only need to do this once; future requests reuse the values automatically.)} /> + Access token

Paste the access token into the Authorization header in the Try it panel below. Then, add the instance ID to the instance ID field. You only need to do this once; future requests reuse the values automatically.)} /> diff --git a/src/pages/optimizer/admin/using-the-api.md b/src/pages/optimizer/admin/using-the-api.md index e5179b81..5f33330b 100644 --- a/src/pages/optimizer/admin/using-the-api.md +++ b/src/pages/optimizer/admin/using-the-api.md @@ -32,7 +32,7 @@ The URL structure is:
- Get your tenant ID + Get your instance ID import GetTenantId from '/src/_includes/authentication/get-tenant-id.md' diff --git a/src/pages/optimizer/data-ingestion/using-the-api.md b/src/pages/optimizer/data-ingestion/using-the-api.md index 4e953c8c..d93f06e1 100644 --- a/src/pages/optimizer/data-ingestion/using-the-api.md +++ b/src/pages/optimizer/data-ingestion/using-the-api.md @@ -36,7 +36,7 @@ The URL structure is:
- Get your tenant ID + Get your instance ID import GetTenantId from '/src/_includes/authentication/get-tenant-id.md' diff --git a/src/pages/optimizer/merchandising-services/troubleshooting.md b/src/pages/optimizer/merchandising-services/troubleshooting.md index 6c948e6c..a4828e41 100644 --- a/src/pages/optimizer/merchandising-services/troubleshooting.md +++ b/src/pages/optimizer/merchandising-services/troubleshooting.md @@ -15,7 +15,7 @@ When building dynamic storefronts with the Merchandising GraphQL API, it's essen ## Common Issues -- **Authentication Errors**: Verify that the tenant ID used in the endpoint URL to ensure it matches the tenant ID in your Adobe Commerce Optimizer instance. +- **Authentication Errors**: Verify that the instance ID used in the endpoint URL to ensure it matches the instance ID in your Adobe Commerce Optimizer instance. - **Missing Data**: Ensure products are properly ingested via the Data Ingestion API. You can check the synchronization status for product data from the [Data Sync page](https://experienceleague.adobe.com/en/docs/commerce/optimizer/setup/data-sync) in Adobe Commerce Optimizer. - **Performance Issues**: Optimize queries and implement caching. - **Rate Limiting**: Monitor API usage and implement proper throttling. diff --git a/src/pages/optimizer/merchandising-services/using-the-api.md b/src/pages/optimizer/merchandising-services/using-the-api.md index 7e41b25d..f17c0d93 100644 --- a/src/pages/optimizer/merchandising-services/using-the-api.md +++ b/src/pages/optimizer/merchandising-services/using-the-api.md @@ -17,7 +17,7 @@ Use the Merchandising API to retrieve product data from your Commerce catalogs a Before using the Merchandising API, ensure you have: -- **Adobe Commerce Optimizer Access**: Active subscription and the tenant ID associated with your Adobe Commerce Optimizer instance +- **Adobe Commerce Optimizer Access**: Active subscription and the instance ID associated with your Adobe Commerce Optimizer instance - **Catalog Data**: Products and pricing data ingested via the [Data Ingestion API](../data-ingestion/index.md) - **Catalog Views**: Configured views and policies in Adobe Commerce Optimizer - **Authentication Setup**: Proper headers configured for API requests @@ -48,7 +48,7 @@ The URL structure is:
- Get your tenant ID + Get your instance ID import GetTenantId from '/src/_includes/authentication/get-tenant-id.md' @@ -100,9 +100,9 @@ Get the values for catalog view, policy, catalog source locale, and price book d To get started with the Merchandising API, follow these steps to make your first request: -1. Get values for the tenant ID and required headers. +1. Get values for the instance ID and required headers. - - `tenantId`: Your unique tenant ID for Adobe Commerce Optimizer + - `tenantId`: Your unique instance ID for Adobe Commerce Optimizer - `AC-View-ID`: Catalog view ID from Adobe Commerce Optimizer - `AC-Source-Locale`: Locale for data filtering (for example, `en-US`, `en-GB`) From 297d45744acb756dde634c8a275d75fe26c9fa8b Mon Sep 17 00:00:00 2001 From: Jeff Matthews Date: Thu, 7 Aug 2025 12:21:30 -0500 Subject: [PATCH 48/48] fix: captialization --- src/pages/credential/GetCredentialOAuthS2s.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/credential/GetCredentialOAuthS2s.js b/src/pages/credential/GetCredentialOAuthS2s.js index 0dcf2432..67b68698 100644 --- a/src/pages/credential/GetCredentialOAuthS2s.js +++ b/src/pages/credential/GetCredentialOAuthS2s.js @@ -8,9 +8,9 @@ const GetCredentialOAuthS2s = () => { - + - +