Ingest a product feed end-to-End¶
This guide shows how to upload, process, and verify a partner product feed using the Commerce Integration API.
Use this workflow during partner onboarding or when testing feed ingestion.
Overview¶
In this guide, you will:
- Upload a product feed
- Review ingestion results
- Verify products in the catalog
Prerequisites¶
| Requirement | Description |
|---|---|
| Base URL (local) | http://localhost:8000 |
| Base URL (AWS) | http://partner-catalog-alb-1398338240.us-east-2.elb.amazonaws.com |
| API key | x-api-key: demo-secret-key |
Valid .csv file |
see CSV feed file specification |
Feed file specification¶
For complete CSV formatting rules, supported fields, validation requirements, and file constraints, see the CSV Feed File Specification.
1. Upload a product feed¶
To upload a product feed, do the following:
- Run the POST /feeds/upload endpoint to submit the product
.csvfile. - Note the
feed_idvalue in the response for use in the next step. In the example thefeed_idis FD00021.
Example request
curl -X POST "http://api.example.com/feeds/upload" \
-H "x-api-key: demo-secret-key" \
-F "file=@electronics_catalog.csv" \
-F "partner_name=Tronics"
Example response
{
"feed_id": "FD00021",
"job_id": "JS00021",
"status": "processing"
}
2. Review processing results¶
Run the GET /feeds/{feed_id} endpoint using the feed_id captured in previous step, FD00021.
Example request¶
curl --request GET \
--url http://api.example.com/feeds/FD00021 \
--header 'x-api-key: demo-secret-key'
Example response¶
{
"feed_id": "FD00021",
"partner_name": "Joyeria Reina",
"file_name": "test-only-sku-product_name.csv",
"content_type": "text/csv",
"status": "processed",
"uploaded_at": "2026-05-05T16:18:58.792011Z",
"validation_job_id": "JV00021",
"validation_status": "completed",
"validation_message": "ETL processing completed. Products processed: 10. Inserted: 10. Updated: 0. Unchanged: 0. Skipped: 0.",
"raw_file_s3_key": "raw/partners/joyeria-reina/feeds/FD00021/test-only-sku-product_name.csv",
"raw_file_bucket": "partner-catalog-raw-rayj"
}
Interpret the results¶
Review the following values from the validation_message field in the response.
- Processed: Total rows evaluated
- Inserted: New products created
- Updated: Existing products with changed data (for example, price or availability)
- Unchanged: Existing products with no changes
- Skipped: Invalid rows or rows missing required fields
3. Verify Products¶
Run the GET /products endpoint using the feed_id from step 1 (FD00021) as a query parameter.
Example request
curl -X GET "http://api.example.com/products?feed_id=FD00021" \
-H "x-api-key: demo-secret-key"
Example response
{
"count": 2,
"items": [
{
"product_id": "PR00145",
"feed_id": "FD00019",
"partner_name": "Test",
"sku": "RS1001",
"product_name": "Nike Air Zoom Pegasus 40",
"description": "Versatile daily trainer with responsive Zoom Air units and breathable mesh upper",
"brand": "Nike",
"category": "Running Shoes",
"price": 129.99,
"currency": "USD",
"availability": "In Stock",
"created_at": "2026-05-04T16:48:42.611576+00:00"
},
{
"product_id": "PR00146",
"feed_id": "FD00019",
"partner_name": "Test",
"sku": "RS1002",
"product_name": "Adidas Ultraboost 22",
"description": "High-cushion running shoe with Boost midsole for energy return and Primeknit upper",
"brand": "Adidas",
"category": "Running Shoes",
"price": 189.99,
"currency": "USD",
"availability": "In Stock",
"created_at": "2026-05-04T16:48:42.611576+00:00"
}
]
}
Optional filters¶
Use query parameters to refine results:
partner_nameskubrandcategoryavailability