---
title: "Crear un producto de negocio | Documentación de Ordering.co"
description: "Usa POST /business/{business_id}/categories/{category_id}/products para crear un producto."
canonical: https://docs.ordering.co/es/api-reference/guides/create-product/
---

# Crear un producto de negocio

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

Usa `POST /business/{business_id}/categories/{category_id}/products` para crear un producto. La operación descrita aquí es `Product.register`.

El esquema documentado requiere autenticarse como administrador o administrador de negocio y actualmente exige `category_id`, `name` y `price`. Los demás campos, medios, extras, impuestos, inventario, límites y datos dietéticos dependen del esquema de la operación.

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

Esta sintaxis de SDK es histórica. Confirma el paquete y la versión antes de usarla.

## Referencia de OpenAPI

**Operación:** `POST /business/{business_id}/categories/{category_id}/products`

**Parámetros de ruta**

| Nombre        | Tipo    | Obligatorio | Descripción |
| ------------- | ------- | ----------- | ----------- |
| `business_id` | integer | Sí          | —           |
| `category_id` | integer | Sí          | —           |

**Campos del cuerpo de la solicitud**

| Nombre                      | Tipo            | Obligatorio |
| --------------------------- | --------------- | ----------- |
| `allergens`                 | array \| null   | No          |
| `barcode`                   | string \| null  | No          |
| `barcode_alternative`       | string \| null  | No          |
| `calories`                  | number \| null  | No          |
| `category_id`               | integer         | Sí          |
| `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             | Sí          |
| `offer_include_options`     | boolean         | No          |
| `offer_rate`                | number          | No          |
| `offer_rate_type`           | integer         | No          |
| `price`                     | number          | Sí          |
| `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          |

**Respuestas**

| Código | Descripción                                                                                                                                                                                                                                                                        |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200    | Respuesta exitosa. El contenido de `result` varía según la operación y se devuelve como JSON.                                                                                                                                                                                      |
| 400    | Respuesta de error (error=true). Los errores de validación y de negocio comparten este código.                                                                                                                                                                                     |
| 401    | Respuesta de error: sesión ausente, inválida, o nivel de usuario fuera de los permitidos. Respuesta de error: el proyecto no existe o no tiene una suscripción activa.                                                                                                             |
| 404    | Respuesta vacía: la versión de API solicitada no está admitida.                                                                                                                                                                                                                    |
| 429    | Envelope de error: se excedió un límite de consumo del proyecto (o el sujeto está baneado). Lleva Retry-After y X-RateLimit-Limit/Remaining/Reset/Scope/Key.                                                                                                                       |
| 500    | Respuesta de error: falló la búsqueda o inicialización del proyecto.                                                                                                                                                                                                               |
| 503    | Envelope de error: la aplicación está temporalmente en mantenimiento. Envelope de error: el proyecto está temporalmente en mantenimiento, o los límites de consumo no se pudieron evaluar y el límite aplicable está configurado con on\_error = closed (cabecera Retry-After: 1). |

[Abrir esta operación en la Referencia de la API](https://docs.ordering.co/es/api-reference/#tag/business/POST/business/{business_id}/categories/{category_id}/products)
