Merchant Product Import
This documentation describes the technical process for importing merchant product data using the API.
#Step-by-Step Process
Generate Signed Upload URL
#Get Upload URL
Request
POST /temporary-upload-url HTTP/1.1
{
"content_type": "text/csv",
"file_name": "example.csv"
}
Response - 201 Created
{
"path": "tmp/d24c7338-5eeb-4129-bae6-2f8e30f004bb-metaZXhhbXBsZS5jc3Y=-.csv",
"url": "https://smake-public.s3.eu-west-1.amazonaws.com/tmp/d24c7338-5e ...",
"headers": {
"Content-Type": "text/csv"
}
}
Note: The upload URL is valid for 10 minutes. Save the path value from the response – you will need it when creating the import.
#Upload Content
Upload the Content
Request
PUT /temporary-upload-url?... HTTP/1.1
Content-Type: text/plain
merchant_handle,master_variant_sku,external_identifier,merchant_product_handle,published,is_master,price,tax_rate,name,locale
normal-shop,production-variant-360,7600532#1517120-2-0,47110815,yes,yes,13.00,19.00,Rudi das Pferd,de
Response
HTTP/1.1 200 OK
Note: Uploaded files will be automatically deleted after 24 hours.
#Create a new import
Creates a new asynchronous import of merchant products based on a CSV file uploaded to S3.
#Parameters for creating a product import
| Field | Type | Description | Required |
|---|---|---|---|
| path | string | A path of csv file uploaded to S3 | Yes |
| should_preserve_published | boolean | If the switch is set to true, the publishing settings for existing articles from the CSV file will be ignored. | No |
Request
POST /merchant-product-imports HTTP/1.1
{
"path": "tmp/d24c7338-5eeb-4129-bae6-2f8e30f004bb-metaZXhhbXBsZS5jc3Y=-.csv",
"should_preserve_published": false
}
Response
HTTP/1.1 202 Accepted
Location: /merchant-product-imports/1
Note: The import runs asynchronously. Use the Location header to poll the import status.
#Check Import Status
Returns a result of product import with the given id = x.
Request
GET /merchant-product-imports/1 HTTP/1.1
Response
{
"id": 1,
"options": {
"should_preserve_published": false
},
"state": "finished",
"failure_message": null,
"total_rows": 24,
"failed_rows": 0,
"processed_rows": 24,
"ignored_rows": 0,
"started_at": "2026-02-18T10:35:32+00:00",
"finished_at": "2026-02-18T10:36:15+00:00",
"source_file": {
"id": 5416,
"collection_name": "source-file",
"file_name": "product-import-example.csv",
"size": 14397,
"mime_type": "text/plain",
"download_url": "https://api.smake.io/storage/files/fb9c8ddc270843c7aaadcbd383fbaa2c/example.csv?expires=1768396599&signature=ed46888300b586baa5f31835b8a44ddddaf36cfc9ac22a42f38cf7b9fe0c09c3",
"state": null,
"requested": null,
"failure_message": null,
"created_at": "2026-02-18T10:35:29+00:00",
"updated_at": "2026-02-18T10:35:29+00:00"
},
"failed_report_file": null,
"created_at": "2026-02-18T10:35:29+00:00",
"updated_at": "2026-02-18T10:36:15+00:00"
}
Note: If not all data was processed successfully, the field failed_report_file will be filled and you can download an error report to check where the error lies.
#Example Import File
merchant_handle,master_variant_sku,external_identifier,merchant_product_handle,published,is_master,price,tax_rate,name,locale
normal-shop,production-variant-360,7600532#1517120-2-0,47110815,yes,yes,13.00,19.00,Rudi das Pferd,de
normal-shop,production-variant-360,7600532#1517120-2-0,47110815,yes,yes,13.00,19.00,Rudi the Horse,en
normal-shop,production-variant-360,7600532#1517120-2-0,47110815,yes,yes,13.00,19.00,Rudi le cheval,fr
normal-shop,production-variant-360,7600532#1517120-2-1,47110816,yes,yes,25.00,19.00,Otto die Katze,de
normal-shop,production-variant-360,7600532#1517120-2-1,47110816,yes,yes,25.00,19.00,Otto the Cat,en
normal-shop,production-variant-360,7600532#1517120-2-3,47110817,yes,yes,25.00,19.00,Garfield the Cat,en
normal-shop,production-variant-360,7600532#1517120-2-4,47110818,yes,yes,25.00,19.00,Simon die Armeise,de
normal-shop,production-variant-405,merchant-product-6-red-XXXL,08154711,yes,no,25.00,19.00,Simon die Maus,de
normal-shop,production-variant-360,7600532#1517120-2-5,47110819,yes,yes,25.00,19.00,Peter der Hosh,de