Adobe Suite Product Layers API

The Product Layers API from Adobe Suite — 2 operation(s) for product layers.

Operations 2

POST /v1/catalog/products/layers Create or replace product layers #
POST /v1/catalog/products/layers/delete Delete product layers #

Documentation

📖
Documentation
https://developer.adobe.com/photoshop/api/docs/
📖
Authentication
https://developer.adobe.com/developer-console/docs/guides/authentication/
📖
Documentation
https://developer.adobe.com/lightroom/api/docs/
📖
Documentation
https://developer.adobe.com/illustrator/api/docs/
📖
Documentation
https://developer.adobe.com/indesign/docs/
📖
Documentation
https://developer.adobe.com/document-services/docs/overview/pdf-services-api/
📖
Documentation
https://developer.adobe.com/document-services/docs/overview/pdf-extract-api/
📖
GettingStarted
https://developer.adobe.com/document-services/docs/overview/pdf-extract-api/gettingstarted/
📖
Documentation
https://developer.adobe.com/document-services/docs/overview/pdf-accessibility-auto-tag-api/
📖
Documentation
https://developer.adobe.com/analytics-apis/docs/
📖
APIReference
https://developer.adobe.com/analytics-apis/docs/2.0/
📖
Documentation
https://developer.adobe.com/firefly-services/docs/
📖
APIReference
https://developer.adobe.com/firefly-services/docs/api/
📖
Documentation
https://developer.adobe.com/audio-video-firefly-services/
📖
GettingStarted
https://developer.adobe.com/audio-video-firefly-services/getting-started/
📖
Documentation
https://developer.adobe.com/creative-cloud-libraries/docs/
📖
APIReference
https://developer.adobe.com/creative-cloud-libraries/docs/api/
📖
Documentation
https://developer.adobe.com/express/embed-sdk/docs/guides/
📖
APIReference
https://developer.adobe.com/express/embed-sdk/docs/v4/
📖
GettingStarted
https://developer.adobe.com/express/embed-sdk/docs/guides/quickstart/
📖
Documentation
https://developer.adobe.com/experience-platform-apis/
📖
GettingStarted
https://experienceleague.adobe.com/en/docs/experience-platform/landing/platform-apis/api-guide
📖
Documentation
https://developer.adobe.com/marketo-apis/
📖
Authentication
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/authentication
📖
Documentation
https://developer.adobe.com/commerce/docs/
📖
GettingStarted
https://developer.adobe.com/commerce/webapi/get-started/
📖
Documentation
https://developer.adobe.com/experience-cloud/cloud-manager/
📖
Documentation
https://developer.adobe.com/journey-optimizer-apis/
📖
Documentation
https://developer.adobe.com/workfront-apis/
📖
Documentation
https://developer.adobe.com/firefly-services/docs/substance3d/
📖
Documentation
https://developer.adobe.com/data-collection-apis/
📖
Documentation
https://developer.adobe.com/adobe-status/
📖
Documentation
https://developer.adobe.com/vip-marketplace/

Specifications

Other Resources

🔗
Pricing
https://developer.adobe.com/document-services/pricing/
🔗
SDKs
https://developer.adobe.com/document-services/docs/overview/pdf-services-api/sdks/
🔗
ReleaseNotes
https://developer.adobe.com/document-services/docs/overview/pdf-services-api/releasenotes
🔗
Guides
https://developer.adobe.com/analytics-apis/docs/2.0/guides/
🔗
Guides
https://developer.adobe.com/firefly-services/docs/guides/
🔗
Usage Notes
https://developer.adobe.com/audio-video-firefly-services/getting_started/usage/
🔗
Overview
https://developer.adobe.com/creative-cloud-libraries/docs/overview/
🔗
Integration Guide
https://developer.adobe.com/creative-cloud-libraries/docs/integrate/
🔗
API Fundamentals
https://experienceleague.adobe.com/en/docs/experience-platform/landing/platform-apis/api-fundamentals
🔗
Developer Guide
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/home
🔗
REST API
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api
🔗
REST API
https://developer.adobe.com/commerce/webapi/rest/
🔗
GraphQL API
https://developer.adobe.com/commerce/webapi/graphql-api/
🔗
REST API Reference
https://developer.adobe.com/commerce/webapi/reference/rest/paas/
🔗
GraphQL
https://raw.githubusercontent.com/api-evangelist/adobe-suite/refs/heads/main/graphql/adobe-suite-graphql.md
🔗
Webhooks
https://developer.adobe.com/experience-cloud/cloud-manager/guides/getting-started/create-event-integration/
🔗
StatusPage
https://status.adobe.com/

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/adobe-suite-product-layers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

adobe-suite-product-layers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Catalog Data Ingestion Product Layers 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.
  version: 1.0.0
servers:
- url: https://na1-sandbox.api.commerce.adobe.com/{tenantId}
  variables:
    tenantId:
      default: string
tags:
- name: Product Layers
paths:
  /v1/catalog/products/layers:
    post:
      tags:
      - Product Layers
      summary: Create or replace product layers
      description: 'Create product layers to customize and override base product data for specific contexts, locales, or business requirements.


        Product layers enable you to:

        - Override product attributes for specific markets or channels

        - Provide locale-specific content while maintaining a global base product

        - Create seasonal or promotional variations without duplicating entire product records

        - Implement A/B testing scenarios with different product presentations


        For details on how to use layers with Adobe Commerce Optimizer, see

        Catalog Layers in the

        Adobe Commerce Optimizer documentation.


        ## Layer behavior and requirements


        **Required fields:**

        - `sku`: Must match an existing base product SKU

        - `source.layer`: Identifies the layer name for organization and retrieval


        **Optional Fields:**

        - `source.locale`: When specified, layer applies only to that locale. When omitted, layer applies globally across all locales

        - All product fields (name, description, images, and so on): Override corresponding base product values


        ## Merging logic


        Product layers use intelligent merging:

        - **Simple fields** (name, description, and so on): Complete replacement of base values

        - **Array fields** (attributes, images, etc.): First-level arrays are merged with base arrays

        - **Nested arrays** (attribute.values, etc.): Complete replacement of nested arrays


        **Example:** Adding a color variant while preserving existing attributes:

        ```json

        {

        "sku": "red-pants",

        "source": {

        "locale": "en-US",

        "layer": "seasonal-colors"

        },

        "attributes": [

        {

        "code": "color",

        "values": ["Crimson Red", "Deep Red"],

        "variantReferenceId": "pants-color-crimson"

        }

        ]

        }

        ```'
      operationId: createProductLayers
      parameters:
      - $ref: '#/components/parameters/Authorization'
      - $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'
        '429':
          $ref: '#/components/responses/TooManyRequestsResponse'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/FeedProductLayer'
            examples:
              ProductLayerWithImages:
                summary: Create a seasonal product layer
                description: 'Create a product layer that overrides the base product with seasonal branding,  localized content, and updated imagery for the US market.

                  '
                value:
                - sku: red-pants
                  source:
                    locale: en-US
                    layer: seasonal-winter-2024
                  name: Premium Red Winter Pants - Limited Edition
                  description: Stay warm and stylish with our premium red winter pants. Features thermal lining and water-resistant fabric perfect for cold weather adventures.
                  shortDescription: Premium thermal-lined winter pants in warm, classic red
                  images:
                  - url: https://cdn.example.com/products/red-pants-winter-2024.jpg
                    label: Premium Red Winter Pants - Front View
                    roles:
                    - BASE
                    - THUMBNAIL
                    customRoles:
                    - hero
                    - seasonal-banner
  /v1/catalog/products/layers/delete:
    post:
      tags:
      - Product Layers
      summary: Delete product layers
      description: 'Remove specific product layers by SKU and source identifiers. This operation permanently deletes

        the layer data while preserving the base product.


        **Use Cases:**

        - Remove expired seasonal or promotional layers

        - Clean up test layers after A/B testing completion

        - Delete locale-specific layers when discontinuing market support

        - Remove outdated customizations


        **Important Notes:**

        - Only the specified layer is deleted; base product and other layers remain intact

        - Both `sku` and `source` (locale + layer) must match exactly for successful deletion'
      operationId: deleteProductLayers
      parameters:
      - $ref: '#/components/parameters/Authorization'
      - $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'
        '429':
          $ref: '#/components/responses/TooManyRequestsResponse'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/FeedProductLayerDelete'
            examples:
              DeleteSeasonalLayer:
                summary: Delete seasonal product layer
                description: 'Delete a seasonal product layer after the promotion period ends,  reverting the product to its base configuration.

                  '
                value:
                - sku: red-pants
                  source:
                    locale: en-US
                    layer: seasonal-winter-2024
components:
  parameters:
    Authorization:
      name: Authorization
      in: header
      required: true
      schema:
        type: string
        description: Authorization Bearer token
    ContentEncoding:
      name: Content-Encoding
      in: header
      required: false
      schema:
        type: string
        enum:
        - gzip
      description: Use this header if the payload is compressed with gzip.
    ContentType:
      name: Content-Type
      in: header
      required: true
      schema:
        type: string
        enum:
        - application/json
        default: application/json
  schemas:
    ProductAttribute:
      title: Product Attribute
      type: object
      required:
      - code
      - values
      properties:
        code:
          type: string
          description: Product Attribute Code
        values:
          type: array
          description: A list of value(s) associated with a specified attribute code.
          items:
            type: string
        variantReferenceId:
          type:
          - string
          - 'null'
          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.

            '
    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.
    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
    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
    FeedProductLayer:
      title: Catalog Product Layer payload
      type: object
      required:
      - sku
      - source
      properties:
        sku:
          type: string
          description: SKU (Stock Keeping Unit) that uniquely identifies the base product this layer will modify. Must match an existing product SKU in the catalog.
          example: red-pants
        source:
          $ref: '#/components/schemas/SourceLayer'
        name:
          type: string
          description: Product display name that will override the base product name. Use for localized names, seasonal branding, or promotional titles.
          example: Premium Red Winter Pants - Limited Edition
        description:
          type:
          - string
          - 'null'
          description: Detailed product description that replaces the base product description. Use for localized content, seasonal messaging, or enhanced marketing copy.
          example: Stay warm and stylish with our premium red winter pants. Features thermal lining and water-resistant fabric perfect for cold weather adventures.
        shortDescription:
          type:
          - string
          - 'null'
          description: Brief product summary that appears in product listings and search results. Override for concise, layer-specific messaging.
          example: Premium thermal-lined winter pants in classic red
        metaTags:
          $ref: '#/components/schemas/ProductMetaAttribute'
        attributes:
          type: array
          description: Product attributes that will be merged with base product attributes. Use to add layer-specific variants, localized values, or seasonal properties.
          items:
            $ref: '#/components/schemas/ProductAttribute'
        images:
          type: array
          description: Product images that will be merged with base product images. Use to add seasonal imagery, locale-specific photos, or promotional visuals.
          items:
            $ref: '#/components/schemas/ProductImage'
        links:
          type: array
          description: Related product SKUs that will be merged with base product links. Use to add seasonal recommendations, locale-specific cross-sells, or promotional bundles.
          items:
            $ref: '#/components/schemas/ProductLink'
        externalIds:
          type: array
          description: External system identifiers that will be merged with base product external IDs. Use to add layer-specific tracking codes, campaign IDs, or integration references.
          items:
            $ref: '#/components/schemas/ProductExternalId'
    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
    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.
    SourceLayer:
      title: Catalog layer source
      description: "Identifies the source context for a product layer, combining locale and layer name to create \na unique layer identifier. This allows for precise targeting of content overrides.\n"
      type: object
      required:
      - layer
      properties:
        locale:
          type: string
          description: "ISO locale code (for example, \"en-US\", \"fr-FR\", \"de-DE\") that specifies the target market or language. \nWhen omitted, the layer applies globally across all locales. Use for market-specific customizations.\n"
          example: en-US
        layer:
          type: string
          description: "Unique identifier for the layer within the product's layer hierarchy. Use descriptive names \nthat indicate the layer's purpose (for example, \"seasonal-winter-2024\", \"promotional-black-friday\", \"a-b-test-variant\").\n"
          example: seasonal-winter-2024
    FeedProductLayerDelete:
      title: Catalog Product Layer delete payload
      type: object
      required:
      - sku
      - source
      properties:
        sku:
          type: string
          description: SKU (Stock Keeping Unit) that identifies the base product containing the layer to delete. Must match an existing product SKU in the catalog.
          example: red-pants
        source:
          $ref: '#/components/schemas/SourceLayer'
    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
    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
    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: ''
    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
    ProductMetaAttribute:
      title: Meta Attributes
      description: Meta attributes that are specified in <meta> 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
  responses:
    TooManyRequestsResponse:
      x-summary: Too many requests
      description: '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'
    AcceptedResponse:
      x-summary: All items accepted
      description: 'All items accepted and will be processed asynchronously

        '
      content:
        application/json;charset=UTF-8:
          schema:
            $ref: '#/components/schemas/ProcessFeedResponse'
    UnauthorizedResponse:
      x-summary: Unauthorized request
      description: 'Verify that the Bearer token provided in the `Authorization` header is still valid.

        '
      content:
        application/json;charset=UTF-8:
          schema:
            $ref: '#/components/schemas/401Response'
    InvalidItemsResponse:
      x-summary: Request rejected
      description: 'Some of the received items are invalid. Check the "message" and "errors" fields for details.


        Common causes of validation errors include:


        * **Invalid SKU**: SKU does not exist in the catalog

        * **Invalid Price Book**: Price book ID does not exist

        * **Invalid Discount Code**: Duplicate or invalid discount codes

        * **Invalid Tier Quantities**: Quantities not in ascending order or less than 2

        * **Configurable Product Price**: Attempting to set price for configurable product SKU

        * **Invalid Price Format**: Non-numeric or negative price values

        * **Incorrect Category Slug**: Invalid category slug format

        * **Incorrect hierarchy configuration**: Misconfiguration of price book parent-child relationship

        '
      content:
        application/json;charset=UTF-8:
          schema:
            $ref: '#/components/schemas/400ProcessFeedResponse'
    ForbiddenResponse:
      x-summary: Forbidden request
      description: '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'
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