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

# Modifications granulaires du catalogue

> Créez, modifiez et supprimez des ressources individuelles avec des requêtes ciblées.

Les endpoints granulaires permettent des changements rapides entre deux snapshots complets. Ils recherchent un ID fourni par l’appelant dans son parent et n’écrivent que les lignes concernées. Ils ne reconstruisent ni ne comparent le catalogue complet.

## Créer un produit

Les endpoints de création nécessitent un `Idempotency-Key`.

```bash theme={null}
curl https://server.chataigne.ai/v1/locations/loc_r8v4n2c6tz/catalogs/delivery-menu/products \
  -X POST \
  -H "x-api-key: $CHATAIGNE_API_KEY" \
  -H "Idempotency-Key: create-burger-veggie" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "burger-veggie",
    "name": "Burger végétarien",
    "category_id": "burgers",
    "price": {"amount":11.9,"currency":"EUR"},
    "modifier_group_ids": ["sauces"],
    "disabled": false,
    "out_of_stock": false,
    "restrictions": [],
    "price_overrides": [],
    "bundle_only": false
  }'
```

Le produit retourné expose directement son prix. Il n’existe aucun champ SKU.

## Modifier un produit

`PATCH` applique une fusion. Les champs absents restent inchangés. La valeur explicite `null` efface les champs optionnels comme `description` et `image_url`. Fournir `modifier_group_ids` remplace toute la liste des groupes de ce produit. Fournir `restrictions: []` ou `price_overrides: []` efface ces règles.

```bash theme={null}
curl https://server.chataigne.ai/v1/locations/loc_r8v4n2c6tz/catalogs/delivery-menu/products/burger-veggie \
  -X PATCH \
  -H "x-api-key: $CHATAIGNE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "price":{"amount":12.4,"currency":"EUR"},
    "out_of_stock":true
  }'
```

## Catégories

Utilisez `/categories` pour lister et créer, puis `/categories/{category_id}` pour lire, modifier ou supprimer une catégorie. Une catégorie contenant encore des produits ou formules retourne `409 catalog_resource_in_use` lors d’une suppression.

## Groupes de modifiers et modifiers

Les groupes se trouvent sous `/modifier_groups`. Les modifiers se trouvent sous `/modifier_groups/{modifier_group_id}/modifiers` : le même ID de modifier peut donc être réutilisé dans un autre groupe.

```bash theme={null}
curl https://server.chataigne.ai/v1/locations/loc_r8v4n2c6tz/catalogs/delivery-menu/modifier_groups/sauces/modifiers \
  -X POST \
  -H "x-api-key: $CHATAIGNE_API_KEY" \
  -H "Idempotency-Key: create-hot-sauce" \
  -H "Content-Type: application/json" \
  -d '{"id":"hot-sauce","name":"Sauce piquante","price":{"amount":0.5,"currency":"EUR"}}'
```

Les modifiers acceptent les mêmes champs `disabled`, `out_of_stock`, `restrictions` et `price_overrides` que les produits. Un groupe attaché à un produit ne peut pas être supprimé avant le retrait de cette relation.

## Formules

Les formules référencent des `product_ids` publics, jamais des SKU. Lorsque `lines` est fourni dans le PATCH d’une formule, il remplace atomiquement les lignes de cette formule uniquement.

```json theme={null}
{
  "id": "classic-meal",
  "name": "Menu classique",
  "category_id": "meals",
  "price": { "amount": 16.9, "currency": "EUR" },
  "disabled": false,
  "out_of_stock": false,
  "restrictions": [],
  "price_overrides": [],
  "lines": [
    {
      "id": "main",
      "name": "Choisissez votre burger",
      "min_selections": 1,
      "max_selections": 1,
      "product_ids": ["burger-classic", "burger-veggie"]
    }
  ]
}
```

Les formules acceptent les mêmes champs `disabled`, `out_of_stock`, `restrictions` et `price_overrides`. Un produit référencé par une formule ne peut pas être supprimé avant le retrait de ces références.

## Pagination et erreurs

Les collections acceptent `limit`, `starting_after` et `ending_before` et retournent l’enveloppe standard `{ "object": "list", "data": [], "has_more": false, "url": "…" }`. Consultez la [pagination](/fr/concepts/pagination), les [erreurs](/fr/concepts/errors) et l’[idempotence](/fr/concepts/idempotency).
