---
title: "Deposer Commande"
method: POST
path: "/api/site/commandes"
tags: ["site"]
---

# Deposer Commande

`POST /api/site/commandes`

## Request

- Base URL: `https://api.brm-chronographes.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.brm-chronographes.com/api/site/commandes`
- Auth: none declared

Enregistre une commande — et rien d'autre.

Pas de paiement, pas de facture, pas d'écriture dans Odoo : la commande
arrive dans le Hub avec le statut « nouvelle » et attend qu'un humain la
reprenne. Un client non connecté peut commander (l'email suffit), et sa
commande se rattachera à son compte dès qu'il se connectera avec la même
adresse.

**Pourquoi cet endpoint peut être ouvert sans jeton.** Il n'expose aucune
donnée : il écrit, il ne lit pas. Il ne permet ni de savoir si une adresse
est connue (la réponse est la même dans tous les cas), ni de lire la
commande d'un autre (`GET` n'existe pas ici — seul le Hub authentifié et le
client porteur de son jeton peuvent relire). Il n'encaisse rien, donc rien
ne se déclenche financièrement. Ce qu'il crée, c'est une intention que le
Hub devra reprendre à la main.

Ce qu'il faut protéger, ce n'est donc pas l'accès mais l'ABUS : d'où le
plafond de dix commandes par minute, le refus d'un panier vide, le refus
d'un article indisponible, et surtout le rechiffrage complet côté serveur —
un montant venu du navigateur n'est plus qu'une donnée à vérifier.

## Headers

- `x-site-jeton` string

## Request body

- AppRoutersSiteBoutiqueCommande
  - `email` string, email, nullable
  - `lignes` LigneCommande[], required
    - `type` string
    - `ps_id` integer, nullable
    - `reference` string, nullable
    - `nom` string, required
    - `variante` string, nullable
    - `declinaison` integer, nullable
    - `prix` number
    - `qte` integer
    - `image` string, nullable
    - `options` unknown[], nullable
      - unknown
    - `calques` unknown[], nullable
      - unknown
    - `perso` PersoModel: `perso` d'une ligne du configurateur (contrat du 18/10/2026).
      - `cadran` PersoCadran: Logo client à 6 h : imprimé sur le cadran (plein) ou sur le verre (squelette).
        - `jeton` string, required
        - `support` 'cadran' | 'verre', required
        - `fond_retire` boolean
        - `taille` 70 | 85 | 100 | 115 | 130
      - `couronne` PersoCouronne: Bout de couronne : logo client gravé OU initiales (1 à 3, A–Z / 0–9).
        - `type` 'logo' | 'initiales', required
        - `jeton` string, nullable
        - `initiales` string, nullable
  - `moyen_paiement` string, nullable
  - `echeances` integer, nullable
  - `livraison` string, nullable
  - `facturation` object, nullable
  - `adresse_livraison` object, nullable
  - `societe` object, nullable
  - `gravure` string, nullable
  - `commentaire` string, nullable
  - `cadeau` boolean
  - `cadeau_message` string, nullable
  - `consentement` Consentement: Ce que le client a accepté, quand, et dans quelle version. `accepte` seul ne vaut rien : ce qui est opposable, c'est « il a accepté CETTE version de CE texte, à CETTE date ». La version et le texte viennent du serveur (`site_rgpd`), pas du navigateur — sinon un client pourrait prétendre avoir accepté une version qui n'a jamais existé.
    - `cgv` boolean
    - `newsletter` boolean
    - `version` string, nullable
    - `page` string, nullable
    - `langue` string
  - `langue` string
  - `devise` string, nullable
  - `frais_port` number
  - `code_promo` string, nullable
  - `panier_token` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/brm-chronographes/apis/brm-hub.md) · [All operations](https://skmtc.dev/brm-chronographes/apis/brm-hub/llms.txt) · [OpenAPI document](https://skmtc.dev/brm-chronographes/apis/brm-hub/revisions/f4342ec9ac98?raw)
