---
title: "Create a product with one or more variants (SKU, optional barcode, VAT-inclusive price, VAT rate, cost)"
method: POST
path: "/api/v1/products"
---

# Create a product with one or more variants (SKU, optional barcode, VAT-inclusive price, VAT rate, cost)

`POST /api/v1/products`

## Request

- Base URL: `http://127.0.0.1:4310`
- URL: `http://127.0.0.1:4310/api/v1/products`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sfb_session`

## Request body

- object
  - `name` string, required
  - `description` string
  - `category_id` string, uuid
  - `active` boolean
  - `track_stock` boolean
  - `allow_negative_stock` boolean
  - `variants` object[], required
    - `name` string
    - `sku` string, required
    - `barcode` string
    - `price_minor` integer, required: VAT-inclusive price in pence
    - `vat_rate_bps` 2000 | 500 | 0
    - `cost_minor` integer
    - `low_stock_threshold` integer
    - `active` boolean
  - `idempotency_key` string: Unique per change. Repeating it returns the original result.

## Response `201`

OK

- object

## Other responses

- `400`: Validation error
- `401`: Unauthenticated
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict or invalid state

---

[API](https://skmtc.dev/scalingfirm/apis/tsf-booking-api.md) · [All operations](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/revisions/81704199cd37?raw)
