---
title: "Create a business product"
description: "Use POST /business/{business_id}/categories/{category_id}/products to create a product."
canonical: https://docs.ordering.co/api-reference/guides/create-product/
---

# Create a business product

> **API operation:** [Open the endpoint in Scalar](https://docs.ordering.co/api-reference/#tag/business/POST/business/{business_id}/categories/{category_id}/products)

Use `POST /business/{business_id}/categories/{category_id}/products` to create a product. The operation documented here is `Product.register`.

The documented schema requires administrator or business-manager authentication and currently requires `category_id`, `name`, and `price`. Optional media, extras, taxes, inventory, limits, and dietary fields depend on the operation schema.

```javascript
const response = await ordering.businesses(businessId).categories(categoryId).products().save()
```

This SDK syntax is historical. Confirm the package and version before using it.

## OpenAPI reference

**Operation:** `POST /business/{business_id}/categories/{category_id}/products`

**Path parameters**

| Name          | Type    | Required | Description |
| ------------- | ------- | -------- | ----------- |
| `business_id` | integer | Yes      | —           |
| `category_id` | integer | Yes      | —           |

**Request body fields**

| Name                        | Type            | Required |
| --------------------------- | --------------- | -------- |
| `allergens`                 | array \| null   | No       |
| `barcode`                   | string \| null  | No       |
| `barcode_alternative`       | string \| null  | No       |
| `calories`                  | number \| null  | No       |
| `category_id`               | integer         | Yes      |
| `cost_offer_price`          | number \| null  | No       |
| `cost_price`                | number \| null  | No       |
| `description`               | any             | No       |
| `dietary_tags`              | array \| null   | No       |
| `duration`                  | integer         | No       |
| `enabled`                   | boolean         | No       |
| `estimated_person`          | integer \| null | No       |
| `external_id`               | any             | No       |
| `extra_snooze_until_data`   | string \| null  | No       |
| `extras`                    | any             | No       |
| `featured`                  | boolean         | No       |
| `fee_id`                    | integer \| null | No       |
| `hide_special_instructions` | boolean         | No       |
| `images`                    | any             | No       |
| `inventoried`               | boolean         | No       |
| `is_hidden`                 | boolean         | No       |
| `maximum_per_order`         | integer \| null | No       |
| `minimum_per_order`         | integer         | No       |
| `name`                      | any             | Yes      |
| `offer_include_options`     | boolean         | No       |
| `offer_rate`                | number          | No       |
| `offer_rate_type`           | integer         | No       |
| `price`                     | number          | Yes      |
| `quantity`                  | integer         | No       |
| `rank`                      | number          | No       |
| `ribbon`                    | string          | No       |
| `seo_description`           | any             | No       |
| `seo_image`                 | any             | No       |
| `seo_keywords`              | any             | No       |
| `seo_title`                 | any             | No       |
| `sku`                       | any             | No       |
| `slug`                      | string \| null  | No       |
| `snooze_until`              | string \| null  | No       |
| `tax_id`                    | integer \| null | No       |
| `taxes`                     | array\<integer> | No       |
| `type`                      | string          | No       |
| `users`                     | array\<integer> | No       |
| `weight`                    | number \| null  | No       |
| `weight_unit`               | any             | No       |

**Responses**

| Code | Description                           |
| ---- | ------------------------------------- |
| 200  | OK (Envelope)                         |
| 400  | Bad Request (ErrorResponse)           |
| 401  | Unauthorized                          |
| 404  | Not Found                             |
| 429  | Too Many Requests (ErrorResponse)     |
| 500  | Internal Server Error (ErrorResponse) |
| 503  | Service Unavailable (ErrorResponse)   |

[Open this operation in the API reference](https://docs.ordering.co/api-reference/#tag/business/POST/business/{business_id}/categories/{category_id}/products)
