For distributors & resellers
Your catalog, your pricing, one REST API.
Browse 1,900+ customizable products with your negotiated partner pricing, submit quote requests, and track quotes and orders — over plain JSON. Base URL: https://api.qstomize.com/v1
$ curl https://api.qstomize.com/v1/products?limit=1 \
-H "Authorization: Bearer qs_live_YOUR_KEY"
{
"products": [{
"slug": "custom-poly-mailers",
"name": "Custom Poly Mailers",
"min_quantity": 100,
"lead_time_days": 14,
"pricing": [
{ "qty": 100, "list_price": 0.69, "net_price": 0.62 },
{ "qty": 5000, "list_price": 0.31, "net_price": 0.28 }
],
"product_url": "https://www.qstomize.com/products/custom-poly-mailers"
}],
"total": 1906, "limit": 1, "offset": 0
}Authentication
Every request needs your API key, sent either as a bearer token or an X-API-Key header. Keys start with qs_live_, are shown once when issued, and can be revoked at any time. To get one, email partners@qstomize.com with your company name and expected volume.
-H "Authorization: Bearer qs_live_YOUR_KEY" -H "X-API-Key: qs_live_YOUR_KEY"
Keep keys server-side. If a key leaks, email us and we revoke it immediately.
Rate limits
120 requests per minute per key. Exceeding it returns 429 with a Retry-After header. For catalog syncs, page with limit=100 — the full catalog fits in ~20 requests.
Errors
Errors are JSON with a stable machine-readable code and a human explanation.
{ "error": { "code": "invalid_api_key", "message": "API key not recognized." } }| Status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key | No key in the request |
| 401 | invalid_api_key | Key unknown or revoked |
| 400 | invalid_request | A field failed validation — message says which |
| 404 | not_found | Resource doesn't exist or isn't yours |
| 429 | rate_limited | Over 120 requests/minute |
| 500 | internal_error | Our fault — retry once, then contact us |
/v1/productsPaginated catalog with your partner pricing. Every tier shows the public list price and your net price side by side. Filter with ?category= (slugs from /v1/categories); page with limit (max 100) and offset.
$ curl "https://api.qstomize.com/v1/products?category=packaging&limit=50" \
-H "Authorization: Bearer qs_live_YOUR_KEY"/v1/products/{slug}Full product record: description, images, specs, minimum quantity, lead time, and pricing per decoration method (screen print, embroidery, laser engraving, …) where available.
$ curl https://api.qstomize.com/v1/products/custom-poly-mailers \
-H "Authorization: Bearer qs_live_YOUR_KEY"/v1/categoriesAll active category slugs and names — use these to drive catalog filters.
$ curl https://api.qstomize.com/v1/categories \
-H "Authorization: Bearer qs_live_YOUR_KEY"/v1/quotesSubmit a quote request. Reference a catalog product by product_slug, or describe a custom item with product_name. Our team replies by email, usually within one business day; poll the returned quote_number for status.
$ curl -X POST https://api.qstomize.com/v1/quotes \
-H "Authorization: Bearer qs_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_slug": "custom-poly-mailers",
"quantity": 5000,
"contact_name": "Dana Reyes",
"contact_email": "dana@yourcompany.com",
"company": "Your Company",
"artwork_url": "https://yourcdn.com/logo.ai",
"message": "Matte white, 10x13, two-color logo."
}'{
"quote": {
"quote_number": "Q-1770650000-A1B2",
"status": "pending",
"submitted_at": "2026-08-07T09:30:00.000Z"
},
"message": "Quote received. Our team will respond by email, usually within one business day."
}/v1/quotes/{quoteNumber}Status of a quote you submitted, including quoted_price once our team has priced it. Quotes belonging to other partners return 404.
$ curl https://api.qstomize.com/v1/quotes/Q-1770650000-A1B2 \
-H "Authorization: Bearer qs_live_YOUR_KEY"/v1/orders/{orderId}Production, payment, and shipping status for an order linked to your account, including tracking once shipped. Order references look like DP-1770648206-GLOVES and appear on your order confirmation.
{
"order": {
"order_id": "DP-1770648206-GLOVES",
"product_name": "Custom Work Gloves",
"quantity": 500,
"status": "in_production",
"payment_status": "paid",
"tracking": null,
"estimated_delivery_date": "2026-09-02",
"paid_at": "2026-08-07T10:02:11.000Z"
}
}OpenAPI spec
A machine-readable OpenAPI 3.0 document is available at /v1/openapi.json — point your client generator at it.
