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

# Envoyer des commandes hors ligne

> Applique jusqu'à 100 commandes (1 Mo au plus en tout) en tant que membre, dans l'ordre
d'envoi. Chacune est appliquée exactement comme la même modification faite dans
l'application. Chaque commande répond `applied`, `rejected` ou `deferred`. `applied`
vient avec le résultat. `rejected` est définitif et vient avec un `code`, un
`message` et les `fields` invalides. `deferred` signifie que la commande n'a pas été
exécutée : une dépendance n'est pas terminée dans un autre lot, la même commande
s'exécute dans une autre requête, ou le lot a épuisé son budget de 20 secondes. Renvoyez une
commande différée après `retry_after` secondes.

Une commande renvoyée retourne son résultat enregistré avec `replayed: true` et
n'exécute rien. Le même id avec une autre charge utile est rejeté avec
`command_id_reused`. Une commande dont la dépendance a été rejetée est rejetée
avec `dependency_rejected`. Une commande créée il y a plus de 90 jours est
rejetée avec `command_expired`, et une commande que le serveur ne connaît pas avec
`unknown_command`.

Nécessite un jeton d'un appareil enregistré avec `sync:write`, et chaque commande
exige sa propre autorisation, sa propre fonctionnalité de forfait et sa propre portée lorsqu'elle est appliquée.



## OpenAPI

````yaml /openapi.fr-CA.json post /sync/commands
openapi: 3.1.2
info:
  title: StockShift API
  version: 1.0.0
  description: >-
    L'API REST de StockShift. Commencez par les guides sur l'authentification,
    les portées, la pagination, les erreurs et les webhooks.
servers:
  - url: https://app.stockshift.io/api/v1
    description: Production
  - url: https://app.beta.stockshift.io/api/v1
    description: Bêta
security:
  - apiKey: []
  - oauth2: []
tags:
  - name: Actions de stock avec témoin
    description: >-
      Retenir une action de stock pour une deuxième personne, qui recompte à
      l'aveugle et signe, et lire les deux signatures. Le stock ne change qu'une
      fois que le témoin a signé.
  - name: Stock des articles
    description: "Tout sur le stock d'un article\_: où il se trouve, ce qui est promis, comment il est suivi et ce qu'il coûte."
  - name: Transferts
    description: >-
      Déplacer du stock d'un emplacement à un autre, avec un délai de transit
      entre l'expédition et la réception.
  - name: Coûts de revient rendus
    description: >-
      Ajoutez le fret, les droits et les autres frais au coût du stock que vous
      avez reçu.
  - name: Dénombrements de stock
    description: >-
      Comptez ce qui est sur l'étagère, comparez-le à ce que StockShift attend
      et comptabilisez l'écart une fois que quelqu'un l'approuve.
  - name: Emplacements
    description: >-
      Les entrepôts, salles et bacs où le stock est conservé. La plupart des
      appels de stock ont besoin d'un ID d'emplacement venant d'ici.
  - name: Périodes
    description: "Closez chaque mois une fois qu'il est déclaré\_: verrouillez ce qui y est daté, vérifiez que rien n'est resté ouvert et conservez la valeur du stock à sa fin."
  - name: Importations d'inventaire
    description: >-
      Charger le stock d'ouverture à partir d'un fichier CSV, avec un aperçu
      avant toute comptabilisation.
  - name: Demandes de libération
    description: >-
      Demandez à l'AQ de libérer du stock en attente, et refusez ou retirez la
      demande. Libérer le stock la clôt.
  - name: Signataires
    description: "Qui peut signer les actions de stock avec témoin\_: dont l'identité a été vérifiée, comment et quand, et les signatures échouées que les réviseurs doivent voir."
  - name: Stock
    description: >-
      Combien de chaque article se trouve où. Lisez les niveaux, maintenant ou à
      une date passée, et comptabilisez des ajustements lorsque du stock est
      trouvé, perdu ou endommagé.
  - name: Règles de témoin
    description: >-
      Quelles actions de stock attendent qu'une seconde personne recompte et
      signe, comme le retrait d'une substance contrôlée.
  - name: Règles d'allocation
    description: >-
      Quels lots sont prélevés en premier lorsque le stock est réservé ou
      expédié, comme premier à expirer, premier sorti.
  - name: Paramètres d'inventaire
    description: >-
      Comment l'organisation gère le stock, par exemple si le stock peut devenir
      négatif et comment il est évalué.
  - name: Lots
    description: >-
      Des lots de stock qui partagent un numéro de lot, et leur date
      d'expiration.
  - name: Mouvements
    description: >-
      Le registre derrière chaque niveau de stock. Les mouvements ne sont jamais
      modifiés ; on en corrige un en le contrepassant.
  - name: Numéros de série
    description: Les unités suivies individuellement, et où se trouve chacune maintenant.
  - name: Mouvements de stock
    description: >-
      Déplacer du stock d'un emplacement à un autre en une seule étape, par
      exemple d'un quai à une tablette, et annuler un déplacement en entier.
  - name: Aperçus en lot
    description: >-
      Vérifiez une liste de lignes de stock avant un déplacement, un ajustement,
      une retenue ou une impression en lot, et voyez ce que chaque ligne demande
      de décider.
  - name: Articles
    description: >-
      Les produits et matières que vous stockez, achetez, fabriquez ou vendez.
      L'ID ou l'UGS d'un article est ce que la plupart des autres points de
      terminaison demandent.
  - name: Familles
    description: >-
      Des groupes d'articles qui ne diffèrent que par des options comme la
      taille ou la couleur, et les variantes qui en sont issues.
  - name: Importations du catalogue
    description: >-
      Créez ou mettez à jour des articles à partir d'un fichier CSV, avec un
      aperçu avant que quoi que ce soit soit enregistré.
  - name: Champs personnalisés
    description: >-
      Des champs supplémentaires que l'organisation ajoute à ses articles.
      Définissez-les ici, puis définissez leurs valeurs sur chaque article.
  - name: Bibliothèque de produits
    description: >-
      Rechercher un produit par son GTIN et créer un article à partir de ce que
      la bibliothèque en sait.
  - name: Unités
    description: >-
      Unités de mesure, comme each, box ou kg. Les articles se comptent dans une
      unité de base et se convertissent à partir des autres.
  - name: Balayage
    description: >-
      Transformer un code-barres balayé en l'article, l'unité ou la pièce
      étiquetée qu'il identifie.
  - name: Fournisseurs
    description: >-
      Les entreprises auprès de qui vous achetez, les personnes avec qui vous
      traitez là-bas et ce qu'elles vous facturent.
  - name: Bons de commande
    description: >-
      Des commandes aux fournisseurs. Rédigez-en une en brouillon, approuvez-la,
      envoyez-la et recevez-y les marchandises.
  - name: Importations d'achats
    description: Charger des fournisseurs et leurs catalogues à partir de fichiers CSV.
  - name: Paramètres d'achats
    description: >-
      Comment l'organisation achète, par exemple le seuil d'approbation et de
      combien une réception peut dépasser la commande.
  - name: Réceptions
    description: >-
      Les marchandises reçues pour des bons de commande. Contrepassez une
      réception pour la corriger, ou imprimez des étiquettes pour ce qui est
      arrivé.
  - name: Fournisseurs d'articles
    description: Quels fournisseurs vendent un article, et à quel prix.
  - name: Exportations d'achats
    description: >-
      Téléchargez des fournisseurs ou leurs catalogues en CSV, avec les mêmes
      colonnes que celles que l'importation lit.
  - name: Commandes client
    description: >-
      Les commandes des clients. Prenez-en une en brouillon, confirmez-la pour
      retenir du stock, puis expédiez-la et facturez-la.
  - name: Clients
    description: >-
      Les entreprises à qui vous vendez et les personnes avec qui vous traitez
      là-bas.
  - name: Factures
    description: >-
      Les factures de ce que vous avez vendu, et les paiements consignés à leur
      égard.
  - name: Listes de prix
    description: >-
      Les prix qu'un client paie, avec des paliers de quantité. Donnez une liste
      de prix à un client et ses commandes se tarifent d'elles-mêmes.
  - name: Soumissions
    description: >-
      Des offres aux clients. Une soumission acceptée devient une commande
      client.
  - name: Taux de taxe
    description: Les taux de taxe de vente auxquels les factures sont facturées.
  - name: Importations de ventes
    description: Charger des clients et des listes de prix à partir de fichiers CSV.
  - name: Retours
    description: "Les marchandises que les clients renvoient\_: autoriser le retour, puis le recevoir en stock et le créditer."
  - name: Expéditions
    description: Ce qui a quitté le bâtiment pour chaque commande client.
  - name: Paramètres de ventes
    description: >-
      Comment l'organisation vend, par exemple quand le stock est réservé et si
      les factures peuvent partir avant l'expédition.
  - name: Certificats de conformité
    description: >-
      Certificats signés attestant que les marchandises d'une expédition sont
      conformes à la commande, conservés exactement tels qu'ils ont été signés.
  - name: Prix
    description: >-
      Demander ce qu'un client paierait pour une quantité d'un article avant de
      la mettre sur une commande.
  - name: Exportations de ventes
    description: >-
      Téléchargez des clients et des listes de prix en CSV, avec les mêmes
      colonnes que celles que l'importation lit.
  - name: Ordres de fabrication
    description: >-
      Des ordres pour fabriquer quelque chose. Lancez un ordre de fabrication à
      l'atelier, sortez ses pièces et terminez-le en stock.
  - name: Réparations
    description: "Les réparations d'unités que les clients renvoient\_: vérifier la garantie, enregistrer les pièces posées et retirées, puis terminer la réparation ou la facturer."
  - name: Gammes
    description: >-
      Les étapes que traverse un ordre de fabrication et le poste de travail où
      chaque étape s'exécute.
  - name: Postes de travail
    description: >-
      Les machines, cellules ou équipes où les étapes d'une gamme sont
      réalisées.
  - name: Conditions de garantie
    description: >-
      Combien de temps un article est sous garantie et si la durée compte à
      partir de l'expédition ou de la fabrication, avec des conditions propres à
      certains clients.
  - name: Traçabilité
    description: >-
      Retracer un lot ou un numéro de série jusqu'à ce qui y est entré, ou vers
      l'avant jusqu'à ce dans quoi il est entré.
  - name: Paramètres de fabrication
    description: >-
      Comment l'organisation fabrique, par exemple si les opérations peuvent se
      chevaucher et le statut dans lequel vont les produits finis.
  - name: Planification
    description: Planifier les ordres de fabrication ouverts sur les jours ouvrables.
  - name: Écarts de coût
    description: >-
      Là où un ordre de fabrication terminé a coûté plus ou moins que son coût
      standard.
  - name: Nomenclatures
    description: "Nomenclatures\_: les pièces et les quantités qui entrent dans un article, conservées sous forme de révisions."
  - name: Modifications techniques
    description: >-
      Des ordres de modification qui proposent de nouvelles révisions de
      nomenclature et les lancent une fois approuvés.
  - name: Importations d'ingénierie
    description: >-
      Charger des nomenclatures à partir d'un fichier CSV ou d'une exportation
      CAO.
  - name: Paramètres d'ingénierie
    description: >-
      Comment l'organisation gère les modifications techniques, par exemple
      combien d'approbations un ordre de modification nécessite.
  - name: Exportations d'ingénierie
    description: >-
      Téléchargez des nomenclatures en CSV, avec les mêmes colonnes que celles
      que l'importation lit.
  - name: Cas d'emploi
    description: >-
      Trouvez toutes les nomenclatures où figure un article, avant de le
      modifier ou de le retirer.
  - name: Plans d'inspection
    description: "Quoi vérifier, sur quels articles et en quelle quantité\_: les caractéristiques, l'échantillonnage et le point d'inspection de chaque plan."
  - name: Inspections
    description: >-
      Les inspections ouvertes par les réceptions, les opérations et les ordres
      de fabrication. Enregistrez leurs résultats pour accepter ou refuser le
      stock qu'elles retiennent.
  - name: Prévisions
    description: >-
      La demande attendue pour chaque article, semaine par semaine, et les
      changements que les planificateurs y apportent.
  - name: Scénarios
    description: >-
      Des copies de la prévision pour essayer des changements sans toucher au
      plan réel.
  - name: Demande
    description: >-
      La demande passée d'un article à un emplacement, à partir de laquelle les
      prévisions sont établies.
  - name: Suggestions
    description: >-
      Ce que le plan dit d'acheter ou de fabriquer. Acceptez-en un pour créer le
      bon de commande ou l'ordre de fabrication, ou rejetez-le.
  - name: Réapprovisionnement
    description: "Comment chaque article est tenu en stock à chaque emplacement\_: points de commande, minimums et maximums ou révision périodique."
  - name: Jours fériés
    description: >-
      Les jours où l'organisation ne travaille pas, que le plan ignore lorsqu'il
      compte les délais de livraison.
  - name: Paramètres de planification
    description: >-
      Comment l'organisation planifie, par exemple l'horizon des prévisions et
      le niveau de service.
  - name: Automatisations
    description: >-
      Des règles qui exécutent des étapes lorsque quelque chose se produit ou
      selon une planification. Modifiez le brouillon, puis publiez-le pour
      l'activer.
  - name: Exécutions
    description: "Chaque fois qu'une automatisation s'est exécutée\_: ce qui l'a déclenchée, ce que chaque étape a fait et où elle a échoué."
  - name: Approbations
    description: >-
      Des exécutions en pause, en attente qu'une personne les approuve ou les
      rejette avant de continuer.
  - name: Paramètres d'automatisation
    description: >-
      Des limites à l'échelle de l'organisation pour les automatisations, par
      exemple les exécutions par minute et si quelqu'un peut approuver sa propre
      exécution.
  - name: Modèles d'automatisation
    description: Des automatisations prêtes à l'emploi pour commencer.
  - name: Événements
    description: >-
      Les événements qui peuvent déclencher une automatisation, et les données
      que chacun transporte.
  - name: Catalogue d'étapes
    description: >-
      Chaque étape qu'une automatisation peut utiliser et les entrées que
      chacune accepte.
  - name: Vues
    description: "Les rapports enregistrés\_: le jeu de données, les filtres, le regroupement et le graphique que quelqu'un a configurés, prêts à être exécutés de nouveau."
  - name: Tableaux de bord
    description: Des pages de graphiques et d'indicateurs disposés sur une grille.
  - name: Jeux de données
    description: >-
      Les données sur lesquelles vous pouvez produire des rapports et les champs
      de chacune. Commencez ici pour créer un rapport.
  - name: Planifications
    description: >-
      Envoyer un rapport par courriel selon une planification, ou alerter
      quelqu'un lorsqu'une valeur franchit un seuil.
  - name: Indicateurs
    description: >-
      Des nombres isolés à surveiller, définis comme une formule sur un jeu de
      données.
  - name: Tableau de bord
    description: >-
      Les chiffres de l'écran d'accueil de l'application, si vous voulez
      afficher les mêmes nombres ailleurs.
  - name: Dossiers de vues
    description: Des dossiers qui gardent les vues enregistrées en ordre.
  - name: Exportations d'analyses
    description: >-
      Exportez un rapport vers un fichier. Les grandes exportations s'exécutent
      en arrière-plan et sont prêtes à télécharger plus tard.
  - name: Modèles de rapports
    description: >-
      Des rapports prêts à l'emploi, comme le vieillissement du stock, pour
      commencer une vue.
  - name: Rapports
    description: >-
      Exécuter la définition d'un rapport et en obtenir les lignes ou le
      graphique, sans l'enregistrer d'abord.
  - name: Modèles de tableau de bord
    description: Des tableaux de bord prêts à l'emploi pour commencer.
  - name: Formules
    description: >-
      Vérifiez une formule par rapport à un jeu de données avant de
      l'enregistrer dans un KPI ou un champ calculé.
  - name: Connexions
    description: >-
      Les comptes connectés dans d'autres systèmes, ce que chacun synchronise et
      l'historique de ses exécutions de synchronisation.
  - name: Expédition
    description: >-
      Les tarifs des transporteurs, les étiquettes achetées pour les commandes
      et les retours, et les balayages qui suivent chaque colis.
  - name: Migrations
    description: "Apportez des enregistrements d'un autre système\_: préparez des fichiers ou une extraction, faites correspondre les colonnes, vérifiez les lignes, validez-les et annulez la validation."
  - name: Approvisionnement
    description: "Prix et stock des pièces de distributeur\_: cherchez dans un distributeur connecté, liez des articles à ses pièces et établissez le prix d'une révision de nomenclature."
  - name: CAO
    description: "Assemblages CAO et PLM\_: listez les assemblages d'un outil connecté et surveillez ceux dont les versions deviennent des importations de nomenclature."
  - name: Exportation de données
    description: >-
      Tout ce que l'organisation détient en un seul ZIP de fichiers CSV et de
      lignes JSON, à télécharger par le propriétaire.
  - name: Adresses fiscales
    description: >-
      Les adresses d'après lesquelles un service de taxes connecté taxe chaque
      vente, validées auprès de lui.
  - name: Connecteurs
    description: >-
      Les systèmes auxquels StockShift peut se connecter, et ce que chaque
      connecteur peut synchroniser.
  - name: Jeux d'étiquettes
    description: >-
      Tous les lots d'étiquettes imprimés, pour que vous puissiez les retrouver
      et les réimprimer.
  - name: Modèles d'étiquettes
    description: Les mises en page avec lesquelles les étiquettes sont imprimées.
  - name: Pièces
    description: "Retrouver une pièce étiquetée à partir du code de son étiquette\_: l'article, le lot ou le numéro de série et ce qu'elle contient."
  - name: Image de marque et modèles
    description: >-
      Le logo, les couleurs, les conditions et les champs personnalisés avec
      lesquels chaque soumission, bon de commande, facture et bordereau
      d'expédition s'imprime.
  - name: Applications mobiles
    description: >-
      Comment les applications mobiles StockShift inscrivent un appareil, se
      connectent et restent synchronisées avec le serveur.
  - name: Appareils
    description: >-
      Les téléphones et lecteurs inscrits dans l'organisation. Verrouillez-en un
      perdu, effacez-le ou retirez-le.
  - name: Configuration du lecteur
    description: >-
      Des feuilles imprimables de codes-barres qui configurent un scanner
      matériel, et les préférences de scanner de chaque personne.
  - name: Inscriptions
    description: Créer les codes QR qui inscrivent les appareils partagés et les bornes.
  - name: Flux de synchronisation
    description: >-
      Téléchargez un instantané des données dont un appareil a besoin, puis
      récupérez les changements depuis.
  - name: Commandes de synchronisation
    description: >-
      Envoyez les modifications qu'un appareil a faites hors ligne. Chaque
      commande est appliquée une seule fois, peu importe le nombre d'envois.
  - name: Fichiers de synchronisation
    description: >-
      Téléchargez les fichiers, comme les images d'articles, auxquels un flux
      renvoie.
  - name: Profil
    description: "Le compte de la personne connectée\_: ses coordonnées, son mot de passe, ses clés d'accès, son second facteur et ses sessions."
  - name: Notifications
    description: "La boîte de réception du membre connecté\_: ce qui requiert son attention, ce qui n'est pas lu, et ce dont on l'avise et comment."
  - name: Invitations
    description: >-
      Inviter des personnes à rejoindre l'organisation, et accepter une
      invitation.
  - name: Rôles
    description: >-
      Les rôles et les autorisations de chacun. Un membre peut faire ce que ses
      rôles permettent.
  - name: Accès du personnel
    description: >-
      Des demandes du soutien de StockShift pour consulter les données de
      l'organisation, qu'un propriétaire doit accorder.
  - name: Équipe
    description: Les personnes de l'organisation et les rôles qu'elles détiennent.
  - name: Clés d'API
    description: >-
      Créez et révoquez les clés que les scripts et les intégrations utilisent
      pour appeler cette API.
  - name: Organisations
    description: Les organisations auxquelles appartient la personne connectée.
  - name: Signatures
    description: >-
      Certaines actions exigent une signature électronique. Obtenez ici un jeton
      de signature et envoyez-le avec l'appel.
  - name: Inscription
    description: Créer un nouveau compte et une nouvelle organisation.
  - name: Organisation
    description: "Politique à l'échelle de l'organisation\_: durée de conservation des enregistrements, règles de session, conservations légales et fermeture de l'organisation."
  - name: Acceptations légales
    description: >-
      Les versions des Conditions d'utilisation et de la Politique de
      confidentialité que l'organisation a acceptées, les versions qui attendent
      un propriétaire, et un certificat de chaque acceptation.
  - name: Adresse
    description: L'adresse de facturation qui figure sur les factures de l'organisation.
  - name: Historique
    description: Qui a modifié quel champ d'un enregistrement, quand et à partir de quoi.
  - name: Certificats de destruction
    description: Vérifier qu'un certificat de destruction de données est authentique.
  - name: Facturation
    description: >-
      Consultez ou modifiez le forfait, achetez des blocs d'exécutions pour les
      automatisations, consultez les factures et mettez à jour le mode de
      paiement.
  - name: Webhooks
    description: >-
      Enregistrer des URL à informer lorsque des choses se produisent, et voir
      chaque livraison et sa réponse.
  - name: Applications OAuth
    description: >-
      Les applications tierces que des membres ont connectées par OAuth.
      Révoquez-en une pour couper son accès.
  - name: Hooks REST
    description: "Pour les applications connectées comme Zapier\_: abonner un événement à une URL, et le désabonner."
  - name: Serveur MCP
    description: >-
      Laissez un assistant IA travailler dans StockShift par le Model Context
      Protocol, avec les mêmes autorisations que le membre qui le connecte.
  - name: Événements récents
    description: >-
      Les derniers événements d'un type, tels que les livraisons les envoient, à
      interroger ou à utiliser comme échantillons.
  - name: Événements webhook
    description: >-
      Tous les événements que les webhooks et les REST hooks peuvent envoyer,
      avec la forme de leurs données.
paths:
  /sync/commands:
    post:
      tags:
        - Commandes de synchronisation
      summary: Envoyer des commandes hors ligne
      description: "Applique jusqu'à 100 commandes (1 Mo au plus en tout) en tant que membre, dans l'ordre\nd'envoi. Chacune est appliquée exactement comme la même modification faite dans\nl'application. Chaque commande répond `applied`, `rejected` ou `deferred`. `applied`\nvient avec le résultat. `rejected` est définitif et vient avec un `code`, un\n`message` et les `fields` invalides. `deferred` signifie que la commande n'a pas été\nexécutée\_: une dépendance n'est pas terminée dans un autre lot, la même commande\ns'exécute dans une autre requête, ou le lot a épuisé son budget de 20 secondes. Renvoyez une\ncommande différée après `retry_after` secondes.\n\nUne commande renvoyée retourne son résultat enregistré avec `replayed: true` et\nn'exécute rien. Le même id avec une autre charge utile est rejeté avec\n`command_id_reused`. Une commande dont la dépendance a été rejetée est rejetée\navec `dependency_rejected`. Une commande créée il y a plus de 90 jours est\nrejetée avec `command_expired`, et une commande que le serveur ne connaît pas avec\n`unknown_command`.\n\nNécessite un jeton d'un appareil enregistré avec `sync:write`, et chaque commande\nexige sa propre autorisation, sa propre fonctionnalité de forfait et sa propre portée lorsqu'elle est appliquée."
      operationId: v1.sync.commands.submit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitCommandsRequest'
      responses:
        '200':
          description: '`CommandResultsResource`'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CommandResultsResource'
                required:
                  - data
          headers:
            X-RateLimit-Limit:
              description: >-
                Requêtes par minute permises pour ce jeton, ou pour l'adresse
                sans jeton.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requêtes restantes cette minute.
              schema:
                type: integer
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '403':
          $ref: '#/components/responses/DeviceRequired'
        '413':
          $ref: '#/components/responses/BatchTooLarge'
        '422':
          $ref: '#/components/responses/ValidationException'
        '429':
          description: Trop de requêtes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          headers:
            Retry-After:
              description: Secondes avant la réinitialisation de la limite.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requêtes par minute permises.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: "Requêtes restantes cette minute\_: aucune."
              schema:
                type: integer
      x-codeSamples:
        - lang: typescript
          label: TypeScript SDK
          source: >-
            import { StockShift } from "@stockshift/sdk";


            const stockshift = new StockShift({ token:
            process.env.STOCKSHIFT_TOKEN! });


            const result = await stockshift.post("/sync/commands", {
              body: { commands: [] },
            });
components:
  schemas:
    SubmitCommandsRequest:
      type: object
      description: >-
        Un lot de commandes qu'un appareil envoie, dans l'ordre où elles
        s'exécutent.
      properties:
        commands:
          type: array
          description: >-
            Les commandes, de 1 à 100 et 1 Mo au total. Elles s'exécutent dans
            cet ordre.
          items:
            oneOf:
              - $ref: '#/components/schemas/SyncCommandInventoryCountsAddLine'
              - $ref: '#/components/schemas/SyncCommandInventoryCountsRecord'
              - $ref: '#/components/schemas/SyncCommandInventoryReleaseRequestsCreate'
              - $ref: '#/components/schemas/SyncCommandInventoryStockAdjust'
              - $ref: '#/components/schemas/SyncCommandInventoryStockChangeStatus'
              - $ref: '#/components/schemas/SyncCommandInventoryStockMove'
              - $ref: '#/components/schemas/SyncCommandInventoryStockReverse'
              - $ref: '#/components/schemas/SyncCommandInventoryStockReverseMove'
              - $ref: '#/components/schemas/SyncCommandInventoryTransfersCreate'
              - $ref: '#/components/schemas/SyncCommandInventoryTransfersReceive'
              - $ref: '#/components/schemas/SyncCommandInventoryTransfersShip'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsCancel'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsCount'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsDecline'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsReject'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsRequest'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsSubmit'
              - $ref: '#/components/schemas/SyncCommandInventoryVerificationsWitness'
              - $ref: '#/components/schemas/SyncCommandLabelsSetsPrint'
              - $ref: '#/components/schemas/SyncCommandManufacturingBuildsComplete'
              - $ref: '#/components/schemas/SyncCommandManufacturingBuildsIssueParts'
              - $ref: >-
                  #/components/schemas/SyncCommandManufacturingBuildsReportProblem
              - $ref: >-
                  #/components/schemas/SyncCommandManufacturingOperationsComplete
              - $ref: '#/components/schemas/SyncCommandManufacturingOperationsPause'
              - $ref: '#/components/schemas/SyncCommandManufacturingOperationsStart'
              - $ref: '#/components/schemas/SyncCommandPurchasingOrdersReceive'
              - $ref: '#/components/schemas/SyncCommandSalesOrdersShip'
          minItems: 1
          maxItems: 100
          uniqueItems: true
      required:
        - commands
      title: SubmitCommandsRequest
    CommandResultsResource:
      type: object
      properties:
        results:
          type: array
          description: Ce qu'est devenue chaque commande du lot, dans l'ordre d'envoi.
          items:
            $ref: '#/components/schemas/CommandResultResource'
      required:
        - results
      title: CommandResultsResource
      description: Ce qu'est devenue chaque commande d'un lot, dans l'ordre d'envoi.
    ProblemDetails:
      type: object
      description: >-
        Une erreur, sous forme de détails du problème RFC 9457. Branchez-vous
        sur `code`, qui est stable; `detail` est écrit pour les personnes et
        peut changer.
      properties:
        type:
          type: string
          format: uri
          description: Des liens vers la documentation de ce code.
        title:
          type: string
          description: Le texte du statut HTTP.
        status:
          type: integer
          description: Le code de statut HTTP.
        code:
          type: string
          description: Un nom stable lisible par machine, comme validation_failed.
        detail:
          type: string
          description: Ce qui a mal tourné, à l'intention des utilisateurs.
        errors:
          type: object
          description: >-
            Erreurs par champ. Sur validation_failed, et sur un refus avec un
            code qui lui est propre comme insufficient_stock ou document_closed.
          additionalProperties:
            type: array
            items:
              type: string
        feature:
          type: string
          description: >-
            La fonctionnalité du forfait requise. Seulement avec
            plan_upgrade_required.
        reason:
          type: string
          description: >-
            Pourquoi un appareil doit télécharger de nouveau un flux. Seulement
            avec resync_required.
        attempts_left:
          type: integer
          description: >-
            Combien de signatures refusées il reste avant que le membre soit
            verrouillé sur l'appareil. Seulement sur
            signature_assertion_invalid.
        rule_ids:
          type: array
          description: >-
            Les règles de témoignage qui couvrent le stock. Seulement avec
            verification_required.
          items:
            type: string
        witness:
          type: string
          description: "Où le témoin signe\_: same_device, remote ou either. Seulement avec verification_required."
        blind_recount:
          type: boolean
          description: >-
            Indique si le témoin recompte avant de voir la quantité. Seulement
            avec verification_required.
        flags:
          type: array
          description: >-
            Les signalements que les décisions d'une ligne groupée laissent
            ouverts, tels que l'aperçu groupé les nomme. Seulement sur
            decision_required.
          items:
            type: object
            properties:
              flag:
                type: string
                description: Le nom du signalement, tel que l'aperçu groupé le donne.
              facts:
                type: object
                description: >-
                  Les faits du signalement, comme dans l'aperçu groupé ; les
                  autres sont null.
                additionalProperties:
                  anyOf:
                    - type: string
                    - type: integer
                    - type: array
                      items:
                        type: string
                    - type: 'null'
              choices:
                type: array
                description: >-
                  Les décisions qui régleraient le signalement, telles que
                  l'aperçu groupé les nomme.
                items:
                  type: string
            required:
              - flag
              - facts
              - choices
      required:
        - type
        - title
        - status
        - code
        - detail
      title: ProblemDetails
    SyncCommandInventoryCountsAddLine:
      type: object
      title: SyncCommandInventoryCountsAddLine
      description: "Stock trouvé que le dénombrement n'attendait pas\_: un article, son lot, la quantité comptée et, si le compteur l'indique, quand et après quel contact."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.counts.add_line
          description: Le nom de la commande, toujours `inventory.counts.add_line`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            count_id:
              type: string
              description: L'ID du dénombrement ouvert dans lequel le stock a été trouvé.
            item:
              type: string
              description: >-
                L'article, par son ID ou son UGS. Un UGS correspond sans égard à
                la casse.
            quantity:
              type: string
              description: >-
                Ce qui a été compté, sous forme de décimal exact de zéro ou
                plus, envoyé comme chaîne, avec jusqu'à 20 chiffres de chaque
                côté de la virgule. Il est exprimé en `unit`, ou dans l'unité de
                base de l'article lorsque `unit` est omis.
            unit:
              type:
                - string
                - 'null'
              description: >-
                L'unité dans laquelle la quantité est exprimée, comme `case`. Ce
                doit être une unité dont l'article peut être converti. L'unité
                de base de l'article est utilisée si elle est omise.
            lot:
              type:
                - string
                - 'null'
              description: Le numéro de lot, pour un article suivi par lot.
            counted_at:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Le moment où la ligne a été comptée, sous forme d'horodatage ISO
                8601 selon l'horloge de l'appareil ancrée au serveur. Un
                appareil qui a compté hors ligne l'envoie pour que l'approbation
                compare la ligne aux livres tels qu'ils étaient alors. Il doit
                être postérieur à `contact_at` et au début du dénombrement, et
                au plus tard le moment où la commande arrive. L'heure du serveur
                est utilisée s'il est omis.
            contact_at:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Le dernier contact de l'appareil avec le serveur avant le
                dénombrement de la ligne, sous forme d'horodatage ISO 8601.
                Obligatoire avec `counted_at`, et il doit s'agir d'un contact
                que le serveur a consigné pour l'appareil qui envoie la
                commande.
          required:
            - count_id
            - item
            - quantity
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.counts.add_line
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            count_id: 0199a0d0-0000-7000-8000-00000000f002
            item: 0199a0d0-0000-7000-8000-00000000f003
            quantity: '40'
    SyncCommandInventoryCountsRecord:
      type: object
      title: SyncCommandInventoryCountsRecord
      description: >-
        La commande `inventory.counts.record`, qu'un appareil envoie pour
        modifier quelque chose pendant qu'il est peut-être hors ligne.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.counts.record
          description: Le nom de la commande, toujours `inventory.counts.record`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            count_id:
              type: string
              description: L'ID du dénombrement ouvert auquel appartiennent les lignes.
            lines:
              type: array
              items:
                type: object
                properties:
                  line_id:
                    type: string
                    description: L'ID de la ligne de dénombrement qui a été comptée.
                  quantity:
                    type: string
                    description: >-
                      Ce qui a été compté, sous forme de décimal exact de zéro
                      ou plus, envoyé comme chaîne, avec jusqu'à 20 chiffres de
                      chaque côté de la virgule. Il est exprimé en `unit`, ou
                      dans l'unité de base de l'article lorsque `unit` est omis.
                  unit:
                    type:
                      - string
                      - 'null'
                    description: >-
                      L'unité dans laquelle la quantité est exprimée, comme
                      `case`. Ce doit être une unité dont l'article peut être
                      converti. L'unité de base de l'article est utilisée si
                      elle est omise.
                  counted_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                    description: >-
                      Le moment où la ligne a été comptée, sous forme
                      d'horodatage ISO 8601 selon l'horloge de l'appareil ancrée
                      au serveur. Un appareil qui a compté hors ligne l'envoie
                      pour que l'approbation compare la ligne aux livres tels
                      qu'ils étaient alors. Il doit être postérieur à
                      `contact_at` et au début du dénombrement, et au plus tard
                      le moment où la commande arrive. L'heure du serveur est
                      utilisée s'il est omis.
                  contact_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                    description: >-
                      Le dernier contact de l'appareil avec le serveur avant le
                      dénombrement de la ligne, sous forme d'horodatage ISO
                      8601. Obligatoire avec `counted_at`, et il doit s'agir
                      d'un contact que le serveur a consigné pour l'appareil qui
                      envoie la commande.
                required:
                  - line_id
                  - quantity
              description: Les lignes comptées, de 1 à 500.
          required:
            - count_id
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.counts.record
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            count_id: 0199a0d0-0000-7000-8000-00000000f002
            lines:
              - line_id: 0199a0d0-0000-7000-8000-00000000f003
                quantity: '9'
              - line_id: 0199a0d0-0000-7000-8000-00000000f004
                quantity: '1'
                unit: each
    SyncCommandInventoryReleaseRequestsCreate:
      type: object
      title: SyncCommandInventoryReleaseRequestsCreate
      description: "Demande aux personnes qui peuvent libérer du stock retenu de le libérer\_: l'article par id ou UGS, où il se trouve, le statut dans lequel il est retenu, la quantité, son lot, son numéro de série ou sa pièce étiquetée, une note et la commande d'appareil qui attend la libération. C'est aussi la charge utile de la commande de synchronisation `inventory.release_requests.create`, d'où des clés en snake case."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.release_requests.create
          description: Le nom de la commande, toujours `inventory.release_requests.create`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            item:
              type: string
              description: >-
                L'article, par son ID ou son UGS. Un UGS correspond sans égard à
                la casse.
            location_id:
              type: string
              description: L'ID de l'emplacement où le stock est retenu.
            held_status:
              enum:
                - available
                - quarantined
                - rejected
              description: "Le statut dans lequel le stock est retenu\_: `quarantined` ou `rejected`."
            quantity:
              type: string
              description: >-
                Une quantité décimale exacte positive, envoyée sous forme de
                chaîne, avec jusqu'à 20 chiffres de chaque côté du point. Elle
                est en `unit`, ou dans l'unité de base de l'article lorsque
                `unit` est omis.
            unit:
              type:
                - string
                - 'null'
              description: >-
                L'unité dans laquelle la quantité est exprimée, comme `case`. Ce
                doit être une unité dont l'article peut être converti. L'unité
                de base de l'article est utilisée si elle est omise.
            lot:
              type:
                - string
                - 'null'
              description: Le numéro de lot, pour un article suivi par lot.
            serial:
              type:
                - string
                - 'null'
              description: Le numéro de série, pour un article suivi par numéro de série.
            piece:
              type:
                - string
                - 'null'
              description: L'ID de pièce sur l'étiquette qui a été balayée.
            note:
              type:
                - string
                - 'null'
              description: >-
                Une note pour les membres qui peuvent libérer le stock, d'au
                plus 1000 caractères.
            waiting_command_id:
              type:
                - string
                - 'null'
              description: L'ID de la commande d'appareil qui attend la libération.
          required:
            - item
            - location_id
            - held_status
            - quantity
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d1-4a10-7000-8000-000000000001
          name: inventory.release_requests.create
          depends_on: []
          created_at: '2026-10-23T11:20:00+00:00'
          payload:
            item: N4BT-NVGY
            location_id: 0199a0c0-0000-7000-8000-000000000a12
            held_status: quarantined
            quantity: '12'
            piece: P-7Q2K9
            note: Moving it to A12-04-B
            waiting_command_id: 0199a0d0-0000-7000-8000-0000000000aa
    SyncCommandInventoryStockAdjust:
      type: object
      title: SyncCommandInventoryStockAdjust
      description: "Un ajustement de stock\_: une réception ou une sortie d'une quantité positive, dans toute unité dont l'article peut être converti (son unité de base si aucune n'est donnée), dans un statut (available si aucun n'est donné)."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.stock.adjust
          description: Le nom de la commande, toujours `inventory.stock.adjust`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            item:
              type: string
              description: >-
                L'article, par son ID ou son UGS. Un UGS correspond sans égard à
                la casse.
            location_id:
              type: string
              description: >-
                L'ID de l'emplacement dont le stock change. L'emplacement ne
                peut pas être archivé.
            direction:
              enum:
                - receipt
                - issue
              description: "Indique si l'ajustement ajoute du stock ou en retire\_: `receipt` ou `issue`."
            quantity:
              type: string
              description: >-
                Une quantité décimale exacte positive, envoyée sous forme de
                chaîne, avec jusqu'à 20 chiffres de chaque côté du point. Elle
                est en `unit`, ou dans l'unité de base de l'article lorsque
                `unit` est omis.
            unit:
              type:
                - string
                - 'null'
              description: >-
                L'unité dans laquelle la quantité est exprimée, comme `case`. Ce
                doit être une unité dont l'article peut être converti. L'unité
                de base de l'article est utilisée si elle est omise.
            reason:
              enum:
                - found
                - damaged
                - lost
                - destroyed
                - correction
                - opening_balance
                - other
                - reversal
                - status_change
                - transfer
                - move
                - cycle_count
                - receipt
                - shipment
                - return
                - production_issue
                - production_receipt
                - repair_issue
                - revaluation
                - cost_correction
                - landed_cost
              description: "Pourquoi le stock a changé\_: `found`, `damaged`, `lost`, `destroyed`, `correction`, `opening_balance` ou `other`."
            note:
              type:
                - string
                - 'null'
              description: >-
                Une note conservée avec le mouvement, d'au plus 1000 caractères.
                Obligatoire lorsque le motif est `other`.
            status:
              enum:
                - available
                - quarantined
                - rejected
              description: "Le statut du stock qui est ajouté ou retiré\_: `available`, `quarantined` ou `rejected`. Le stock est `available` lorsque ce champ est omis."
            lot:
              type:
                - string
                - 'null'
              description: >-
                Le numéro de lot, pour un article suivi par lot. Les numéros de
                lot correspondent sans égard à la casse. Lors d'une réception,
                un lot que l'article n'a pas encore est créé ; lors d'une
                sortie, le lot doit exister.
            lot_expires_on:
              type:
                - string
                - 'null'
              format: date
              description: >-
                La date d'expiration d'un nouveau lot, sous forme `YYYY-MM-DD`.
                Elle n'est enregistrée que si la réception crée le lot.
            serials:
              type: array
              items:
                type: string
              description: >-
                Les numéros de série, pour un article suivi par numéro de série.
                Envoyez-en un par unité, de sorte que le nombre corresponde à la
                quantité dans l'unité de base. Au plus 25 par commande.
            unit_cost:
              type:
                - string
                - 'null'
              description: >-
                Le coût d'une unité de `unit`, sous forme de décimal exact de
                zéro ou plus dans la devise de l'organisation. Seule une
                réception accepte un coût. Il est enregistré par unité de base.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de la liste groupée dont cette commande est une ligne, un
                UUID que le client choisit pour toute la liste. Omettez-le pour
                une commande hors liste groupée; les vérifications groupées ne
                s'exécutent alors pas.
            bulk_line:
              type:
                - integer
                - 'null'
              description: La position de la ligne dans la liste groupée, de 0 à 99.
            decisions:
              type: object
              additionalProperties:
                type: string
              description: >-
                Le choix pour chaque indicateur que le membre a tranché dans
                l'aperçu groupé, par exemple `{"reserved": "leave"}`. Seuls
                `reserved`, `mixed_lots` et `short_dated` peuvent être tranchés.
            bulk_undo_of:
              type:
                - string
                - 'null'
              description: "Sur une ligne d'un «\_Tout annuler\_», le `bulk_id` de la liste groupée qu'il annule."
          required:
            - item
            - location_id
            - direction
            - quantity
            - reason
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.stock.adjust
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            item: 0199a0d0-0000-7000-8000-000000000201
            location_id: 0199a0d0-0000-7000-8000-000000000101
            direction: issue
            quantity: '3'
            reason: damaged
            note: Crushed in the tote
    SyncCommandInventoryStockChangeStatus:
      type: object
      title: SyncCommandInventoryStockChangeStatus
      description: >-
        Déplace une quantité positive d'un article à un emplacement d'un statut
        à un autre, par exemple pour libérer du stock en quarantaine.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.stock.change_status
          description: Le nom de la commande, toujours `inventory.stock.change_status`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            item:
              type: string
              description: >-
                L'article, par son ID ou son UGS. Un UGS correspond sans égard à
                la casse.
            location_id:
              type: string
              description: L'ID de l'emplacement où se trouve le stock. Le stock y reste.
            from:
              enum:
                - available
                - quarantined
                - rejected
              description: "Le statut que le stock quitte\_: `available`, `quarantined` ou `rejected`. Le stock qu'il contient ne peut pas descendre sous zéro."
            to:
              enum:
                - available
                - quarantined
                - rejected
              description: "Le statut que le stock prend\_: `available`, `quarantined` ou `rejected`. Il doit différer de `from`. Passer du stock retenu à `available` ferme les demandes ouvertes de libération."
            quantity:
              type: string
              description: >-
                Une quantité décimale exacte positive, envoyée sous forme de
                chaîne, avec jusqu'à 20 chiffres de chaque côté du point. Elle
                est en `unit`, ou dans l'unité de base de l'article lorsque
                `unit` est omis.
            unit:
              type:
                - string
                - 'null'
              description: >-
                L'unité dans laquelle la quantité est exprimée, comme `case`. Ce
                doit être une unité dont l'article peut être converti. L'unité
                de base de l'article est utilisée si elle est omise.
            note:
              type:
                - string
                - 'null'
              description: >-
                Une note conservée avec les mouvements, d'au plus 1000
                caractères.
            lot:
              type:
                - string
                - 'null'
              description: >-
                Le numéro de lot, pour un article suivi par lot. Il doit s'agir
                d'un lot que l'article a déjà ; les numéros de lot correspondent
                sans égard à la casse.
            serials:
              type: array
              items:
                type: string
              description: >-
                Les numéros de série, pour un article suivi par numéro de série.
                Envoyez-en un par unité, de sorte que le nombre corresponde à la
                quantité dans l'unité de base. Au plus 25 par commande.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de la liste groupée dont cette commande est une ligne, un
                UUID que le client choisit pour toute la liste. Omettez-le pour
                une commande hors liste groupée; les vérifications groupées ne
                s'exécutent alors pas.
            bulk_line:
              type:
                - integer
                - 'null'
              description: La position de la ligne dans la liste groupée, de 0 à 99.
            decisions:
              type: object
              additionalProperties:
                type: string
              description: >-
                Le choix pour chaque indicateur que le membre a tranché dans
                l'aperçu groupé, par exemple `{"reserved": "leave"}`. Seuls
                `reserved`, `mixed_lots` et `short_dated` peuvent être tranchés.
            bulk_undo_of:
              type:
                - string
                - 'null'
              description: "Sur une ligne d'un «\_Tout annuler\_», le `bulk_id` de la liste groupée qu'il annule."
          required:
            - item
            - location_id
            - from
            - to
            - quantity
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.stock.change_status
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            item: 0199a0d0-0000-7000-8000-000000000201
            location_id: 0199a0d0-0000-7000-8000-000000000101
            from: available
            to: quarantined
            quantity: '4'
            note: Rust on the threads
    SyncCommandInventoryStockMove:
      type: object
      title: SyncCommandInventoryStockMove
      description: >-
        Déplace une quantité positive d'un article d'un emplacement à un autre
        en une seule étape, dans le même statut et le même lot.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.stock.move
          description: Le nom de la commande, toujours `inventory.stock.move`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            item:
              type: string
              description: >-
                L'article, par son ID ou son UGS. Un UGS correspond sans égard à
                la casse.
            from_location_id:
              type: string
              description: >-
                L'ID de l'emplacement que le stock quitte. Il ne peut pas être
                archivé.
            to_location_id:
              type: string
              description: >-
                L'ID de l'emplacement où va le stock. Il ne peut pas être
                archivé ni être le même que `from_location_id`.
            quantity:
              type: string
              description: >-
                Une quantité décimale exacte positive, envoyée sous forme de
                chaîne, avec jusqu'à 20 chiffres de chaque côté du point. Elle
                est en `unit`, ou dans l'unité de base de l'article lorsque
                `unit` est omis.
            unit:
              type:
                - string
                - 'null'
              description: >-
                L'unité dans laquelle la quantité est exprimée, comme `case`. Ce
                doit être une unité dont l'article peut être converti. L'unité
                de base de l'article est utilisée si elle est omise.
            status:
              enum:
                - available
                - quarantined
                - rejected
              description: "Le statut dans lequel le stock se trouve et reste\_: `available`, `quarantined` ou `rejected`. Le stock est `available` lorsque ce champ est omis."
            note:
              type:
                - string
                - 'null'
              description: >-
                Une note conservée avec les mouvements, d'au plus 1000
                caractères.
            lot:
              type:
                - string
                - 'null'
              description: >-
                Le numéro de lot, pour un article suivi par lot. Le lot reste le
                même à la destination.
            serials:
              type: array
              items:
                type: string
              description: >-
                Les numéros de série, pour un article suivi par numéro de série.
                Envoyez-en un par unité, de sorte que le nombre corresponde à la
                quantité dans l'unité de base. Au plus 25 par commande.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de la liste groupée dont cette commande est une ligne, un
                UUID que le client choisit pour toute la liste. Omettez-le pour
                une commande hors liste groupée; les vérifications groupées ne
                s'exécutent alors pas.
            bulk_line:
              type:
                - integer
                - 'null'
              description: La position de la ligne dans la liste groupée, de 0 à 99.
            bulk_undo_of:
              type:
                - string
                - 'null'
              description: "Sur une ligne d'un «\_Tout annuler\_», le `bulk_id` de la liste groupée qu'il annule."
            decisions:
              type: object
              additionalProperties:
                type: string
              description: >-
                Le choix pour chaque indicateur que le membre a tranché dans
                l'aperçu groupé, par exemple `{"reserved": "leave"}`. Seuls
                `reserved`, `mixed_lots` et `short_dated` peuvent être tranchés.
          required:
            - item
            - from_location_id
            - to_location_id
            - quantity
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.stock.move
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            item: 0199a0d0-0000-7000-8000-000000000201
            from_location_id: 0199a0d0-0000-7000-8000-000000000101
            to_location_id: 0199a0d0-0000-7000-8000-000000000102
            quantity: '4'
            note: To the pick face
            bulk_id: 0199a0d0-0000-7000-8000-00000000b001
            bulk_line: 1
            decisions:
              short_dated: accept
    SyncCommandInventoryStockReverse:
      type: object
      title: SyncCommandInventoryStockReverse
      description: "Le mouvement à contrepasser, et le groupe dont «\_Annuler tout\_» le contrepasse."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.stock.reverse
          description: Le nom de la commande, toujours `inventory.stock.reverse`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            movement_id:
              type: string
              description: >-
                L'ID du mouvement de stock à contrepasser. Un mouvement n'est
                contrepassé qu'une seule fois. Les contrepassations, les
                changements de statut, les étapes d'un déplacement et les
                mouvements de valeur seulement ne peuvent pas être contrepassés.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de la liste groupée dont cette commande est une ligne, un
                UUID que le client choisit pour toute la liste. Omettez-le pour
                une commande hors liste groupée; les vérifications groupées ne
                s'exécutent alors pas.
            bulk_line:
              type:
                - integer
                - 'null'
              description: La position de la ligne dans la liste groupée, de 0 à 99.
            bulk_undo_of:
              type:
                - string
                - 'null'
              description: "Sur une ligne d'un «\_Tout annuler\_», le `bulk_id` de la liste groupée qu'il annule."
          required:
            - movement_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.stock.reverse
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            movement_id: 0199a0d0-0000-7000-8000-00000000f002
            bulk_id: 0199a0d0-0000-7000-8000-00000000b001
            bulk_line: 1
            bulk_undo_of: 0199a0d0-0000-7000-8000-00000000b001
    SyncCommandInventoryStockReverseMove:
      type: object
      title: SyncCommandInventoryStockReverseMove
      description: "Le déplacement à annuler, et le groupe dont «\_Annuler tout\_» l'annule."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.stock.reverse_move
          description: Le nom de la commande, toujours `inventory.stock.reverse_move`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            move_id:
              type: string
              description: >-
                L'ID du déplacement à annuler. Chaque mouvement du déplacement
                est contrepassé ensemble.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de la liste groupée dont cette commande est une ligne, un
                UUID que le client choisit pour toute la liste. Omettez-le pour
                une commande hors liste groupée; les vérifications groupées ne
                s'exécutent alors pas.
            bulk_line:
              type:
                - integer
                - 'null'
              description: La position de la ligne dans la liste groupée, de 0 à 99.
            bulk_undo_of:
              type:
                - string
                - 'null'
              description: "Sur une ligne d'un «\_Tout annuler\_», le `bulk_id` de la liste groupée qu'il annule."
          required:
            - move_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.stock.reverse_move
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            move_id: 0199a0d0-0000-7000-8000-00000000f002
            bulk_id: 0199a0d0-0000-7000-8000-00000000b001
            bulk_line: 1
            bulk_undo_of: 0199a0d0-0000-7000-8000-00000000b001
    SyncCommandInventoryTransfersCreate:
      type: object
      title: SyncCommandInventoryTransfersCreate
      description: "Un transfert en brouillon\_: d'où, vers où, et ses lignes. Avec un ID de transfert, il remplace le contenu d'un brouillon."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.transfers.create
          description: Le nom de la commande, toujours `inventory.transfers.create`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            from_location_id:
              type: string
              description: >-
                L'ID de l'emplacement d'où le stock est expédié. Il doit être
                actif.
            to_location_id:
              type: string
              description: >-
                L'ID de l'emplacement où le stock est reçu. Il doit être actif
                et différer de `from_location_id`.
            lines:
              type: array
              items:
                type: object
                properties:
                  item:
                    type: string
                    description: >-
                      L'article, par son ID ou son UGS. Un UGS correspond sans
                      égard à la casse.
                  quantity:
                    type: string
                    description: >-
                      Une quantité décimale exacte positive, envoyée sous forme
                      de chaîne, avec jusqu'à 20 chiffres de chaque côté du
                      point. Elle est en `unit`, ou dans l'unité de base de
                      l'article lorsque `unit` est omis.
                  unit:
                    type:
                      - string
                      - 'null'
                    description: >-
                      L'unité dans laquelle la quantité est exprimée, comme
                      `case`. Ce doit être une unité dont l'article peut être
                      converti. L'unité de base de l'article est utilisée si
                      elle est omise.
                  lot:
                    type:
                      - string
                      - 'null'
                    description: Le numéro de lot, pour un article suivi par lot.
                  serials:
                    type: array
                    items:
                      type: string
                    description: >-
                      Les numéros de série, pour un article suivi par numéro de
                      série, un par unité.
                required:
                  - item
                  - quantity
              description: >-
                Les lignes du transfert, de 1 à 20. Toutes les lignes ensemble
                peuvent nommer 25 numéros de série au plus.
            note:
              type:
                - string
                - 'null'
              description: Une note conservée avec le transfert, d'au plus 1000 caractères.
            id:
              type:
                - string
                - 'null'
              description: >-
                Un UUIDv7 que l'appareil a choisi pour le nouveau transfert,
                afin de pouvoir le nommer avant d'avoir une réponse.
          required:
            - from_location_id
            - to_location_id
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.transfers.create
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            id: 0199a0d0-0000-7000-8000-00000000f002
            from_location_id: 0199a0d0-0000-7000-8000-000000000101
            to_location_id: 0199a0d0-0000-7000-8000-000000000102
            note: For the morning run
            lines:
              - item: 0199a0d0-0000-7000-8000-000000000201
                quantity: '4'
              - item: 0199a0d0-0000-7000-8000-000000000202
                quantity: '2'
    SyncCommandInventoryTransfersReceive:
      type: object
      title: SyncCommandInventoryTransfersReceive
      description: >-
        La commande `inventory.transfers.receive`, qu'un appareil envoie pour
        modifier quelque chose pendant qu'il est peut-être hors ligne.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.transfers.receive
          description: Le nom de la commande, toujours `inventory.transfers.receive`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            transfer_id:
              type: string
              description: L'ID du transfert expédié pour lequel du stock est arrivé.
            lines:
              type: array
              items:
                type: object
                properties:
                  line_id:
                    type: string
                    description: L'ID de la ligne de transfert.
                  quantity:
                    type: string
                    description: >-
                      Combien de la ligne est arrivé, dans l'unité de base de
                      l'article, sous forme de décimale exacte positive envoyée
                      en chaîne. Cela ne peut pas dépasser ce qu'il reste à
                      recevoir sur la ligne.
                  serials:
                    type: array
                    items:
                      type: string
                    description: >-
                      Les numéros de série arrivés, pour un article suivi par
                      numéro de série, un par unité et au plus 25.
                required:
                  - line_id
                  - quantity
              description: >-
                Les lignes arrivées, de 1 à 20. Les lignes omises ne reçoivent
                rien cette fois.
          required:
            - transfer_id
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.transfers.receive
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            transfer_id: 0199a0d0-0000-7000-8000-00000000f002
            lines:
              - line_id: 0199a0d0-0000-7000-8000-00000000f003
                quantity: '3'
    SyncCommandInventoryTransfersShip:
      type: object
      title: SyncCommandInventoryTransfersShip
      description: >-
        La commande `inventory.transfers.ship`, qu'un appareil envoie pour
        modifier quelque chose pendant qu'il est peut-être hors ligne.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.transfers.ship
          description: Le nom de la commande, toujours `inventory.transfers.ship`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            transfer_id:
              type: string
              description: L'ID du transfert brouillon à expédier.
          required:
            - transfer_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.transfers.ship
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            transfer_id: 0199a0d0-0000-7000-8000-00000000f002
    SyncCommandInventoryVerificationsCancel:
      type: object
      title: SyncCommandInventoryVerificationsCancel
      description: "Clôturer ou quitter une vérification avec un motif\_: une annulation, un refus ou un rejet."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.cancel
          description: Le nom de la commande, toujours `inventory.verifications.cancel`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            verification_id:
              type: string
              description: L'ID de la vérification à annuler, à refuser ou à rejeter.
            reason:
              type: string
              description: >-
                Pourquoi le membre annule, refuse ou rejette la vérification,
                jusqu'à 500 caractères. Conservé avec la vérification.
          required:
            - verification_id
            - reason
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.cancel
          depends_on: []
          created_at: '2026-11-02T10:00:30+00:00'
          payload:
            verification_id: 0199a0d0-0000-7000-8000-000000000401
            reason: Asked by mistake
    SyncCommandInventoryVerificationsCount:
      type: object
      title: SyncCommandInventoryVerificationsCount
      description: "Un dénombrement à l'aveugle par le témoin\_: la quantité de l'action, ou chaque ligne d'un dénombrement par son ID."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.count
          description: Le nom de la commande, toujours `inventory.verifications.count`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            verification_id:
              type: string
              description: L'ID de la vérification pour laquelle le témoin compte.
            count:
              type:
                - string
                - 'null'
              description: >-
                Ce que le témoin a compté, dans l'unité de l'action retenue,
                sous forme de décimal de zéro ou plus, avec jusqu'à 12 chiffres
                avant la virgule et 6 après. Non utilisé pour un dénombrement de
                stock.
            lines:
              type: object
              additionalProperties:
                type: string
              description: "Pour un dénombrement de stock\_: ce que le témoin a compté sur chaque ligne, indexé par l'ID de la ligne de dénombrement, jusqu'à 500 lignes. Chaque valeur est un nombre décimal de zéro ou plus, avec au plus 12 chiffres avant la virgule et 6 après."
          required:
            - verification_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.count
          depends_on: []
          created_at: '2026-11-02T10:00:30+00:00'
          payload:
            verification_id: 0199a0d0-0000-7000-8000-000000000401
            count: '3'
    SyncCommandInventoryVerificationsDecline:
      type: object
      title: SyncCommandInventoryVerificationsDecline
      description: "Clôturer ou quitter une vérification avec un motif\_: une annulation, un refus ou un rejet."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.decline
          description: Le nom de la commande, toujours `inventory.verifications.decline`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            verification_id:
              type: string
              description: L'ID de la vérification à annuler, à refuser ou à rejeter.
            reason:
              type: string
              description: >-
                Pourquoi le membre annule, refuse ou rejette la vérification,
                jusqu'à 500 caractères. Conservé avec la vérification.
          required:
            - verification_id
            - reason
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.decline
          depends_on: []
          created_at: '2026-11-02T10:00:30+00:00'
          payload:
            verification_id: 0199a0d0-0000-7000-8000-000000000401
            reason: Going off shift
    SyncCommandInventoryVerificationsReject:
      type: object
      title: SyncCommandInventoryVerificationsReject
      description: "Clôturer ou quitter une vérification avec un motif\_: une annulation, un refus ou un rejet."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.reject
          description: Le nom de la commande, toujours `inventory.verifications.reject`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            verification_id:
              type: string
              description: L'ID de la vérification à annuler, à refuser ou à rejeter.
            reason:
              type: string
              description: >-
                Pourquoi le membre annule, refuse ou rejette la vérification,
                jusqu'à 500 caractères. Conservé avec la vérification.
          required:
            - verification_id
            - reason
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.count
          depends_on: []
          created_at: '2026-11-02T10:00:30+00:00'
          payload:
            verification_id: 0199a0d0-0000-7000-8000-000000000401
            count: '2'
    SyncCommandInventoryVerificationsRequest:
      type: object
      title: SyncCommandInventoryVerificationsRequest
      description: "La demande de l'exécutant\_: l'action retenue et son empreinte qu'il a vue dans l'aperçu et qu'il signe."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.request
          description: Le nom de la commande, toujours `inventory.verifications.request`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            command:
              type: string
              description: >-
                La commande de synchronisation de l'action retenue, comme
                `inventory.stock.adjust`.
            payload:
              type: object
              additionalProperties: {}
              description: >-
                La charge utile que cette commande prend, telle que son propre
                schéma de commande de synchronisation la documente, comme
                `SyncCommandInventoryStockAdjust`.
            digest:
              type: string
              description: >-
                Le condensé SHA-256 de la déclaration, sur 64 caractères
                hexadécimaux, que l'aperçu a renvoyé pour cette action. La
                requête est refusée si la déclaration a changé depuis.
            locale:
              type: string
              description: >-
                Les paramètres régionaux dans lesquels l'énoncé est affiché et
                stocké.
          required:
            - command
            - payload
            - digest
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.request
          depends_on: []
          created_at: '2026-11-02T10:00:30+00:00'
          payload:
            command: inventory.stock.adjust
            payload:
              item: OXY-5
              location_id: 0199a0d0-0000-7000-8000-000000000301
              direction: issue
              quantity: '2'
              reason: damaged
            digest: abc
    SyncCommandInventoryVerificationsSubmit:
      type: object
      title: SyncCommandInventoryVerificationsSubmit
      description: "Une vérification témoignée hors ligne sur un appareil partagé\_: l'action retenue, les signatures des deux personnes sous forme d'assertions que la clé de l'appareil a signées après la vérification de chaque NIP sur l'appareil, chaque nouveau dénombrement et chaque tentative de NIP échouée, par heure seulement."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.submit
          description: Le nom de la commande, toujours `inventory.verifications.submit`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            command:
              type: string
              description: >-
                La commande de synchronisation de l'action retenue, comme
                `inventory.stock.adjust`.
            payload:
              type: object
              additionalProperties: {}
              description: >-
                La charge utile que cette commande prend, telle que son propre
                schéma de commande de synchronisation la documente, comme
                `SyncCommandInventoryStockAdjust`.
            digest:
              type: string
              description: >-
                L'empreinte de l'action retenue que les deux personnes ont
                signée, telle que l'appareil l'a calculée, en 64 caractères.
            locale:
              type: string
              description: >-
                Les paramètres régionaux dans lesquels les deux énoncés ont été
                affichés.
            performer_assertion:
              type: string
              description: "La signature de l'exécutant\_: une assertion signée par la clé de l'appareil avec le sens `PERFORMED`, jusqu'à 8192 caractères."
            witness_assertion:
              type: string
              description: "La signature du témoin\_: une assertion signée par la clé de l'appareil avec le sens `WITNESSED`, jusqu'à 8192 caractères."
            attempts:
              type: array
              items:
                type: object
                properties:
                  at:
                    type: string
                    format: date-time
                    description: >-
                      Le moment où l'appareil l'a compté, sous forme
                      d'horodatage ISO 8601 selon son horloge ancrée.
                  count:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Ce que le témoin a compté, dans l'unité de l'action
                      retenue, sous forme de décimal de zéro ou plus, avec
                      jusqu'à 12 chiffres avant la virgule et 6 après. Non
                      utilisé pour un dénombrement de stock.
                  lines:
                    type: object
                    additionalProperties:
                      type: string
                    description: "Pour un dénombrement de stock\_: ce que le témoin a compté sur chaque ligne, indexé par l'ID de la ligne de dénombrement, jusqu'à 500 lignes. Chaque valeur est un nombre décimal de zéro ou plus, avec au plus 12 chiffres avant la virgule et 6 après."
                required:
                  - at
              description: >-
                Tous les nouveaux dénombrements que le témoin a saisis, dans
                l'ordre, de un à trois. Le dernier est celui qu'il a signé.
            failed_pins:
              type: array
              items:
                type: object
                properties:
                  role:
                    type: string
                    description: "À qui était le tour de signer lorsque le mauvais NIP a été saisi\_: `performer` ou `witness`."
                  at:
                    type: string
                    format: date-time
                    description: >-
                      Le moment où le mauvais NIP a été saisi, sous forme
                      d'horodatage ISO 8601 selon l'horloge ancrée de
                      l'appareil.
                required:
                  - role
                  - at
              description: >-
                Chaque NIP erroné saisi pendant la signature, selon le tour de
                qui c'était et le moment, jusqu'à 50. Le NIP lui-même n'est
                jamais envoyé.
          required:
            - command
            - payload
            - digest
            - locale
            - performer_assertion
            - witness_assertion
            - attempts
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.submit
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            command: inventory.stock.adjust
            payload:
              item: OXY-5
              location_id: 0199a0d0-0000-7000-8000-000000000301
              direction: issue
              quantity: '2'
              reason: damaged
            digest: 11e29cde467d3cde7dfbf4cccf925b590ec17dc5faccec79e2b8c4f7f9c1a99d
            locale: en
            performer_assertion: >-
              A JWS of type device-offline-signature+jwt the device key signed
              when the performer's PIN was checked, with the meaning PERFORMED
            witness_assertion: >-
              A JWS of type device-offline-signature+jwt the device key signed
              when the witness's PIN was checked, with the meaning WITNESSED
            attempts:
              - count: '3'
                at: '2026-11-02T09:11:00+00:00'
              - count: '2'
                at: '2026-11-02T09:11:40+00:00'
            failed_pins:
              - role: witness
                at: '2026-11-02T09:11:50+00:00'
    SyncCommandInventoryVerificationsWitness:
      type: object
      title: SyncCommandInventoryVerificationsWitness
      description: "La signature du témoin\_: l'empreinte de l'action retenue et celle de la déclaration, de sorte que la signature lie le témoin exactement à ce qu'il a vu."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: inventory.verifications.witness
          description: Le nom de la commande, toujours `inventory.verifications.witness`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            verification_id:
              type: string
              description: L'ID de la vérification que le témoin signe.
            digest:
              type: string
              description: >-
                L'empreinte de l'action retenue, en 64 caractères hexadécimaux,
                telle que la vérification l'affiche.
            statement_digest:
              type: string
              description: >-
                Le condensé SHA-256 de la déclaration du témoin que la
                vérification a affichée, sur 64 caractères hexadécimaux.
            locale:
              type: string
              description: >-
                Les paramètres régionaux de cet énoncé. Ceux du membre sont
                utilisés s'ils sont omis.
          required:
            - verification_id
            - digest
            - statement_digest
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: inventory.verifications.count
          depends_on: []
          created_at: '2026-11-02T10:01:00+00:00'
          payload:
            verification_id: 0199a0d0-0000-7000-8000-000000000401
            count: '2'
    SyncCommandLabelsSetsPrint:
      type: object
      title: SyncCommandLabelsSetsPrint
      description: "Une impression en lot\_: un ensemble d'étiquettes pour chaque ligne d'une liste, chaque ligne étant un article de stock en main."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: labels.sets.print
          description: Le nom de la commande, toujours `labels.sets.print`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            lines:
              type: array
              items:
                type: object
                properties:
                  item:
                    type: string
                    description: L'ID de l'article.
                  quantity:
                    type: string
                    description: >-
                      Ce que contient chaque pièce, dans l'unité de base de
                      l'article, sous forme de décimal exact positif envoyé
                      comme chaîne. La pièce d'un numéro de série contient 1.
                  pieces:
                    type: integer
                    description: >-
                      Combien de pièces étiqueter, chacune avec son propre ID de
                      pièce, jusqu'à 250. La valeur est 1 si omis, et toujours 1
                      pour un numéro de série.
                  lot:
                    type:
                      - string
                      - 'null'
                    description: Le numéro de lot, pour un article suivi par lot.
                  serial:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Le numéro de série, pour un article suivi par numéro de
                      série.
                required:
                  - item
                  - quantity
              description: Les lignes pour lesquelles imprimer des étiquettes, de 1 à 100.
            bulk_id:
              type:
                - string
                - 'null'
              description: >-
                La liste groupée qu'elle imprime, sous forme d'UUIDv7 choisi par
                l'appareil. Elle est consignée dans l'historique d'audit.
          required:
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: labels.sets.print
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            bulk_id: 0199a0d0-0000-7000-8000-00000000f002
            lines:
              - item: 0199a0d0-0000-7000-8000-000000000201
                quantity: '5'
                pieces: 3
              - item: 0199a0d0-0000-7000-8000-000000000202
                quantity: '1'
    SyncCommandManufacturingBuildsComplete:
      type: object
      title: SyncCommandManufacturingBuildsComplete
      description: >-
        Un ordre de fabrication à terminer, avec les numéros de lot ou de série
        que sa production reçoit.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.builds.complete
          description: Le nom de la commande, toujours `manufacturing.builds.complete`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication à terminer.
            lot:
              type:
                - string
                - 'null'
              description: >-
                Le lot produit, obligatoire pour un article suivi par lot. Un
                nouveau lot est créé.
            lot_expires_on:
              type:
                - string
                - 'null'
              format: date
              description: La date d'expiration du lot de la production, au format `Y-m-d`.
            serials:
              type: array
              items:
                type: string
              description: >-
                Les numéros de série produits, un par unité fabriquée,
                obligatoires pour un article suivi par numéro de série.
            as_recorded:
              type: boolean
              description: >-
                Mettez-le à `true` lorsque les étapes déjà consignées
                constituaient la totalité de la fabrication, de sorte que plus
                rien d'autre n'est consommé.
            reasons:
              type: object
              additionalProperties:
                type: string
              description: >-
                Pourquoi une ligne a utilisé moins que sa liste de pièces, par
                ID de ligne. Utilisé lors de l'achèvement tel que consigné.
            links:
              type: array
              items:
                type: object
                properties:
                  output:
                    type: string
                    description: "L'unité produite\_: l'un des numéros de série fabriqués, ou le lot produit."
                  item:
                    type: string
                    description: La pièce, par ID ou UGS.
                  lot:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Un lot de la pièce qu'a utilisé l'ordre de fabrication.
                      Envoyez `lot` ou `serial`.
                  serial:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Un numéro de série de la pièce qu'a utilisée l'ordre de
                      fabrication. Envoyez `lot` ou `serial`.
                required:
                  - output
                  - item
              description: >-
                Quels lots et numéros de série utilisés par l'ordre de
                fabrication sont entrés dans quelles unités produites, lorsque
                le forfait consigne la consommation.
          required:
            - build_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.builds.complete
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            lot: B-2611
            lot_expires_on: '2028-01-31'
    SyncCommandManufacturingBuildsIssueParts:
      type: object
      title: SyncCommandManufacturingBuildsIssueParts
      description: "Une étape de consommation consignée\_: des pièces consommées pour un ordre de fabrication avant qu'il soit terminé."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.builds.issue_parts
          description: Le nom de la commande, toujours `manufacturing.builds.issue_parts`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication à laquelle les pièces sont consommées.
            entries:
              type: array
              items:
                type: object
                properties:
                  line:
                    type: string
                    description: >-
                      L'ID de la ligne de la liste de pièces à laquelle l'entrée
                      se rapporte.
                  item:
                    type: string
                    description: >-
                      Le composant de la ligne ou l'un de ses substituts, par ID
                      ou UGS. Les substituts sont utilisés par ordre de rang.
                  quantity:
                    type: string
                    description: >-
                      Combien est sorti, dans l'unité de base de l'article, sous
                      forme décimale exacte supérieure à zéro.
                  lot:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Le lot utilisé, pour un article suivi par lot. S'il est
                      omis, les lots que détient l'ordre de fabrication sont
                      utilisés.
                  serials:
                    type: array
                    items:
                      type: string
                    description: >-
                      Les numéros de série utilisés, pour un article suivi par
                      numéro de série, un par unité.
                  reason:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Pourquoi la ligne utilise plus que sa liste de pièces.
                      Requis lorsque c'est le cas.
                required:
                  - line
                  - item
                  - quantity
              description: >-
                Ce qui est sorti, dans l'ordre, de 1 à 200 entrées. Un substitut
                est vérifié par rapport à ce que les entrées précédentes ont
                utilisé.
          required:
            - build_id
            - entries
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.builds.issue_parts
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            entries:
              - line: 0199a0d0-0000-7000-8000-000000000604
                item: M4-10
                quantity: '4'
                lot: null
    SyncCommandManufacturingBuildsReportProblem:
      type: object
      title: SyncCommandManufacturingBuildsReportProblem
      description: >-
        Un problème signalé sur un ordre de fabrication ou l'une de ses
        opérations. Le contenu de la photo n'est pas conservé dans les entrées
        d'audit.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.builds.report_problem
          description: >-
            Le nom de la commande, toujours
            `manufacturing.builds.report_problem`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication touchée par le problème.
            operation:
              type:
                - string
                - 'null'
              description: >-
                L'ID de l'opération de fabrication visée par le problème.
                Lorsqu'il est omis, le problème vise toute la fabrication.
            reason:
              enum:
                - material
                - machine
                - quality
                - instructions
                - other
              description: "Le genre de problème\_: `material`, `machine`, `quality`, `instructions` ou `other`."
            note:
              type: string
              description: Ce qui s'est passé, jusqu'à 5,000 caractères.
            id:
              type:
                - string
                - 'null'
              description: >-
                Un UUIDv7 que l'appareil a choisi pour le problème, afin que les
                commandes suivantes puissent y faire référence.
          required:
            - build_id
            - reason
            - note
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.builds.report_problem
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            operation: 0199a0d0-0000-7000-8000-000000000602
            reason: machine
            note: The saw stalls.
    SyncCommandManufacturingOperationsComplete:
      type: object
      title: SyncCommandManufacturingOperationsComplete
      description: "Comment une opération d'un ordre de fabrication s'est terminée\_: combien de pièces sont sorties bonnes, combien ont été mises au rebut et, le cas échéant, pourquoi."
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.operations.complete
          description: Le nom de la commande, toujours `manufacturing.operations.complete`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication à laquelle appartient l'opération.
            operation_id:
              type: string
              description: L'ID de l'opération de fabrication à terminer.
            good_quantity:
              type: string
              description: >-
                Combien de pièces sont sorties bonnes, dans l'unité de base de
                l'article, sous forme de décimale exacte de zéro ou plus.
                L'opération suivante peut en prendre au plus ce nombre.
            scrap_quantity:
              type: string
              description: >-
                Combien de pièces ont été mises au rebut, sous forme décimale
                exacte de zéro ou plus. La valeur est `0` si omis. Les bonnes
                pièces et les rebuts ensemble ne peuvent pas dépasser ce que
                l'opération pouvait prendre.
            scrap_reason:
              type:
                - string
                - 'null'
              description: >-
                Pourquoi des unités ont été mises au rebut, jusqu'à 1,000
                caractères. Requis lorsqu'il y en a eu.
            checks:
              type: array
              items:
                type: object
                properties:
                  check_id:
                    type: string
                    description: La vérification, telle que l'appareil la nomme.
                  result:
                    enum:
                      - pass
                      - fail
                      - na
                    description: "Résultat du contrôle\_: `pass`, `fail` ou `na`."
                  value:
                    type:
                      - string
                      - 'null'
                    description: Ce qui a été mesuré, lorsque le contrôle prend une valeur.
                  note:
                    type:
                      - string
                      - 'null'
                    description: Une note sur la vérification, d'au plus 1,000 caractères.
                required:
                  - check_id
                  - result
              description: >-
                Les vérifications consignées à la fin de l'opération. Une
                vérification échouée est enregistrée et n'arrête pas
                l'opération.
          required:
            - build_id
            - operation_id
            - good_quantity
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.operations.complete
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            operation_id: 0199a0d0-0000-7000-8000-000000000602
            good_quantity: '2'
            checks:
              - check_id: length
                result: pass
                value: '400.2'
              - check_id: burr
                result: fail
                note: Deburred by hand
              - check_id: label
                result: na
    SyncCommandManufacturingOperationsPause:
      type: object
      title: SyncCommandManufacturingOperationsPause
      description: Une opération d'un ordre de fabrication.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.operations.pause
          description: Le nom de la commande, toujours `manufacturing.operations.pause`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication à laquelle appartient l'opération.
            operation_id:
              type: string
              description: L'ID de l'opération de fabrication.
          required:
            - build_id
            - operation_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.operations.pause
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            operation_id: 0199a0d0-0000-7000-8000-000000000602
    SyncCommandManufacturingOperationsStart:
      type: object
      title: SyncCommandManufacturingOperationsStart
      description: Une opération d'un ordre de fabrication.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: manufacturing.operations.start
          description: Le nom de la commande, toujours `manufacturing.operations.start`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            build_id:
              type: string
              description: L'ID de la fabrication à laquelle appartient l'opération.
            operation_id:
              type: string
              description: L'ID de l'opération de fabrication.
          required:
            - build_id
            - operation_id
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: manufacturing.operations.start
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            build_id: 0199a0d0-0000-7000-8000-000000000601
            operation_id: 0199a0d0-0000-7000-8000-000000000602
    SyncCommandPurchasingOrdersReceive:
      type: object
      title: SyncCommandPurchasingOrdersReceive
      description: >-
        La commande `purchasing.orders.receive`, qu'un appareil envoie pour
        modifier quelque chose pendant qu'il est peut-être hors ligne.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: purchasing.orders.receive
          description: Le nom de la commande, toujours `purchasing.orders.receive`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            order_id:
              type: string
              description: L'ID du bon de commande sur lequel les marchandises sont reçues.
            lines:
              type: array
              items:
                type: object
                properties:
                  order_line_id:
                    type: string
                    description: >-
                      L'ID de la ligne de bon de commande sur laquelle les
                      marchandises sont reçues.
                  quantity:
                    type: string
                    description: >-
                      Combien est entré, en `unit`, sous forme de chaîne
                      décimale supérieure à zéro.
                  unit:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Le code de l'unité dans laquelle `quantity` est exprimée.
                      Toute unité à partir de laquelle l'article se convertit;
                      l'unité de la ligne de commande lorsqu'il est omis.
                  status:
                    enum:
                      - available
                      - quarantined
                      - rejected
                    description: "Le statut avec lequel le stock arrive\_: `available`, `quarantined` pour le retenir en vue d'une inspection ou `rejected`. `available` lorsque ce champ est omis."
                  lot:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Le numéro de lot, 64 caractères au plus, pour un article
                      suivi par lot.
                  lot_expires_on:
                    type:
                      - string
                      - 'null'
                    format: date
                    description: >-
                      Le jour d'expiration du lot, sous forme `YYYY-MM-DD`, pour
                      un article suivi par lot.
                  serials:
                    type: array
                    items:
                      type: string
                    description: >-
                      Les numéros de série reçus, un par unité et jusqu'à 25,
                      pour un article suivi par numéro de série.
                  origin_country:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Le pays d'où viennent les marchandises, sous forme de code
                      ISO 3166-1 alpha-2. Le pays de l'entrée du catalogue du
                      fournisseur lorsqu'il est omis.
                required:
                  - order_line_id
                  - quantity
              description: >-
                Ce qui est arrivé, de 1 à 50 lignes, chacune rattachée à une
                ligne de la commande.
            received_on:
              type:
                - string
                - 'null'
              format: date
              description: >-
                Le jour d'arrivée des marchandises, sous forme `YYYY-MM-DD`.
                Aujourd'hui s'il est omis.
            note:
              type:
                - string
                - 'null'
              description: Une note sur la réception, d'au plus 1,000 caractères.
            id:
              type:
                - string
                - 'null'
              description: >-
                Un UUIDv7 que l'appareil choisit pour la réception, afin que les
                commandes suivantes puissent la nommer. Un ID est créé s'il est
                omis.
          required:
            - order_id
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: purchasing.orders.receive
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            order_id: 0199a0d0-0000-7000-8000-000000000301
            received_on: '2026-11-02'
            note: Box 2 of 3
            lines:
              - order_line_id: 0199a0d0-0000-7000-8000-000000000302
                quantity: '6'
                lot: L-2611
                lot_expires_on: '2028-01-31'
                origin_country: DE
              - order_line_id: 0199a0d0-0000-7000-8000-000000000303
                quantity: '4'
                status: quarantined
    SyncCommandSalesOrdersShip:
      type: object
      title: SyncCommandSalesOrdersShip
      description: >-
        La commande `sales.orders.ship`, qu'un appareil envoie pour modifier
        quelque chose pendant qu'il est peut-être hors ligne.
      properties:
        id:
          type: string
          format: uuid
          description: "Un UUIDv7 que l'appareil crée pour la commande. C'est la clé d'idempotence\_: envoyer le même ID à nouveau n'exécute pas la commande deux fois."
        name:
          type: string
          const: sales.orders.ship
          description: Le nom de la commande, toujours `sales.orders.ship`.
        depends_on:
          type:
            - array
            - 'null'
          items:
            type: string
            format: uuid
          description: >-
            Les ID des commandes qui doivent être terminées avant l'exécution de
            celle-ci.
        created_at:
          type: string
          format: date-time
          description: >-
            Le moment où l'appareil a créé la commande, selon sa propre horloge.
            C'est une indication seulement, car l'horloge d'un appareil peut
            être fausse.
        payload:
          type: object
          properties:
            order_id:
              type: string
              description: >-
                L'ID de la commande client sur laquelle les marchandises sont
                expédiées.
            lines:
              type: array
              items:
                type: object
                properties:
                  order_line_id:
                    type: string
                    description: >-
                      L'ID de la ligne de commande client sur laquelle
                      l'expédition a été faite.
                  quantity:
                    type: string
                    description: >-
                      La quantité expédiée, sous forme de chaîne décimale en
                      `unit`. Supérieure à zéro.
                  unit:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Toute unité dont l'article peut être converti; celle de la
                      ligne de commande si elle est omise.
                  lot:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Un lot choisi par numéro; ce que la ligne contient s'il
                      est omis.
                  serials:
                    type: array
                    items:
                      type: string
                    description: >-
                      Les numéros de série expédiés, un par unité et jusqu'à 25,
                      pour un article suivi par numéro de série.
                required:
                  - order_line_id
                  - quantity
              description: >-
                Ce qui a été expédié, de 1 à 50 lignes. Une ligne ne peut pas
                expédier plus que ce qui reste sur sa ligne de commande.
            shipped_on:
              type:
                - string
                - 'null'
              format: date
              description: Aujourd'hui lorsque omis.
            carrier:
              type:
                - string
                - 'null'
              description: >-
                Le transporteur qui a pris les marchandises, par exemple UPS,
                jusqu'à 64 caractères.
            tracking_number:
              type:
                - string
                - 'null'
              description: >-
                Le numéro de suivi du transporteur, jusqu'à 128 caractères. Il
                peut aussi être défini après la comptabilisation.
            note:
              type:
                - string
                - 'null'
              description: >-
                Une note imprimée sur le bordereau d'expédition, d'au plus 1,000
                caractères.
            packages:
              type: array
              items:
                type: object
                properties:
                  weight:
                    type: object
                    properties:
                      value:
                        type: string
                        description: >-
                          La mesure sous forme de chaîne décimale, supérieure à
                          zéro, avec jusqu'à 8 chiffres et 4 décimales.
                      unit:
                        type: string
                        description: "L'unité\_: `g`, `kg`, `oz` ou `lb` pour un poids, ou `mm`, `cm` ou `in` pour une longueur."
                    required:
                      - value
                      - unit
                    description: Le poids du colis, sous forme de `value` et de `unit`.
                  length:
                    type:
                      - object
                      - 'null'
                    properties:
                      value:
                        type: string
                        description: >-
                          La mesure sous forme de chaîne décimale, supérieure à
                          zéro, avec jusqu'à 8 chiffres et 4 décimales.
                      unit:
                        type: string
                        description: "L'unité\_: `g`, `kg`, `oz` ou `lb` pour un poids, ou `mm`, `cm` ou `in` pour une longueur."
                    required:
                      - value
                      - unit
                    description: >-
                      La longueur du colis, sous forme de `value` et de `unit`.
                      Null lorsqu'elle n'a pas été mesurée.
                  width:
                    type:
                      - object
                      - 'null'
                    properties:
                      value:
                        type: string
                        description: >-
                          La mesure sous forme de chaîne décimale, supérieure à
                          zéro, avec jusqu'à 8 chiffres et 4 décimales.
                      unit:
                        type: string
                        description: "L'unité\_: `g`, `kg`, `oz` ou `lb` pour un poids, ou `mm`, `cm` ou `in` pour une longueur."
                    required:
                      - value
                      - unit
                    description: >-
                      La largeur du colis, sous forme de `value` et de `unit`.
                      Null lorsqu'elle n'a pas été mesurée.
                  height:
                    type:
                      - object
                      - 'null'
                    properties:
                      value:
                        type: string
                        description: >-
                          La mesure sous forme de chaîne décimale, supérieure à
                          zéro, avec jusqu'à 8 chiffres et 4 décimales.
                      unit:
                        type: string
                        description: "L'unité\_: `g`, `kg`, `oz` ou `lb` pour un poids, ou `mm`, `cm` ou `in` pour une longueur."
                    required:
                      - value
                      - unit
                    description: >-
                      La hauteur du colis, sous forme de `value` et de `unit`.
                      Null lorsqu'elle n'a pas été mesurée.
                  package_preset_id:
                    type:
                      - string
                      - 'null'
                    description: La boîte enregistrée dans laquelle il a été emballé.
                required:
                  - weight
              description: Les colis dans lesquels il est parti, tels qu'emballés.
            id:
              type:
                - string
                - 'null'
              description: >-
                L'ID de l'expédition, un UUIDv7 que l'appareil a choisi pour que
                les commandes suivantes puissent la nommer.
          required:
            - order_id
            - lines
          description: Les champs de la modification que fait la commande.
      required:
        - id
        - name
        - created_at
        - payload
      examples:
        - id: 0199a0d0-0000-7000-8000-00000000f001
          name: sales.orders.ship
          depends_on: []
          created_at: '2026-11-02T10:00:00+00:00'
          payload:
            order_id: 0199a0d0-0000-7000-8000-000000000301
            shipped_on: '2026-11-02'
            carrier: UPS
            tracking_number: 1Z999AA10123456784
            note: Left at the dock
            lines:
              - order_line_id: 0199a0d0-0000-7000-8000-000000000302
                quantity: '6'
              - order_line_id: 0199a0d0-0000-7000-8000-000000000303
                quantity: '4'
            packages:
              - weight:
                  value: '1.2'
                  unit: kg
                length:
                  value: '30'
                  unit: cm
                width:
                  value: '20'
                  unit: cm
                height:
                  value: '10'
                  unit: cm
              - weight:
                  value: '0.4'
                  unit: kg
    CommandResultResource:
      type: object
      properties:
        id:
          type: string
          description: L'ID de la commande, tel que l'appareil l'a envoyé.
        status:
          type: string
          description: "Ce qu'est devenue la commande\_: `applied`, `rejected` ou `deferred`."
          enum:
            - applied
            - rejected
            - deferred
        replayed:
          type: boolean
          description: >-
            Indique s'il s'agit du résultat stocké d'une requête antérieure. Une
            commande rejouée ne s'est pas exécutée de nouveau.
        result:
          description: >-
            Le résultat de la commande, seulement lorsqu'elle s'est exécutée
            dans cette requête; null pour une relecture.
        result_ids:
          type: array
          description: >-
            Les ID de ce que la commande a créé ou modifié. Vide pour un rejet
            ou un report.
          items:
            type: string
        code:
          type:
            - string
            - 'null'
          description: >-
            Le code d'un rejet, par exemple `command_id_reused` ou
            `validation_failed`. Null autrement.
        message:
          type:
            - string
            - 'null'
          description: >-
            Ce qui a mal tourné avec une commande rejetée, à l'intention des
            utilisateurs. Null sinon.
        fields:
          type: object
          description: Les champs invalides d'un rejet, chacun avec ses messages.
          additionalProperties:
            type: array
            items:
              type: string
        retry_after:
          type:
            - integer
            - 'null'
          description: >-
            Pour une commande différée, le nombre de secondes à attendre avant
            de la renvoyer. Null autrement.
      required:
        - id
        - status
        - replayed
        - result
        - result_ids
        - code
        - message
        - fields
        - retry_after
      title: CommandResultResource
      description: Ce qu'est devenue une commande.
  responses:
    AuthenticationException:
      description: Non authentifié
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    DeviceRequired:
      description: Appareil requis
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    BatchTooLarge:
      description: Lot trop volumineux
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    ValidationException:
      description: Erreur de validation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
  securitySchemes:
    apiKey:
      type: http
      description: >-
        Pour vos propres scripts et vos intégrations de serveur à serveur. Créez
        une clé dans l'application sous Paramètres > Accès > Clés d'API et
        copiez-la à ce moment-là, car elle n'est affichée qu'une fois.
        Envoyez-la sous la forme `Authorization: Bearer <key>`. La clé agit en
        tant que le membre qui l'a créée, dans l'organisation où elle a été
        créée. Un appel exige l'autorisation du membre et l'une des portées de
        la clé, comme `inventory:read` ou `sales:write`. Une clé avec `*` a
        toutes les portées.
      scheme: bearer
    oauth2:
      type: oauth2
      description: >-
        Pour les applications que d'autres personnes connectent à leur compte
        StockShift. Utilisez le flux du code d'autorisation OAuth 2.1 avec PKCE
        (S256); il n'y a pas de secret client. Découvrez les points de
        terminaison à `/.well-known/oauth-authorization-server` (RFC 8414) et
        enregistrez votre application à `POST /oauth/register` (RFC 7591). Le
        membre choisit l'organisation et approuve les portées sur la page de
        consentement, et le jeton ne peut jamais faire plus que ce que le membre
        pourrait faire. Envoyez-le sous la forme `Authorization: Bearer
        <token>`, comme vous le feriez avec une clé d'API. Les jetons d'accès
        durent une heure; chaque actualisation renvoie un nouveau jeton
        d'actualisation, alors conservez-le.
      flows:
        authorizationCode:
          authorizationUrl: https://app.stockshift.io/oauth/authorize
          tokenUrl: https://app.stockshift.io/oauth/token
          refreshUrl: https://app.stockshift.io/oauth/token
          scopes:
            access:read: Access read
            audit:read: Audit read
            address:read: Address read
            address:write: Address write
            billing:read: Billing read
            catalog:read: Catalog read
            catalog:write: Catalog write
            dashboard:read: Dashboard read
            dashboard:write: Dashboard write
            developer:read: Developer read
            developer:write: Developer write
            devices:read: Devices read
            devices:write: Devices write
            documents:read: Documents read
            documents:write: Documents write
            notifications:read: Notifications read
            notifications:write: Notifications write
            inventory:read: Inventory read
            inventory:write: Inventory write
            purchasing:read: Purchasing read
            purchasing:write: Purchasing write
            quality:read: Quality read
            quality:write: Quality write
            sales:read: Sales read
            sales:write: Sales write
            engineering:read: Engineering read
            engineering:write: Engineering write
            manufacturing:read: Manufacturing read
            manufacturing:write: Manufacturing write
            automation:read: Automation read
            automation:write: Automation write
            insights:read: Insights read
            insights:write: Insights write
            integrations:read: Integrations read
            integrations:write: Integrations write
            labels:read: Labels read
            labels:write: Labels write
            library:read: Library read
            organization:read: Organization read
            organization:write: Organization write
            planning:read: Planning read
            planning:write: Planning write
            sync:read: Sync read
            sync:write: Sync write

````

## Related topics

- [Envoyer un bon de commande au fournisseur par courriel](https://docs.stockshift.io/fr-ca/api-reference/bons-de-commande/envoyer-un-bon-de-commande-au-fournisseur-par-courriel.md)
- [Recevoir des marchandises pour un bon de commande](https://docs.stockshift.io/fr-ca/api-reference/bons-de-commande/recevoir-des-marchandises-pour-un-bon-de-commande.md)
- [Expédier une commande client](https://docs.stockshift.io/fr-ca/api-reference/commandes-client/expédier-une-commande-client.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.