List products
/v1/productsLists products, newest first by default, with total for paging. Reads one organization: your key's, the org_id you name, or your only one; scope=all reads every organization you can reach. Different filters combine with AND; repeated values of one filter combine with OR (for tag, tag_match decides).
Query Parameters
How many items to return, 1 to 200.
1 <= value <= 20050How many items to skip before the page.
0 <= value0The organization to read. With a key, its own organization is read and org_id may be left out. Signed in, it is required unless you belong to one organization or send scope=all.
org (the default) reads one organization. all reads every organization you can reach; it needs a signed-in session (400 with a key).
"org"Value in
- "org"
- "all"
Search text, 1 to 200 characters: products whose title or custom_id contains it, ignoring case.
Only the product with exactly this custom_id.
Only products showing one of these statuses (their display_status). Repeat the parameter for several.
Only products with these tags. Repeat the parameter for several; tag_match decides whether a product needs all of them or any.
all (the default): a product must carry every tag. any: at least one.
"all"Value in
- "all"
- "any"
Only products created at or after this time (ISO 8601).
Only products created before this time (ISO 8601).
Only products created by these users, by user id. Repeat the parameter for several.
true: only products with comments. false: only products without.
true: only products with a warning. false: only products without.
Only products of these shape classes: regular, wall, cylindrical, character or painting. Repeat the parameter for several.
Only products created from these sources: image, video, url or model. Repeat the parameter for several.
What to sort by: created_at (the default) or title.
"created_at"Value in
- "created_at"
- "title"
desc (the default) or asc.
"desc"Value in
- "asc"
- "desc"
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/products"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b", "title": "string", "custom_id": "string", "tags": [ "string" ], "status": "awaiting_review", "display_status": "published", "published": false, "form": "string", "source_type": "image", "price": 0, "currency": "string", "height": 0, "width": 0, "depth": 0, "display_unit": "mm", "images_ordered": false, "thumbnail_url": "string", "has_warnings": false, "warning_count": 0, "comment_count": 0, "image_count": 0, "model_status": "planned", "owner": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "display_name": "string", "email": "string" }, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "viewer_url": "string" } ], "total": 0, "limit": 0, "offset": 0}{ "error": { "code": "string", "message": "string", "details": null }}The Health object
What the health check answers.
Create a product POST
Creates a product in two calls. 1. Send exactly one source - `image_urls`, `image_paths`, `video_url` or `source_url` - with the `draft`, `order` and `overrides`. The source is analyzed and the answer is `200` with a quote: the image plan, whether a 3D model can be built, the price in credits, and a `resume_token`. Nothing is created or charged. 2. Send the `resume_token` back (it is valid for 7 days and works once). The answer is `202` with the product, and generation starts. You may change the `draft` on this call; a different `order` or any `overrides` is a `400` - request a new quote instead. A `model_url` (a finished GLB) skips the quote and answers `202` at once. `402` when the organization's plan does not allow it; `429` when it has too few credits (`details.shortfall_credits`); `409` for a token already used or a `custom_id` already taken.