Elastic Path Product Export API

```mdx-code-block import ProductExport from '/docs/partials/pxm/import/export.mdx'; ``` ### Characteristics of Exporting Products - Product exports are an asynchronous operation. When you send a request to the Export API, it triggers an asynchronous job to build the `.csv` file containing the product entries. - Jobs are processed one at a time. You can continue to send product export requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. This process is repeated until all jobs are processed. See [**Jobs**](/docs/api/pxm/products/jobs). - The Export API response includes a job resource. In the response, you can verify the job status; if the status is successful, the response includes a link to the location where the `.csv` file is stored. See [**Product Export CSV File**](#product-export-csv-file). A single CSV file contains 10,000 rows, excluding the header. If you are exporting 50,000 products, the job endpoint response contains links to five `.csv` files; each `.csv` file including 10,000 products. - You might have specified custom extension data in a `.csv` file when you imported the products. These modifications are all exported. So, when you send a request to the Export API, the `.csv` file, included in the Job endpoint response, reflects any changes that you have made. - You cannot export product bundles. ### Product Export CSV File The Product Export API generates a Comma Separated Values (CSV) file that you can use to import/update products, main image files, and custom extension data. The `.csv` file is: - Comma-separated. - Header-based. - Header attributes must be the same as the product attributes. - Header names can be in any order. - Each row after the first line represents a single product. The following table describes the headers that are supported. | Header | Required | Description | |:---------------------------------|:---------|:-----------------------------------------------------| | id | Optional | A unique product ID that is generated when you create the product. The `id` is used to look up products in the `.csv` file and matches them to the products in your storefront that you want to update. | | external_ref | Optional | A unique attribute associated with a product. This could be an external reference from a separate company system, for example. The maximum length is 2048 characters. | | name | Required | The name of a product. | | description | Required | A description for a product. You can include quotes in your product description, if you want to emphasize a word, for example. To do this, put quotes around the product description. For example, "This product description describes my "product" and the product "version"." | | slug | Required | A label for the product that is used in the URL paths. A slug can contain any combination of letters, numbers, periods, hyphens, and underscores. NO spaces or other characters are allowed. By default, the product name is used as the slug. | | status | Required | The status of a product, either `Draft` or `Live`. | | commodity_type | Required | The commodity type, either `physical` or `digital`. | | upc_ean | Optional | The universal product code or european article number of the product. | | mpn | Optional | The manufacturer part number of a product. | | sku | Optional | The unique stock keeping unit of the product. | | tags | Optional | The product tags used to store or assign a key word against a product. A product can have up to 20 product tags. A product tag can be up to 255 characters. See [**Product Tags**](/docs/api/pxm/products/product-tags ). | | main_image_id | Optional | Specifies a unique ID of a main image file for a product. See [Exporting Main Image Files](#exporting-main-image-files). | | `_created_at` | Optional| The date and time a product was created. **Note**: This field does not populate any data; it is provided solely for informational purposes. | | `_updated_at` | Optional | The date and time a product was updated. **Note**: This field does not populate any data; it is provided solely for informational purposes. | | `template::created_at` | Optional | The date and time a template was created. **Note**: This field does not populate any data; it is provided solely for informational purposes. | | `template::updated_at` | Optional | The date and time a template was updated. **Note**: This field does not populate any data; it is provided solely for informational purposes. | | `template::` | Optional | Custom extension data includes the flow `ID` or `slug` and the field `name`. See [Exporting Custom Data (Flows)](#exporting-custom-data-flows). | ### Exporting Main Image Files The main images that you have previously uploaded Commerce are exported. A `main_image_id` header is added to your `.csv` file. The ID in `main_image_id` is the ID of a file that has already been uploaded to Commerce using [create a file](/docs/api/pxm/files/create-a-file). ### Exporting Custom Data (Flows) Custom extension data is exported in a `.csv` file by creating a header that includes the flow `ID` or `slug` and the field `name` as shown below: - `template::` - `template::` where: - `template` must be `template`. - one of the following for the template that contains the field whose data you want to export: - `flowID` is the ID of the flow. - `flowSlug` is the flow slug. - `fieldName` is the name of the field whose data you want to export. In the following example, for a flow with ID `82c10a02-1851-4992-8ecb-d44f2782d09b` and a field with the name `condition`: - the header is `template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition`. - the updated custom data is `as-new`. | name | slug | sku | status | template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition | | :--- | :--- | :--- | :--- | :--- | | BestEver Range | bestever-range-1a1a-30 | BE-Range-1a1a-30 | draft | as-new |

Operations 1

POST /pcm/products/export Export Products #

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/elastic-path-product-export-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

elastic-path-product-export-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Product Experience Manager Introduction Product Export API
  description: Product Experience Manager uses the PIM service to manage product information, hierarchies, and price books.
  version: 26.0612.7739142
  x-version-timestamp: 2026-06-12 10:52:50+00:00
servers:
- url: https://euwest.api.elasticpath.com
  description: EU West Production Server
- url: https://useast.api.elasticpath.com
  description: US East Production Server
security:
- bearerAuth: []
tags:
- name: Product Export
  description: '```mdx-code-block

    import ProductExport from ''/docs/partials/pxm/import/export.mdx'';


    ```


    ### Characteristics of Exporting Products


    - Product exports are an asynchronous operation.'
paths:
  /pcm/products/export:
    post:
      summary: Export Products
      description: The Export API is available to make bulk updates to products in Product Experience Manager.
      operationId: exportProducts
      tags:
      - Product Export
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  required:
                  - type
                  properties:
                    attributes:
                      type: object
                      properties:
                        columns:
                          type: object
                          properties:
                            include:
                              type: array
                              items:
                                type: string
                    type:
                      type: string
                      example: product-export
            examples:
              product-export-columns:
                summary: Export only a subset of columns when useTemplateSlugs is `false`
                value:
                  data:
                    type: product-export
                    attributes:
                      columns:
                        include:
                        - description
                        - template:a1b2c3d4-e5f6-7890-1234-567890abcdef:isbn
              product-export-columns-template-slugs:
                summary: Export only a subset of columns when useTemplateSlugs is `true`
                value:
                  data:
                    type: product-export
                    attributes:
                      columns:
                        include:
                        - description
                        - products(book):isbn
      responses:
        '201':
          description: Export started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                pending:
                  summary: Successful Job
                  $ref: '#/components/examples/export'
        '400':
          $ref: '#/components/responses/bad_request'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
      - $ref: '#/components/parameters/useTemplateSlugs'
      - $ref: '#/components/parameters/filterexport'
components:
  schemas:
    job:
      type: object
      required:
      - id
      - type
      - attributes
      - meta
      properties:
        id:
          description: A unique identifier generated when a job is created.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `pim-job`.
          type: string
          enum:
          - pim-job
        attributes:
          type: object
          required:
          - started_at
          - completed_at
          - created_at
          - updated_at
          - type
          - status
          properties:
            started_at:
              description: The date and time a job is started.
              type:
              - string
              - 'null'
              example: '2020-09-22T09:00:00.000Z'
              format: date-time
            completed_at:
              type:
              - string
              - 'null'
              example: '2020-09-22T09:00:00.000Z'
              format: date-time
              description: The date and time a job is completed.
            created_at:
              type: string
              description: The date and time a job is created.
              example: '2020-09-22T09:00:00.000Z'
              format: date-time
            updated_at:
              type: string
              description: The date and time a job is updated.
              example: '2020-09-22T09:00:00.000Z'
              format: date-time
            type:
              type: string
              description: 'The status of a job.


                * `pending` - Commerce has received the request but is currently busy processing other requests.

                * `started` - Commerce has started processing the job.

                * `success` - The job has successfully completed.

                * `failed` - The job has failed.

                '
              enum:
              - child-products
              - product-import
              - product-export
              - hierarchy-duplicate
              - pricebook-import
              - pricebook-delete
              - hierarchy-delete
              - indexing-job
            status:
              type: string
              enum:
              - pending
              - cancelled
              - cancelling
              - started
              - success
              - failed
        meta:
          type: object
          required:
          - x_request_id
          properties:
            x_request_id:
              type: string
              description: Applies to all job types. A unique request ID is generated when a job is created.
            copied_from:
              type: string
              description: Applies to `hierarchy-duplicate` job types. The ID of the original hierarchy that you duplicated.
            hierarchy_id:
              type: string
              description: Applies to `hierarchy-duplicate` job types. The duplicated hierarchy ID.
            file_locations:
              type:
              - array
              - 'null'
              description: If the job type is `product_export`, a link to the file is created when running a job.
              items:
                type: string
            filter:
              type:
              - string
              - 'null'
              description: The entities included in the job. For example, if the job type is `product-export`, the PXM products included in the export.
    single:
      type: object
      required:
      - data
      properties:
        data:
          $ref: '#/components/schemas/job'
    error:
      required:
      - errors
      properties:
        errors:
          type: array
          items:
            required:
            - status
            - title
            properties:
              status:
                type: string
                description: The HTTP response code of the error.
                example: '500'
              title:
                type: string
                description: A brief summary of the error.
                example: Internal server error
              detail:
                type: string
                description: Optional additional detail about the error.
                example: An internal error has occurred.
              request_id:
                type: string
                description: Internal request ID.
                example: 00000000-0000-0000-0000-000000000000
              meta:
                type: object
                description: Additional supporting meta data for the error.
                example:
                  missing_ids:
                  - e7d50bd5-1833-43c0-9848-f9d325b08be8
  responses:
    internal:
      description: Internal server error. There was a system failure in the platform.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                - status: '500'
                  title: Internal Server Error
                  detail: There was an internal server error, you can report with your request id.
                  request_id: 635da56d-75a1-43cd-b696-7ab119756b3a
    bad_request:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            bad-request:
              value:
                errors:
                - title: Bad Request
                  detail: Could not parse the supplied filter
                  status: '400'
    unprocessable_entity:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            failed-validation:
              value:
                errors:
                - title: Failed Validation
                  status: '422'
                  detail: <XYZ> can not be empty
  parameters:
    filterexport:
      name: filter
      in: query
      description: '

        Many Commerce API endpoints support filtering. The general syntax is described [**here**](/guides/Getting-Started/filtering), but you must go to a specific endpoint to understand the attributes and operators an endpoint supports.


        For more information about the attributes and operators that this endpoint supports, see [Export Products](/docs/api/pxm/products/export-products).

        '
      style: form
      explode: true
      schema:
        type: string
      examples:
        eq:
          value: eq(name,some-name)
        like:
          value: like(name,*some-name*)
        in:
          value: in(id,some-id)
    useTemplateSlugs:
      name: useTemplateSlugs
      description: Set to `true` if you want to use a template slug instead of a template ID when exporting products that have custom data.
      in: query
      style: form
      explode: true
      schema:
        type: boolean
        default: false
  examples:
    export:
      value:
        data:
          type: pim-job
          id: 7e1b9ba1-c844-4556-9b16-4ae3f0988b0f
          attributes:
            completed_at: null
            created_at: '2024-01-05T15:27:23.161Z'
            started_at: null
            status: pending
            type: product-export
            updated_at: '2024-01-05T15:27:23.161Z'
          meta:
            file_locations: null
            filter: eq(sku,product-1)
            x_request_id: fad8c5c0-9546-4e0c-b68e-8a2d809891e5
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer