API endpoint reference
Open /settings/developerEvery endpoint below is prefixed with https://uniformbuilder.io/api and needs an Authorization: Bearer sk_live_... header. For how authentication, pagination, and webhooks work, read API and webhooks first.
A machine-readable version exists
The same information is published as an OpenAPI 3.1 document at /api/v1/openapi.json. Point a client generator at it rather than writing request code by hand.
Account
| Field | What it does |
|---|---|
| GET /v1/me | The team store behind your key, its scopes, plan, and your effective rate limits. Use it to verify a key works. |
Catalogue
| Field | What it does |
|---|---|
| GET /v1/products | List products. Filters: product_code, category_id, is_active. |
| GET /v1/products/{ref} | One product by id or product_code (SKU). Includes its pattern sizes. Add ?include=pricing for price tiers. |
| GET /v1/categories | List the categories products are filed under. |
Artwork
| Field | What it does |
|---|---|
| GET /v1/designs | List designs. Filters: design_id, product_id, is_active. The SVG source is not included here. |
| GET /v1/designs/{ref} | One design by id or design_id, including its SVG source. |
| GET /v1/configurations | List saved customer configurations. Filters: product_id, source. |
| GET /v1/configurations/{ref} | One configuration by id or short_id. Add ?include=config for the full designer state. |
Orders and quotes
| Field | What it does |
|---|---|
| GET /v1/quotes | List quotes. Filters: status, payment_status, external_order_id, updated_since. |
| POST /v1/quotes | Create an order. Needs the quotes:create scope. Body: customer, lines, optional external_order_id and notes. |
| GET /v1/quotes/{ref} | One quote by id or short_id. Add ?include=items for the ordered lines. |
| PATCH /v1/quotes/{ref} | Update status, external_order_id, or notes. Needs the quotes:write scope. |
| GET /v1/quotes/{ref}/messages | The conversation attached to a quote. |
| POST /v1/quotes/{ref}/messages | Add a message, attributed to your team. Needs the quotes:write scope. |
| GET /v1/quotes/{ref}/files | Production documents filed against the order, with one-hour signed download links. |
| GET /v1/orders | The same records as /v1/quotes, with a derived order_status. |
| GET /v1/orders/{ref} | One order by id or short_id. |
| PATCH /v1/orders/{ref} | Identical to PATCH /v1/quotes/{ref}. Needs the quotes:write scope. |
Production
| Field | What it does |
|---|---|
| GET /v1/production-jobs | List project tracker cards. Filters: stage_id, status, quote_id, updated_since. |
| GET /v1/production-jobs/{id} | One job with its last twenty history entries. |
| PATCH /v1/production-jobs/{id} | Move a job to another stage, by column title or id. Needs the production:write scope. |
| GET /v1/rosters | List team rosters. Filters: status (draft or locked), production_job_id. |
| GET /v1/rosters/{id} | One roster. Add ?include=rows for the full line list and sizing. |
| GET /v1/rosters/{id}/assets | Per-line production files. Ready entries carry a one-hour signed link. |
Status codes
| Field | What it does |
|---|---|
| 200 / 201 / 202 | Success. The body is { "success": true, "data": ... }. 201 means something was created; 202 means it was queued. |
| 400 | The request failed validation. The errors array names each problem. |
| 401 | The key is missing, malformed, revoked, or expired. All four look identical on purpose, so keys cannot be probed. |
| 403 | The key is valid but lacks the required scope, or API access is not enabled for the team store. |
| 404 | No such record in your team store. Returned instead of 403 so ids elsewhere cannot be discovered. |
| 409 | An Idempotency-Key was reused with a different body, an identical request is still running, or a limit such as the key count is already reached. |
| 413 | The request body is larger than 1 MB. |
| 429 | A rate limit was hit. Retry-After says how many seconds to wait. |
| 500 | Something failed on our side. Retry with the same Idempotency-Key; the request id in X-Request-Id helps us trace it. |
Rate limits
Reads, writes, and order submissions are counted separately, so a bulk export cannot exhaust the budget that protects order creation. A daily ceiling applies on top. Defaults are higher on Enterprise than on Pro, and can be raised for your team store on request.
Response headers
| Field | What it does |
|---|---|
| X-RateLimit-Limit | The allowance for the bucket this request counted against. |
| X-RateLimit-Remaining | How many requests are left in the current window. |
| X-RateLimit-Reset | Unix time when the window resets. |
| Retry-After | On a 429 only: seconds to wait before retrying. |
| X-Request-Id | A unique id for the request. Quote it when reporting a problem. |
Call /v1/me to see your own limits
Rather than hard-coding the defaults, read them from GET /v1/me. They are also shown at the top of the Developer page in the dashboard.