Import Products
POST/pcm/products/import
You can use the Product Import API to:
Add new products, including:
- main image files. See Importing Main Image Files.
 - custom data. See Importing custom data.
 - Make bulk updates to existing products.
 
You cannot use product import to:
- Delete existing products.
 - Import product bundles.
 
The Product Import API uses a Comma Separated Values (CSV) file to import products, main image files and custom extension data. Each row in a .csv file represents a product you want to create/update. See an example file.
Each file can have 50,000 rows, including the header. If a CSV file exceeds 50,000 rows, an error is displayed, and the products are not imported. A CSV file must not be larger than 50 megabytes. If a CSV file is larger than 50 megabytes, a 503 client read error is displayed.
If you want to create/update more than 50,000 products or your CSV file is larger than 50 megabytes, you must have a separate CSV file and import each CSV file one at a time.
See Characteristics of CSV Files.
Request
- multipart/form-data
 
Body
The file you want to upload. Ensure that the file format is Comma Separated Values (CSV).
Responses
- 201
 - 400
 - 422
 - 500
 
Import started
- application/json
 
- Schema
 - Example (from schema)
 - pending
 
Schema
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.
data object
A unique identifier generated when a job is created.
Possible values: [pim-job]
This represents the type of resource object being returned. Always pim-job.
attributes object
The date and time a job is started.
The date and time a job is completed.
The date and time a job is created.
The date and time a job is updated.
Possible values: [child-products, product-import, product-export, hierarchy-duplicate, price-import]
The status of a job.
Possible values: [pending, cancelled, started, success, failed]
meta object
Applies to all job types. A unique request ID is generated when a job is created.
Applies to hierarchy-duplicate job types. The ID of the original hierarchy that you duplicated.
Applies to hierarchy-duplicate job types. The duplicated hierarchy ID.
If the job type is product_export, a link to the file is created when running a job.
The entities included in the job. For example, if the job type is product-export, the PXM products included in the export.
{
  "data": {
    "id": "string",
    "type": "pim-job",
    "attributes": {
      "started_at": "2020-09-22T09:00:00",
      "completed_at": "2020-09-22T09:00:00",
      "created_at": "2020-09-22T09:00:00",
      "updated_at": "2020-09-22T09:00:00",
      "type": "child-products",
      "status": "pending"
    },
    "meta": {
      "x_request_id": "string",
      "copied_from": "string",
      "hierarchy_id": "string",
      "file_locations": [
        "string"
      ],
      "filter": "string"
    }
  }
}
Successful Job
{
  "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-import",
      "updated_at": "2024-01-05T15:27:23.161Z"
    },
    "meta": {
      "x_request_id": "fad8c5c0-9546-4e0c-b68e-8a2d809891e5"
    }
  }
}
Bad request. The request failed validation.
- application/json
 
- Schema
 - Example (from schema)
 - bad-request
 
Schema
- Array [
 - ]
 
errors undefined[]required
The HTTP response code of the error.
A brief summary of the error.
Optional additional detail about the error.
Internal request ID.
Additional supporting meta data for the error.
{
  "errors": [
    {
      "status": "500",
      "title": "Internal server error",
      "detail": "An internal error has occurred.",
      "request_id": "00000000-0000-0000-0000-000000000000",
      "meta": {
        "missing_ids": [
          "e7d50bd5-1833-43c0-9848-f9d325b08be8"
        ]
      }
    }
  ]
}
{
  "errors": [
    {
      "title": "Bad Request",
      "detail": "Could not parse the supplied filter",
      "status": "400"
    }
  ]
}
Bad request. The request failed validation.
- application/json
 
- Schema
 - Example (from schema)
 - failed-validation
 
Schema
- Array [
 - ]
 
errors undefined[]required
The HTTP response code of the error.
A brief summary of the error.
Optional additional detail about the error.
Internal request ID.
Additional supporting meta data for the error.
{
  "errors": [
    {
      "status": "500",
      "title": "Internal server error",
      "detail": "An internal error has occurred.",
      "request_id": "00000000-0000-0000-0000-000000000000",
      "meta": {
        "missing_ids": [
          "e7d50bd5-1833-43c0-9848-f9d325b08be8"
        ]
      }
    }
  ]
}
{
  "errors": [
    {
      "title": "Failed Validation",
      "status": "422",
      "detail": "<XYZ> can not be empty"
    }
  ]
}
Internal server error. There was a system failure in the platform.
- application/json
 
- Schema
 - Example (from schema)
 - internal-server-error
 
Schema
- Array [
 - ]
 
errors undefined[]required
The HTTP response code of the error.
A brief summary of the error.
Optional additional detail about the error.
Internal request ID.
Additional supporting meta data for the error.
{
  "errors": [
    {
      "status": "500",
      "title": "Internal server error",
      "detail": "An internal error has occurred.",
      "request_id": "00000000-0000-0000-0000-000000000000",
      "meta": {
        "missing_ids": [
          "e7d50bd5-1833-43c0-9848-f9d325b08be8"
        ]
      }
    }
  ]
}
{
  "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"
    }
  ]
}