> ## Documentation Index
> Fetch the complete documentation index at: https://docs.closient.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Product

> Create a new product (GTIN) and claim it for a brand-owner organization — the programmatic equivalent of the dashboard "Add product" page.

Programmatic equivalent of the dashboard's `products/new/` page. Use this
instead of driving that form when you already have the product's GTIN and
core details.

## When to use

* A brand owner (or an agent acting on their behalf) needs to add a new GTIN
  to Closient and claim it for their organization.
* The GTIN does not already exist on Closient. If it does, use
  `POST /products/api/v1/products/{gtin}/claim` instead — this endpoint
  returns 409 for an existing GTIN.

## Auth

`X-API-Key` header or OAuth token with `products:write` scope. The caller
must be a member of the organization named by `organization_id`.

## Flow

```
POST /products/api/v1/products
```

Body (JSON):

| Field               | Required | Notes                                                 |
| ------------------- | -------- | ----------------------------------------------------- |
| `gtin`              | yes      | GTIN-8/12/13/14; normalized/validated server-side.    |
| `organization_id`   | yes      | Organization claiming the product.                    |
| `product_name`      | no       | Display name as marketed on packaging.                |
| `description`       | no       | Long-form description.                                |
| `country_of_origin` | no       | ISO 3166-1 alpha-2.                                   |
| `net_content`       | no       | Free-text net content (e.g. `"340g"`).                |
| `ingredients`       | no       | Raw ingredient list text; triggers substance parsing. |
| `metadata`          | no       | Arbitrary key/value map (Stripe-style semantics).     |

Returns `201` with the created `ProductOut` on success, `403` if the caller
lacks a role on `organization_id`, `409` if the GTIN is already claimed, `422`
for a malformed GTIN or a banned consumer date-label phrase in a free-text
field (AB 660).

## Notes

* Every other field the dashboard exposes (dimensions, GPC classification,
  images, nutrition, documents, videos) is added afterward via the sibling
  skills — `edit-product-basic-info`, `edit-product-dimensions`,
  `edit-product-classification`, `edit-product-images`,
  `edit-product-ingredients`, `edit-product-nutrition`,
  `edit-product-documents`, `edit-product-videos`.
