Apply Product Type Proposals
POST/api/v2/product-types/proposals/:trackedJobLog/apply
Write the decisions taken on a proposal run. Per product, send one of: an existing active leaf product_type_id; a new_type_path to create (Parent > Leaf, 1–3 segments — segments that already exist are reused case-insensitively, an archived match is restored, and the leaf becomes the product's type); or neither, to clear the product's type. Leave out the products whose proposal you rejected. Records applied_at on the run.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Fields:
decisions(required, array, 1–500)decisions[].product_id(required, integer)decisions[].product_type_id(nullable, integer) — an active leaf typedecisions[].new_type_path(nullable, string, max 400) — takes precedence overproduct_type_idwhen both are given
Response data: assigned (products given a type), cleared (products whose type was removed), created_types[] ({id, path} of every type created by this call).
Requires permission: product_types.update
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not Found
Response Headers
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.