Skip to content

Publish a complete draft

POST
/v1/garments/{garment_id}/publish
curl --request POST \
--url https://api.tryyoursize.com/v1/garments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/publish \
--header 'Authorization: Bearer <token>'

Key scopes: garments:publish. A secret key (sk_) has every scope; a restricted key (rk_) needs the scopes listed.

The version shoppers are fitted against from now on, for every product of its fit group. The same checks as Studio: every required point of measure for every size, fabric, the fit approval when the store requires it, every shop size mapped, and the plan’s styles (402). Test answers drafts, live answers published versions only.

garment_id
required
string format: uuid

A garment version (garment_versions.id). A fit group (garments table) is fit_group_id.

Idempotency-Key
string
>= 1 characters <= 255 characters

A unique value per logical request (a UUID v4 is ideal), 1-255 printable ASCII characters. With a secret or restricted key, the first response is stored for 24 hours per store and mode: a retry with the same key and the same body gets the stored response back (header Idempotent-Replayed: true); the same key with a different body is 422 idempotency_key_reused; a retry while the first request still runs is 409 idempotency_key_in_use. Responses with a 5xx status are not stored, so a retry runs again.

Published

Media typeapplication/json
object
id
required
string format: uuid
product_id
required
string format: uuid
version
required
integer
status
required
string
Allowed values: draft published retired
category
required

The garment type; it sets which POMs are needed (footwear has a size chart instead).

string
Allowed values: tshirt shirt sweater jacket dress skirt jeans trousers shorts leggings polo hoodie footwear
fit_intent
required

The designer’s intended silhouette; sets the ease targets the fit judgement compares against.

string
Allowed values: skinny slim regular relaxed oversized
sizes
required
Array<string>
poms
required

Garment measurements per size: size label → POM code → millimetres. Widths are flat half-measurements. See GET /v1/studio/garment_dictionary for codes and plausible ranges.

object
key
additional properties
object
key
additional properties
number format: double
grading

How the POM table was derived: the base size’s values plus, per POM, the increment (mm) between each pair of consecutive sizes (len = number of sizes - 1). The table stays the source of truth.

object
base_size
required
string
increments_mm
required
object
key
additional properties
Array<number>
fabric
required

What the tech pack / mill sheet says.

object
name
string
construction
string
Allowed values: jersey rib interlock fleece pique plain_weave twill denim satin other
composition
required
Array<object>
object
fiber
required
string
Allowed values: cotton polyester elastane viscose modal lyocell wool linen polyamide silk acrylic other
pct
required
number format: double
weight_gsm

Areal density, g/m².

number format: double
stretch_warp_pct

Stretch along the warp (lengthwise), percent.

number format: double
stretch_weft_pct

Stretch along the weft (crosswise), percent.

number format: double
notes
string
import_id
string format: uuid
issues
required

What still blocks publishing (errors) or deserves a look (warnings).

Array<object>
object
severity
required
string
Allowed values: error warning
code
required

E.g. out_of_range, not_graded, missing_pom, composition_total

string
field
required

Category | fit_intent | sizes | poms | grading | import | fabric.

string
size
string
pom
string
params

The values in message, for clients that word the finding in their own language (keys depend on code, e.g. value_mm, min_mm, max_mm, prev_size, fiber, max). Numbers are plain decimals (“.” separator); lengths in mm.

object
key
additional properties
string
message
required

English text; clients in other languages can word it from code, size, pom and params.

string
created_at
required
string format: date-time
updated_at
required
string format: date-time
published_at
string format: date-time
season
string
tolerances_mm

Spec-sheet tolerance per POM code, ± mm (e.g. {“chest_width”: 10}). Optional; the flat preview uses ±5 mm when a POM has none.

object
key
additional properties
number format: double
spec_source

Where the POM table came from, kept for audit. Set by Studio’s paste/import.

object
kind
required
string
Allowed values: manual paste xlsx csv pdf workbook clo browzwear
filename
string
<= 255 characters
footwear

A footwear version’s size chart (category footwear). The version’s sizes must be the chart’s labels in the chart’s size_system, in row order (fittings collapsed). Footwear has no POMs and no 3D fit check.

object
shoe_type
required

Sets the room left in front of the toes that a size is chosen for.

string
Allowed values: sneaker dress boot sandal
size_system
required

A shoe size system: eu (Paris points), uk, us_men, us_women, or mondopoint (foot length in mm).

string
Allowed values: eu uk us_men us_women mondopoint
basis
required

What length_mm is: the foot length each size is made for (foot_length), the longest foot for the size (foot_length_max, “up to 25.5 cm”), or the shoe’s inside (last) length (last_length).

string
Allowed values: foot_length foot_length_max last_length
rows
required
Array<object>
<= 120 items

One size (and width fitting) of a footwear size chart. Lengths in millimetres.

object
labels
required

The size’s label in each system the brand uses, e.g. {“eu”: “40”, “uk”: “6.5”}. The label in the chart’s size_system is the size shoppers and the store see.

object
key
additional properties
string
<= 16 characters
length_mm
required

The length the chart’s basis names (foot length, longest foot, or the shoe’s inside length).

number format: double
fitting

Optional width fitting, e.g. narrow, regular, wide, E, EE. Rows of one size share its length.

string
<= 16 characters
width_mm

Optional width at the ball (inside the shoe, or the foot width the fitting is made for).

number format: double
girth_mm

Optional ball girth.

number format: double
elastic_waist

Waistband: true = elastic pull-on, false = fixed band (button or zip), null = not stated.

boolean
nullable
elastic_waist_inferred

True when elastic_waist was inferred from text, not stated by the brand.

boolean
fit_group_id

The fit group (garments row) this version belongs to (absent until grouped).

string format: uuid
rise_type

Where the waistband is worn (bottoms); null = not stated.

string
nullable
Allowed values: low mid high
rise_type_inferred

True when rise_type was inferred from text, not stated by the brand.

boolean
worn_at_mm

Height of the waistband top relative to the natural waist, mm, negative = below; null = derived from the rise measurements.

number format: double
nullable

Example

{
"status": "draft",
"category": "tshirt",
"fit_intent": "skinny",
"fabric": {
"construction": "jersey",
"composition": [
{
"fiber": "cotton"
}
]
},
"issues": [
{
"severity": "error"
}
],
"spec_source": {
"kind": "manual"
},
"footwear": {
"shoe_type": "sneaker",
"size_system": "eu",
"basis": "foot_length"
},
"rise_type": "low"
}

Missing or invalid credentials

Media typeapplication/json

Every error has this shape. error is a human-readable message, status the HTTP status. code is stable and machine-readable; doc_url links its explanation; request_id identifies the request (also in the X-Request-ID response header): quote it to support.

object
error
required
string
status
required
integer
code

Stable error code, e.g. invalid_request, unauthorized, reauth_required, payment_required, forbidden, not_found, conflict, unprocessable, rate_limited, internal_error, not_implemented, unavailable, invalid_api_version, idempotency_key_in_use, idempotency_key_reused, invalid_idempotency_key, handle_expired, handle_invalid.

string
doc_url
string format: uri
request_id
string

Example

{
"code": "not_found",
"doc_url": "https://docs.tryyoursize.com/api/errors/#not_found"
}

Not allowed

Media typeapplication/json

Every error has this shape. error is a human-readable message, status the HTTP status. code is stable and machine-readable; doc_url links its explanation; request_id identifies the request (also in the X-Request-ID response header): quote it to support.

object
error
required
string
status
required
integer
code

Stable error code, e.g. invalid_request, unauthorized, reauth_required, payment_required, forbidden, not_found, conflict, unprocessable, rate_limited, internal_error, not_implemented, unavailable, invalid_api_version, idempotency_key_in_use, idempotency_key_reused, invalid_idempotency_key, handle_expired, handle_invalid.

string
doc_url
string format: uri
request_id
string

Example

{
"code": "not_found",
"doc_url": "https://docs.tryyoursize.com/api/errors/#not_found"
}

Not found

Media typeapplication/json

Every error has this shape. error is a human-readable message, status the HTTP status. code is stable and machine-readable; doc_url links its explanation; request_id identifies the request (also in the X-Request-ID response header): quote it to support.

object
error
required
string
status
required
integer
code

Stable error code, e.g. invalid_request, unauthorized, reauth_required, payment_required, forbidden, not_found, conflict, unprocessable, rate_limited, internal_error, not_implemented, unavailable, invalid_api_version, idempotency_key_in_use, idempotency_key_reused, invalid_idempotency_key, handle_expired, handle_invalid.

string
doc_url
string format: uri
request_id
string

Example

{
"code": "not_found",
"doc_url": "https://docs.tryyoursize.com/api/errors/#not_found"
}

Conflicts with the current state (duplicate SKU, editing a published version)

Media typeapplication/json

Every error has this shape. error is a human-readable message, status the HTTP status. code is stable and machine-readable; doc_url links its explanation; request_id identifies the request (also in the X-Request-ID response header): quote it to support.

object
error
required
string
status
required
integer
code

Stable error code, e.g. invalid_request, unauthorized, reauth_required, payment_required, forbidden, not_found, conflict, unprocessable, rate_limited, internal_error, not_implemented, unavailable, invalid_api_version, idempotency_key_in_use, idempotency_key_reused, invalid_idempotency_key, handle_expired, handle_invalid.

string
doc_url
string format: uri
request_id
string

Example

{
"code": "not_found",
"doc_url": "https://docs.tryyoursize.com/api/errors/#not_found"
}

Values to fix (each issue points at the field, size and POM)

Media typeapplication/json
object
error
required
string
status
required
integer
issues
required
Array<object>
object
severity
required
string
Allowed values: error warning
code
required

E.g. out_of_range, not_graded, missing_pom, composition_total

string
field
required

Category | fit_intent | sizes | poms | grading | import | fabric.

string
size
string
pom
string
params

The values in message, for clients that word the finding in their own language (keys depend on code, e.g. value_mm, min_mm, max_mm, prev_size, fiber, max). Numbers are plain decimals (“.” separator); lengths in mm.

object
key
additional properties
string
message
required

English text; clients in other languages can word it from code, size, pom and params.

string

Example

{
"issues": [
{
"severity": "error"
}
]
}

Was this page helpful?