---
title: "Édite une commande en 'draft' (notes, dates, site, devise, lignes)."
method: PATCH
path: "/api/v1/sales-orders/{order_id}"
tags: ["CRM — Commandes client"]
---

# Édite une commande en 'draft' (notes, dates, site, devise, lignes).

`PATCH /api/v1/sales-orders/{order_id}`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/sales-orders/{order_id}`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Édite une commande en 'draft' (notes, dates, site, devise, lignes).

    409 si la commande n'est plus en brouillon. Recalcule les totaux et
    resynchronise les réservations de stock quand les lignes changent.

**Permissions requises** : `crm:write`

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `400`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `401`: JWT manquant, expiré ou révoqué.
- `402`: L'organisation n'a pas d'abonnement actif (paywall). Rediriger vers /activate.
- `403`: Permissions `module:action` insuffisantes pour cette route.
- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `409`: État incohérent (email dupliqué, ressource déjà dans cet état, etc.).
- `422`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
