openapi: 3.2.0 info: title: Catalog Data Ingestion Price Books 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: - [Product Metadata](#tag/ProductMetadata)—define and manage product attribute metadata including display settings, search characteristics, filtering options, and sorting rules. - [Category Metadata](#tag/CategoryMetadata)—define and manage category attribute metadata. - [Categories](#tag/Categories)—Define and manage categories with hierarchical structure to build navigation menu. - [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. - [Product Layers](#tag/Product-Layers)—Define and manage product layers to customize and override base product data for specific contexts, locales, or business requirements. ' version: 1.0.0 servers: - url: https://na1-sandbox.api.commerce.adobe.com/{tenantId} variables: tenantId: default: string tags: - 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. ' paths: /v1/catalog/price-books: post: tags: - Price Books summary: Create price books description: 'Create or replace existing price books with support for hierarchical pricing structures.

Creating Base Price Books

Base price books are the foundation of your pricing hierarchy: * **Required Fields**: `priceBookId`, `name`, `currency` * **Currency Definition**: Sets the currency for the entire branch of child price books * **No Parent**: Base price books cannot reference a parent price book * **Unique ID**: Must have a unique `priceBookId` across all price books

Creating Child Price Books

Child price books inherit from their parent and can extend the hierarchy: * **Required Fields**: `priceBookId`, `name`, `parentId` * **Parent Reference**: Must reference an existing parent price book * **Currency Inheritance**: Automatically inherits currency from parent * **Hierarchy Depth**: Can create up to 3 levels of nesting

Hierarchy Management

* **Parent Assignment**: Once a `parentId` is assigned, it cannot be changed via update operations * **Restructuring**: To change parent-child relationships, delete and recreate the child price book * **Validation**: The system validates parent references and hierarchy depth limits Use the [update price books operation](#operation/updatePriceBooks) to modify existing price book names or base price book currencies. ' operationId: createPriceBooks parameters: - name: Content-Type in: header required: true 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 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 hierarchical price book structure description: 'Create a comprehensive pricing hierarchy with a base price book and multiple child price books. This example demonstrates geographic pricing with regional variations. ' value: - priceBookId: us name: US Base Price Book currency: USD - priceBookId: us-north parentId: us name: US North Region - priceBookId: us-south parentId: us name: US South Region - priceBookId: us-north-east parentId: us-north name: US Northeast Territory - priceBookId: us-north-west parentId: us-north name: US Northwest Territory 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: 'Update existing price books with limitations on hierarchical changes.

Updatable Fields

* **Name**: Can be updated for both base and child price books * **Currency**: Can only be updated for base price books (affects entire hierarchy) * **Parent ID**: Cannot be updated - use delete and recreate to change hierarchy

Update Restrictions

* **Parent Assignment**: Cannot change `parentId` via update operations * **Hierarchy Changes**: To restructure the hierarchy, delete and recreate child price books * **Currency Inheritance**: Child price books automatically inherit currency changes from parent * **Validation**: System validates that `parentId` references exist and hierarchy depth is maintained

Update Strategies

* **Base Price Books**: Update name and currency as needed * **Child Price Books**: Include correct `parentId` in request (will be ignored if different) * **Hierarchy Restructuring**: Delete child price book and recreate with new parent reference > **Note:** Before submitting an update request, verify that the target entity exists by checking the available price books in [Commerce Optimizer](https://experienceleague.adobe.com/en/docs/commerce/optimizer/setup/pricebooks#view-price-books-in-commerce-optimizer). Update operations do not verify that the entity exists. Requests targeting a nonexistent entity are accepted, but the update has no effect. ' operationId: updatePriceBooks parameters: - name: Content-Type in: header required: true 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 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 ComplexHierarchyExample: summary: Create a complex multi-level pricing hierarchy description: 'Create a comprehensive pricing structure for a global business with multiple regions, customer segments, and sales channels. This demonstrates the full potential of hierarchical price books. ' value: - priceBookId: global name: Global Base Pricing currency: USD - priceBookId: us-retail parentId: global name: US Retail Channel - priceBookId: us-online parentId: global name: US Online Channel - priceBookId: us-retail-premium parentId: us-retail name: US Retail Premium Customers - priceBookId: us-retail-standard parentId: us-retail name: US Retail Standard Customers - priceBookId: us-online-vip parentId: us-online name: US Online VIP Members - priceBookId: us-online-regular parentId: us-online name: US Online Regular Customers 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: 'Delete price books and their associated pricing data with cascading effects on the hierarchy.

Cascading Deletion

When you delete a price book: * **Child Price Books**: All child price books in the hierarchy are automatically deleted * **Associated Prices**: All prices assigned to the deleted price book and its children are removed * **Hierarchy Impact**: The entire branch below the deleted price book is removed

Deletion Scenarios

* **Base Price Book**: Deletes entire pricing hierarchy and all associated prices * **Child Price Book**: Deletes the specific price book and its children, but preserves sibling price books * **Leaf Price Book**: Deletes only the specified price book and its associated prices

Recovery Options

If a price book is deleted by mistake: * **Time Window**: You have up to one week to restore deleted price books * **Restoration Method**: Recreate the top-level parent price book using the original create payload * **State Recovery**: Price books and prices are restored to their state when deleted * **Hierarchy Reconstruction**: The entire hierarchy is rebuilt from the restoration payload

Best Practices

* **Backup Strategy**: Keep copies of price book configurations for recovery * **Validation**: Verify hierarchy structure before deletion * **Impact Assessment**: Review associated prices before deleting price books ' operationId: deletePriceBooks parameters: - name: Content-Type in: header required: true 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 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' components: schemas: PriceBookChild: title: Child price book description: 'Nested price book that inherits currency from its parent and can extend the pricing hierarchy. Child price books can have up to 3 levels of nesting from the base price book. ' type: object required: - priceBookId - name - parentId properties: priceBookId: type: string description: 'Unique identifier for the child price book. Must be unique across all price books. Used to reference this price book in pricing data and potential child price books. ' minLength: 1 maxLength: 64 example: us-retail name: type: string description: 'Human-readable name for the child price book. Used for display and identification purposes. ' minLength: 1 example: US Retail Channel parentId: type: string description: 'Reference to the parent price book ID. Must reference an existing price book. Determines the currency inheritance and hierarchy level. ' minLength: 1 maxLength: 64 FeedPricebook: title: FeedPricebook description: 'Price book information supporting hierarchical pricing structures. Use base price books to define currency and create child price books for specific pricing scenarios. ' oneOf: - $ref: '#/components/schemas/PriceBookBase' - $ref: '#/components/schemas/PriceBookChild' 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 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: '' 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 PriceBookBase: title: Base price book type: object required: - priceBookId - name - currency properties: priceBookId: type: string description: 'Unique identifier for the base price book. Must be unique across all price books. Used to reference this price book in child price books and pricing data. ' minLength: 1 maxLength: 64 example: us-base name: type: string description: 'Human-readable name for the price book. Used for display and identification purposes. ' minLength: 1 example: US Base Pricing currency: type: string description: 'Currency code that applies to this price book and all its child price books in ISO format. Child price books inherit this currency and cannot override it. ' minLength: 1 maxLength: 5 example: USD 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 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. FeedPriceBookDelete: title: FeedPriceBookDelete description: Price book information required: - priceBookId type: object properties: priceBookId: type: string description: Price book id 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 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