List the products on your account. The response is one row per active variant — the SKU you'll use when creating orders is on the variant row, not the product.
#Endpoints
GET /v1/products/list— list active variants on the authenticated account.
#Authentication
Standard Bearer auth — see Authentication and API keys.
#List products
GET /v1/products/list
Query parameters:
limit(integer, default20) — page size.offset(integer, default0) — number of records to skip.
Response shape:
[
{
"id": "<product_id>",
"title": "Logo Tee",
"sku": "TEE-BLK-M",
"minimumOrderQuantity": 1,
"productionTime": 7,
"imageUrl": "https://cdn.merch.com/<file>",
"piecesPerCarton": 24,
"cartonHeight": 12,
"cartonLength": 18,
"cartonWidth": 14,
"weight": 0.4,
"packageHeight": 1,
"packageLength": 10,
"packageWidth": 8,
"packageWeight": 0.5
}
]
Field-by-field:
id— the parent product id. Several variants can share this value.title— the product title.sku— the variant SKU. Unique per row in this response. Pass this onproducts[].skuwhen creating an order.minimumOrderQuantity— the smallest quantity you can order. Taken from the first pricing tier of the first variant on the parent product.productionTime— production lead time in days.imageUrl— a CDN URL for the variant image, ornullif the variant has no image attached.piecesPerCarton— units per shipping carton, ornullif not configured.cartonHeight,cartonLength,cartonWidth— carton dimensions, ornull. Units follow the values configured on the product.weight— per-unit weight, ornull.packageHeight,packageLength,packageWidth,packageWeight— single-unit package dimensions and weight, ornull.
curl -X GET 'https://api.merch.com/v1/products/list?limit=20&offset=0' \
-H 'Authorization: Bearer <your_api_key>'
To page through everything, increment offset by limit until you get a short page back.
#How SKUs flow into orders
The sku returned here is exactly what you pass on products[].sku when calling POST /v1/orders/create. The parent id is informational — order creation matches on sku.
A typical integration flow:
- Call
GET /v1/products/listand cache{ sku, id, title }for each row. - Call
GET /v1/campaigns/listand cache thecampaignIdyou want to order against. - On a recipient signal (new hire, deal closed, redemption), call
POST /v1/orders/createwith the cachedcampaignIdand the chosenskuplus quantity.
#Errors
401 Unauthorized— missing, malformed, or invalid bearer token. See Authentication and API keys.500 Internal Server Error— unexpected error. Body is a{ "message": "..." }string. Retry after a short delay.