Create a product from an uploaded image
POST
/v1/products
const url = 'https://example.com/v1/products';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"upload_asset_public_id":"example","title":"example","external_ref":"example","description":"example","garment_category_public_id":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/v1/products \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "upload_asset_public_id": "example", "title": "example", "external_ref": "example", "description": "example", "garment_category_public_id": "example" }'Turn an image from POST /v1/uploads into a product you can sell.
Free: creating a product runs no generation, so no credits move.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
ProductCreateRequest
Create a product from an image you have already uploaded.
Ownership is taken from your credential — there is no owner field to send.
Supplying external_ref makes the call idempotent: re-posting the same
reference updates that product instead of creating a duplicate.
object
Examplegenerated
{ "upload_asset_public_id": "example", "title": "example", "external_ref": "example", "description": "example", "garment_category_public_id": "example"}Responses
Section titled “Responses”Successful Response
Media typeapplication/json
ProductResponse
One product owned by the authenticated client.
object
public_id
required
Public Id
string
title
required
Title
string
category
Any of:
ProductCategoryResponse
The garment category a product sits in, resolved for display.
object
public_id
required
Public Id
string
key
required
Key
Canonical taxonomy key, e.g. ethnic_top.
string
display_label
required
Display Label
string
null
status
required
Status
active | archived.
string
images
Images
Array<object>
ProductImageResponseOne image on a product.
object
asset_public_id
required
Asset Public Id
string
role
required
Role
primary | gallery | source_pdp.
string
position
required
Position
integer
image_url
required
Image Url
Short-lived presigned URL; not an input handle.
string
created_at
required
Created At
string format: date-time
Examplegenerated
{ "public_id": "example", "title": "example", "external_ref": "example", "category": { "public_id": "example", "key": "example", "display_label": "example" }, "status": "example", "description": "example", "primary_image_url": "example", "source_pdp_image_url": "example", "images": [ { "asset_public_id": "example", "role": "example", "position": 1, "image_url": "example" } ], "created_at": "2026-04-15T12:00:00Z"}Validation Error
Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationErrorobject
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ]}