Create a product
/v1/productsCreates a product in two calls.
- Send exactly one source -
image_urls,image_paths,video_urlorsource_url- with thedraft,orderandoverrides. The source is analyzed and the answer is200with a quote: the image plan, whether a 3D model can be built, the price in credits, and aresume_token. Nothing is created or charged. - Send the
resume_tokenback (it is valid for 7 days and works once). The answer is202with the product, and generation starts. You may change thedrafton this call; a differentorderor anyoverridesis a400- 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.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Creates a product in two calls. Send exactly one source - image_urls, image_paths,
video_url, source_url or model_url - and the first call returns a quote with a
resume_token. Send the resume_token (and nothing else as a source) to commit the quote and
start generation. A model_url skips the quote: the finished model is stored at once.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/products" \ -H "Content-Type: application/json" \ -d '{}'{ "status": "parked", "resume_token": "string", "expires_at": "2019-08-24T14:15:22Z", "form": "string", "title": "string", "description": "string", "subject": "", "wall_mounted": false, "dimensions": { "height": 1, "width": 1, "depth": 1 }, "display_unit": "mm", "flags": { "transparent": false, "geometry_risk": false, "texture_risk": false, "source_quality": "ok", "reasons": [ { "code": "string", "sentence": "string" } ] }, "warnings": [ "string" ], "plan": [ { "view": "string", "kind": "wanted", "stands_for": "string", "status": "planned", "evidence": "string", "reason_code": "string", "reason": "string", "deliverable": true, "route": "reuse", "photo": 0, "pins": [ 0 ], "azimuth": "string", "tilt": "string", "flagged": false } ], "model": { "ordered": true, "allowed": true, "blocked_by": [ "string" ], "views": [ "string" ], "unseen_views": [ "string" ] }, "cost": { "images": 0, "image_credits": 0, "model_credits": 0, "total_credits": 0 }, "generate_unseen": false, "force_model": false, "painting": { "usable": true, "framed": true, "reason": "string", "suggested_dimensions_of": "canvas" }}{ "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", "description": "string", "wall_mounted": false, "product_type": "string", "material_words": "string", "transparent": false, "metadata": {}, "sources": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "kind": "photo", "url": "string", "original_name": "string", "position": 0, "azimuth": "string", "tilt": "string", "clean": true, "created_at": "2019-08-24T14:15:22Z" } ], "images": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "view": "string", "kind": "wanted", "stands_for": "string", "status": "planned", "skip_reason": "string", "route": "reuse", "source": "photograph", "evidence": "string", "azimuth": "string", "tilt": "string", "source_photo_id": "a7f5490c-d09d-4c87-9733-d1cad32c6e5a", "attempts": 0, "flagged": false, "cut_flagged": false, "cut_problems": "string", "review_status": "pending", "filename": "string", "alt_text": "string", "filename_override": "string", "alt_override": "string", "shadow_override": { "mode": "silhouette", "tone": [ 0, 0, 0 ], "silhouette": { "length": 0, "lean": 0, "blurNear": 0, "blurFar": 0, "opacity": 0, "distanceFade": 0 }, "contact": { "trailPx": 0, "dark": 0, "end": 0, "midpoint": 0, "regionHeight": 0 }, "ground": { "nudge": 0, "tilt": 0 } }, "background_override": [ 0, 0, 0 ], "frame_scale": 0, "contact_regions": [ [ 0 ] ], "raw_url": "string", "cutout_url": "string", "warnings": [ { "kind": "cut", "scope": "image", "title": "string", "detail": "string", "view": "string" } ], "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ], "model": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "status": "planned", "review_status": "pending", "thumbnail_url": "string", "scale_factor": 0, "width_axis": "x", "flags": { "transparent": false, "geometry_risk": false, "texture_risk": false, "source_quality": "ok", "reasons": [ { "code": "string", "sentence": "string" } ] }, "warnings": [ { "kind": "cut", "scope": "image", "title": "string", "detail": "string", "view": "string" } ], "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z" }, "warnings": [ { "kind": "cut", "scope": "image", "title": "string", "detail": "string", "view": "string" } ], "open_request_count": 0, "painting": { "edge": "frame", "edge_color": "string", "dimensions_of": "canvas", "canvas_width_cm": 0, "canvas_height_cm": 0, "depth_cm": 0, "has_frame": false, "rebuild": { "status": "running", "requested": { "edge": "frame", "edge_color": "string", "dimensions_of": "canvas", "canvas_width_cm": 0, "canvas_height_cm": 0, "depth_cm": 0, "frame_width_cm": 0, "frame_height_cm": 0 }, "requested_at": "2019-08-24T14:15:22Z", "error": "string" } }, "viewer_desktop": "viewer", "viewer_mobile": "viewer"}{ "error": { "code": "string", "message": "string", "details": null }}List products GET
Lists 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).
Delete products DELETE
Deletes up to 100 products by `ids`. Answers `200` with each id's outcome: `affected`, `not_found`, or `forbidden`.