Skip to main content
POST
/
api
/
products
cURL
curl -X POST 'https://clarus-api.com/api/v1/products' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'X-Clarus-Subdomain: your-subdomain' \
  -d '{
    "data": {
      "type": "products",
      "attributes": {
        "code": "SKU-001",
        "description": "Widget A - Standard Size",
        "stock_unit_type_id": 1,
        "barcode": "5012345678901"
      }
    }
  }'
{
  "data": {
    "id": 123,
    "type": "products",
    "attributes": {
      "description": "<string>",
      "stock_unit_type_id": 123,
      "code": "<string>",
      "long_description": "<string>",
      "barcode": "<string>",
      "case_barcode": "<string>",
      "inner_barcode": "<string>",
      "outer_barcode": "<string>",
      "commodity_code": "<string>",
      "country_of_manufacture": "<string>",
      "customs_description": "<string>",
      "shelf_life_min": 2,
      "shelf_life_max": 2,
      "stop": true,
      "obsolete": 123,
      "specific_gravity": 123,
      "output_quantity": 1,
      "assemble_on_pick": true,
      "require_dimensions_on_receipt": true,
      "non_hazardous_for_transport": true,
      "external_system_reference1": "<string>",
      "external_system_reference2": "<string>",
      "external_system_reference3": "<string>",
      "string1": "<string>",
      "string2": "<string>",
      "string3": "<string>",
      "string4": "<string>",
      "string5": "<string>",
      "integer1": 123,
      "integer2": 123,
      "integer3": 123,
      "integer4": 123,
      "integer5": 123,
      "datetime1": "2023-11-07T05:31:56Z",
      "datetime2": "2023-11-07T05:31:56Z",
      "datetime3": "2023-11-07T05:31:56Z",
      "datetime4": "2023-11-07T05:31:56Z",
      "datetime5": "2023-11-07T05:31:56Z",
      "boolean1": true,
      "boolean2": true,
      "boolean3": true,
      "boolean4": true,
      "boolean5": true
    }
  }
}

Request Structure

{
  "data": {
    "type": "products",
    "attributes": {
      "code": "SKU-001",
      "description": "Widget A - Standard Size",
      "stock_unit_type_id": 1,
      "barcode": "5012345678901",
      "commodity_code": "84719000",
      "country_of_manufacture": "GB",
      "shelf_life_min": 30,
      "shelf_life_max": 365
    }
  }
}

Key Fields

FieldRequiredDescription
codeNoUnique product SKU code
descriptionYesShort product description
stock_unit_type_idYesUnit of measure type ID
barcodeNoPrimary product barcode
commodity_codeNoHS code for customs
shelf_life_minNoMinimum shelf life in days
shelf_life_maxNoMaximum shelf life in days

GraphQL Product Lookups

When searching products by code or barcode via GraphQL, use the specific field filter (code, barcode, case_barcode, inner_barcode, outer_barcode) if you know which field the value belongs to. Each supports eq, ilike, in, like, and between operators. Use the all_codes filter only when you have a code/barcode value but don’t know which field it belongs to (e.g., scanning an unknown barcode). all_codes performs an exact-match OR across all 5 code fields. Do not use it when a specific field filter would suffice.

Authorizations

Authorization
string
header
required

OAuth 2.0 authentication. Use the client credentials or authorization code flow to obtain an access token.

X-Clarus-Subdomain
string
header
required

The subdomain/tenant name identifying which tenant's data to access. Required for all API requests.

Body

application/json
data
object
required

Response

Product created successfully

data
object