Skip to main content

Create Product Category

Create a new product category.

Endpointโ€‹

POST /v1/product-categories

Authenticationโ€‹

Requires an API key with the products:write scope.

Request Bodyโ€‹

FieldTypeRequiredDescription
namestringYesCategory name (max 255 characters)
descriptionstringNoCategory description
parent_idintegerNoParent category ID for creating subcategories
apply_toarrayNoOther booking types to also create this category in: experiences, store

Linked Categoriesโ€‹

Use apply_to to make the same category available across booking types โ€” for example, a "Bikes" category that appears in both rentals and experiences. EquipDash creates a mirror category in each listed booking type (or adopts an existing unlinked category with the same name) and links them as one group. Linked categories share their name, description, and image, so updating any member syncs the others. The linked_types response field lists the other booking types a category is linked to.

Example Requestโ€‹

curl -X POST "https://app.equipdash.com/api/v1/product-categories" \
-H "Authorization: Bearer eqd_live_abc123xyz789..." \
-H "Content-Type: application/json" \
-d '{
"name": "Mountain Bikes",
"description": "Full suspension and hardtail mountain bikes",
"parent_id": 1,
"apply_to": ["experiences"]
}'

Responseโ€‹

Success (201 Created)โ€‹

{
"data": {
"id": 3,
"name": "Mountain Bikes",
"description": "Full suspension and hardtail mountain bikes",
"image": null,
"parent_id": 1,
"parent": {
"id": 1,
"name": "Bikes"
},
"children": [],
"product_count": 0,
"linked_types": ["experiences"],
"created_at": "2026-01-15T12:00:00+00:00",
"updated_at": "2026-01-15T12:00:00+00:00"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-01-15T12:00:00+00:00"
}
}

Errorsโ€‹

StatusCodeDescription
400validation_errorInvalid input data
401authentication_requiredNo API key provided
401invalid_api_keyInvalid API key
403insufficient_scopeAPI key lacks products:write scope

Validation Errorsโ€‹

{
"error": {
"code": "validation_error",
"message": "The given data was invalid.",
"details": {
"name": ["The name field is required."],
"parent_id": ["The selected parent category does not belong to your account."]
}
},
"meta": {
"request_id": "req_abc123"
}
}

Notesโ€‹

  • The parent_id must reference a category that belongs to your account
  • Categories can be nested to create a hierarchy (e.g., Bikes > Mountain Bikes > Full Suspension)
  • apply_to accepts only the other booking types: experiences and store