Skip to main content
POST
Create Product Profile

Authorizations

Authorization
string
header
required

Generate a JWT access token through a Custom Global Integration and provide it with each request in the Authorization header prefixed with "Bearer" and then a single space.

Query Parameters

fields
enum<string>[]

Select fields of the ProductProfile object. See the selecting fields page for more information. Specify fields of the ProductProfile object to include in the response.

Available options:
all,
name,
code,
conditions,
conditions_readable,
matched_count,
classification,
created_at,
updated_at

Body

application/json
name
string
required

Human-readable Product Profile name.

Required string length: 1 - 255
Example:

"Lightweight Parcel"

conditions
object
required

A one-level OR-of-AND condition tree. The server accepts the {"and": [...]} shorthand for a single group and always returns the canonical {"or": [{"and": [...]}]} form.

OpenAPI validates the structural envelope. ShipStream remains authoritative for available Product fields, field/operator compatibility, option values, measurement units, raw CEL validity, normalization, the limit of 64 condition rows across all groups, and the 65,535-byte compiled-expression limit. Editor clients can load the applicable Product field catalogue from GET /api/global/v1/inventory/product-profiles/condition-fields or GET /api/global/v1/inventory/handling-classes/condition-fields.

Example:
code
string

Optional stable code; blank or omitted values are generated from the name.

Maximum string length: 64
Pattern: ^[A-Za-z0-9_]*$
Example:

"lightweight_parcel"

Response

Product Profile created and classification scheduled.

resource
ProductProfile · object

A reusable Product classification whose conditions may match many Products. Classification is asynchronous: after a create or condition update, poll the resource until classification.status is up_to_date. This status confirms that the Profile's current conditions were classified. Product changes flow through a separate asynchronous changelog and may not appear immediately in materialized membership.

Example: