API de modification de commande Shopify : un flux fiable de l’ouverture à la validation

Par Shubham Vats, Fondateur de Revize

Publié le 12 min de lecture

Sur cette page

Pourquoi les 3 étapes de l’API comptent

Modifier une commande est une transaction, pas une simple mise à jour. Shopify crée une version calculée de la commande. L’application y prépare les modifications, puis applique cette version lorsqu’elle valide la modification.

Sur plus de 10 millions de commandes passées dans des boutiques utilisant Revize, environ 1 commande sur 19, soit 5,2 %, a été modifiée après le paiement (Revize, 2026). Ce volume justifie de traiter la modification des commandes comme une opération courante plutôt que comme une exception gérée par le service client.

Le CalculatedOrder ressemble à une copie de contrôle d’une liste de prélèvement en entrepôt. Vous pouvez y ajouter ou retirer des lignes, examiner le résultat, puis publier une version définitive.

Le moment de la modification compte autant que la justesse des appels API. Dans les boutiques utilisant Revize, la modification médiane intervient 4,6 minutes après le paiement (Revize, 2026). Si la préparation commence pendant cet intervalle, même un code techniquement correct peut aboutir à un colis erroné.

Aperçu d’une modification de commande à côté d’un colis Shopify inchangé

Fonctionnement de l’API de modification de commande Shopify

Avec l’API Shopify Admin 2026-07, le flux comprend orderEditBegin, une ou plusieurs mutations de préparation, puis orderEditCommit. Les références des mutations Shopify acceptent l’ID de la commande calculée ou celui de la session de modification pour la préparation et la validation. Ce guide utilise systématiquement calculatedOrder.id.

  1. Appelez orderEditBegin avec l’ID de la commande Shopify.
  2. Enregistrez calculatedOrder.id dans $calculatedOrderId.
  3. Exécutez chaque mutation de préparation avec cet ID.
  4. Examinez les lignes calculées, les totaux et chaque tableau userErrors.
  5. Transmettez le même ID à orderEditCommit.

Shopify décrit ce modèle d’ouverture, de préparation et de validation. L’application doit disposer du champ d’autorisation write_order_edits.

Une mutation d’ouverture minimale peut demander les deux objets à des fins de diagnostic, tout en ne retenant qu’un seul identifiant pour la suite du flux :

orderEditBeginGraphQL
mutation BeginOrderEdit($orderId: ID!) {
  orderEditBegin(id: $orderId) {
    calculatedOrder {
      id
      lineItems(first: 50) {
        nodes {
          id
          quantity
        }
      }
    }
    orderEditSession {
      id
    }
    userErrors {
      field
      message
    }
  }
}

Arrêtez-vous si userErrors n’est pas vide. Une requête réseau réussie prouve seulement que Shopify l’a reçue, pas que l’opération a été acceptée.

Le guide de modification correspondant à cette version de l’API décrit les opérations de préparation pour les variantes, les quantités, les articles personnalisés, les remises sur les lignes de commande et les lignes d’expédition. Consultez la référence de la mutation 2026-07 concernée avant de commencer l’implémentation, puis avant tout changement de version de l’API.

Flux en 3 étapes de l’API de modification de commande Shopify

Comment remplacer complètement une variante

Pour remplacer une variante, ajoutez la nouvelle et ramenez à zéro la quantité de la ligne calculée d’origine dans une même session de modification. Ne validez qu’après la réussite des deux opérations et après avoir vérifié que le résultat calculé correspond à ce que le client a confirmé.

Supposons qu’un client ait commandé une taille M et souhaite une taille L.

  1. Ouvrez la modification et enregistrez calculatedOrder.id.
  2. Ajoutez la variante en taille L avec cet ID :
orderEditAddVariantGraphQL
mutation AddReplacement(
  $calculatedOrderId: ID!
  $variantId: ID!
  $quantity: Int!
) {
  orderEditAddVariant(
    id: $calculatedOrderId
    variantId: $variantId
    quantity: $quantity
  ) {
    calculatedLineItem {
      id
      quantity
    }
    userErrors {
      field
      message
    }
  }
}
  1. Repérez la taille M d’origine dans la commande calculée. Utilisez l’ID de sa ligne calculée au lieu de reprendre l’ID d’une ligne de la commande initiale sans vérifier l’état calculé renvoyé.

Remplacement d’une variante d’un vêtement dans un colis

  1. Ramenez la quantité de la ligne d’origine à zéro :
orderEditSetQuantityGraphQL
mutation RemoveOriginal(
  $calculatedOrderId: ID!
  $lineItemId: ID!
) {
  orderEditSetQuantity(
    id: $calculatedOrderId
    lineItemId: $lineItemId
    quantity: 0
  ) {
    calculatedLineItem {
      id
      quantity
    }
    userErrors {
      field
      message
    }
  }
}
  1. Interrogez de nouveau la commande calculée. Vérifiez que la nouvelle variante est présente, que la quantité de l’ancienne est nulle et que les totaux correspondent à la confirmation du client.
  2. Validez avec le même ID de commande calculée :
orderEditCommitGraphQL
mutation CommitOrderEdit(
  $calculatedOrderId: ID!
  $notifyCustomer: Boolean!
  $staffNote: String
) {
  orderEditCommit(
    id: $calculatedOrderId
    notifyCustomer: $notifyCustomer
    staffNote: $staffNote
  ) {
    order {
      id
      updatedAt
    }
    userErrors {
      field
      message
    }
  }
}

Attention : Ne validez pas si l’ajout a réussi, mais que la suppression n’a pas encore réussi. Le remplacement deviendrait un article supplémentaire.

Rejetez les clics de confirmation en double, consignez l’étape terminée et récupérez de nouveau la commande avant validation si un autre processus a pu la modifier.

Quelle mutation utiliser pour chaque modification

Utilisez le flux de commande calculée pour les lignes de commande, les quantités, les remises et les changements de lignes d’expédition. Réservez orderUpdate, les mutations d’annulation et celles de remboursement aux opérations décrites dans leurs références pour la version utilisée.

Demande du client Opération Shopify principale Décision de l’application
Changer une quantité ou retirer un article orderEditBegin et orderEditSetQuantity Vérifier le résultat calculé
Remplacer une variante orderEditAddVariant et orderEditSetQuantity Préparer les deux changements avant validation
Ajouter un produit orderEditAddVariant Vérifier la disponibilité et le solde
Changer l’adresse e-mail, l’adresse de livraison, les balises, la note ou les métachamps orderUpdate Vérifier la commande renvoyée et les erreurs
Annuler toute la commande orderCancel Vérifier les paramètres d’annulation et la réponse
Créer un remboursement refundCreate Vérifier le montant et les échecs renvoyés

La référence 2026-07 de orderUpdate couvre des attributs comme l’adresse e-mail du client, l’adresse de livraison, les balises et les métachamps. Ses exemples montrent aussi la mise à jour de la note. Elle renvoie les changements importants, comme l’ajout ou la suppression de lignes de commande, le changement de quantités ou la modification de remises, vers orderEditBegin.

Les restrictions de Shopify sur la modification des commandes précisent que les codes de réduction, les réductions automatiques et les réductions appliquées par script ne peuvent pas être modifiés. Les remises à l’échelle de la commande ne peuvent pas non plus être ajoutées, supprimées ou changées. Les mutations de remise sur une ligne de commande ne lèvent pas ces restrictions.

Les limites de l’API de modification de commande Shopify

La validation d’une modification et son règlement financier sont deux étapes distinctes. Shopify précise qu’une modification du total peut laisser un solde à payer par le client ou nécessiter un remboursement.

Si le total augmente, récupérez la commande validée et vérifiez comment le solde sera encaissé avant de la transmettre au traitement des commandes (fulfillment). Une réponse positive de orderEditCommit ne prouve pas que le paiement est terminé.

Si le total diminue, la validation ne remplace pas une procédure de remboursement délibérée. Calculez le montant voulu, appelez l’opération de remboursement appropriée et examinez sa réponse. Une modification sans différence de montant ne nécessite ni encaissement ni remboursement, mais exige tout de même une dernière vérification de l’état de la commande.

Abonnez-vous au webhook Shopify orders/edited, puis récupérez de nouveau la commande avant qu’un système en aval n’agisse. Un webhook signale qu’il faut lire l’enregistrement actuel ; il ne garantit pas qu’une copie locale antérieure soit encore exacte.

Ne laissez jamais un prestataire logistique tiers, ou 3PL, préparer une commande dont la modification ou la situation financière n’est pas résolue. Testez la mise en attente, la règle liée au statut de paiement ou le signal de libération avec le système d’entrepôt qui télécharge réellement les commandes.

Comment diagnostiquer les échecs de modification

Vérifiez d’abord l’admissibilité de la commande, les identifiants, la validation et les modifications concurrentes. Consignez le nom de la mutation, l’ID de la commande Shopify, l’ID de modification retenu et le tableau userErrors complet, sans enregistrer de données sensibles sur le client ou le paiement.

Symptôme Piste à examiner Test suivant
L’ouverture renvoie une erreur d’admissibilité Commande archivée, ancienne ou autrement non admissible Tester une commande récente et active
calculatedOrder est nul Problème d’autorisation, d’ID ou d’admissibilité Examiner chaque entrée de userErrors
La préparation rejette l’ID Mauvais objet ou session de modification obsolète Utiliser un ID renvoyé par l’appel d’ouverture en cours
La validation échoue après une préparation correcte La commande a changé après l’ouverture Récupérer la commande et recommencer
La validation réussit, mais le règlement reste en suspens Le règlement a été présumé terminé Examiner le solde
L’entrepôt reçoit des lignes obsolètes La préparation a commencé trop tôt Tester le moment de la mise en attente et de la libération

Les conditions de modification des commandes de Shopify indiquent que les applications ont besoin de write_order_edits, ne peuvent modifier que les lignes non traitées et ne peuvent modifier ni les commandes archivées ni celles passées avant le 1er janvier 2019. Par défaut, les applications ont accès aux commandes des 60 derniers jours ; interroger des commandes plus anciennes nécessite read_all_orders.

Ces règles sont distinctes. read_all_orders donne accès à des enregistrements plus anciens, mais ne rend pas modifiable une commande archivée ou passée avant 2019.

N’adaptez pas le comportement de l’application à un message d’erreur supposé. Lisez le champ et le message renvoyés pour la requête concernée, puis reproduisez l’échec avec une commande de test contrôlée.

Utiliser Revize ou développer avec les API

Revize est le choix le plus direct si vous voulez permettre aux clients de modifier eux-mêmes leur commande avant le traitement ; un développement sur mesure convient à une orchestration interne propre à votre entreprise. Vous choisissez entre un parcours client fourni par l’application et la gestion de chaque interface, transition et protection du flux d’entrepôt.

Critère Développement sur mesure avec l’API Shopify Revize
Logique d’ouverture, de préparation et de validation Implémentation entièrement à votre charge Parcours destiné aux clients fourni
Point d’entrée du client Conçu par votre équipe Intégré à la page de statut de la commande Shopify
Augmentation de la valeur de la commande Parcours d’encaissement à développer Pay now ouvre la page de paiement Shopify pour régler la différence
Gestion des remboursements Règles et gestion des échecs à développer Utilise l’option de remboursement configurée
Date limite de modification Délais et états personnalisés Fenêtre de modification définie par le marchand
Sécurité du traitement des commandes Intégration à l’entrepôt requise Mise en attente, solution de repli par capture du paiement ou balise de libération
Orchestration propre à l’entreprise Contrôle complet de l’implémentation Déclencheurs Shopify Flow, balises de modification et balises de libération
Tests Tous les parcours à tester en interne Parcours de test documenté avec une commande provisoire

Le développement sur mesure a sa place lorsqu’un marchand a besoin d’une interface réservée à son personnel ou d’un processus d’approbation couvrant plusieurs systèmes internes. Revize ne propose ni API générale de modification des commandes ni file d’approbation pour les marchands.

Les agences peuvent relier les déclencheurs Shopify Flow documentés aux événements de modification de Revize, utiliser les balises de modification et de libération de Revize dans la logique de traitement des commandes, ou utiliser la Public Cancellation API pour une interface d’annulation externe. La Public Cancellation API est réservée à Pro, nécessite une activation par l’assistance et applique la fenêtre de modification, les restrictions et la politique de remboursement du portail.

Parmi les modifications après achat dans les boutiques utilisant Revize, 92,2 % ont été effectuées par les clients sans intervention du service client (Revize, 2026). Le guide de modification des commandes après achat pour les agences présente le travail de cadrage à effectuer avant l’implémentation.

La disponibilité des fonctionnalités dépend du forfait. L’ajout et le remplacement de produits, les remboursements en avoir, le recalcul des remises, des frais d’expédition et des taxes, le moteur de règles, Reverse Unpaid Edits et la Public Cancellation API sont réservés à Pro, comme l’indique la documentation de facturation de Revize.

Installez Revize: Order Editing & Upsell si vous souhaitez proposer aux clients un parcours de modification en libre-service.

Parcours de développement avec l’API sur mesure et avec Revize

Comment Revize complète le parcours

Revize propose aux clients un parcours de modification encadré sur la page de statut de la commande Shopify. Le marchand définit la fenêtre de modification, les actions disponibles, la politique de remboursement et le mode de traitement des commandes.

Lorsqu’une modification augmente le total, Revize affiche Pay now et redirige le client vers la page de paiement Shopify uniquement pour régler la différence. Si le total diminue, Revize affiche Refund ; s’il reste inchangé, Confirm. Shopify exécute le paiement ou le remboursement, comme l’explique le parcours client Revize.

Le marchand règle la durée dans Order Editing > Order edit window. Le guide de configuration de la fenêtre de modification décrit les durées prédéfinies, les durées personnalisées, les heures limites programmées et le mode « jusqu’au traitement de la commande ». Ce dernier ne met pas, à lui seul, une commande en attente.

Avec le mode de traitement recommandé, Revize applique une mise en attente du traitement des commandes dans Shopify pendant la fenêtre de modification, puis la lève lorsque la fenêtre se ferme. Les systèmes qui ignorent ces mises en attente peuvent nécessiter la solution de repli documentée de capture manuelle du paiement. Une balise de libération peut aussi avertir un système de traitement configuré pour attendre cette balise.

Revize vérifie le stock en temps réel, en tenant compte de la zone d’expédition, avant d’autoriser le client à remplacer une variante. Le guide sur la mise en attente du traitement des commandes couvre la partie du parcours qui concerne l’entrepôt.

Que tester cette semaine

Testez une commande du paiement jusqu’au traitement corrigé, y compris les cas d’échec. Une mutation réussie dans un client GraphQL n’est que la première vérification.

  1. Créez une commande de développement ou une commande provisoire représentative.
  2. Testez un remplacement à prix égal, une augmentation et une diminution du montant.
  3. Examinez userErrors après l’ouverture, chaque mutation de préparation et la validation.
  4. Vérifiez la commande calculée avant de valider.
  5. Vérifiez séparément l’encaissement et la gestion du remboursement.
  6. Faites passer la commande modifiée par le véritable système de traitement des commandes.
  7. Testez une commande archivée, une commande ancienne, des tentatives simultanées et un abandon en cours de modification.
  8. Consultez les limites de la modification native des commandes Shopify avant le passage en production.

Paramètres de la fenêtre de modification et du traitement des commandes dans Revize

Questions fréquentes

Quelle est la différence entre orderUpdate et orderEditBegin ?

Utilisez orderUpdate pour les attributs de commande pris en charge et orderEditBegin pour les modifications calculées des lignes de commande. Dans l’API Shopify Admin 2026-07, orderUpdate couvre des attributs comme l’adresse e-mail, l’adresse de livraison, les balises et les métachamps. L’ajout ou la suppression de produits, les changements de quantité, les remplacements de variantes et les modifications de remises passent par une session de modification, suivie de la préparation et de la validation.

Pourquoi orderEditBegin renvoie-t-il une erreur d’admissibilité ?

La commande peut être archivée, dater d’avant 2019 ou ne comporter aucune ligne non traitée que Shopify puisse modifier. Vérifiez l’ID GraphQL de la commande, les champs d’autorisation requis, l’ancienneté de la commande, son état d’archivage, les exigences liées à la devise et la réponse userErrors complète. Faites un essai avec une commande récente et active avant de changer la logique de l’application.

Peut-on modifier des lignes déjà traitées avec l’API Shopify ?

Les lignes déjà traitées ne font pas partie du flux de modification des commandes Shopify. Une demande reçue après le traitement de la commande relève du service client ou d’un processus de retour, et non de la réouverture d’une commande calculée. Revize est conçu pour permettre aux clients de modifier leur commande avant son traitement ; ce n’est pas une plateforme de retours après livraison.

Comment supprimer une ligne avec l’API de modification de commande ?

Ouvrez une modification, trouvez la ligne calculée et appelez orderEditSetQuantity avec la quantité 0. Transmettez l’ID de la commande calculée ou de la session de modification accepté par la mutation, examinez userErrors, puis interrogez le résultat calculé avant de valider. Définissez délibérément le comportement de remise en stock de la mutation et vérifiez-le.

Comment remplacer une variante dans une commande Shopify existante ?

Ajoutez la nouvelle variante avec orderEditAddVariant, ramenez à 0 la quantité de la ligne calculée d’origine, examinez l’aperçu, puis validez. Effectuez les deux opérations dans la même session de modification. Si l’ajout réussit, mais que la suppression échoue, arrêtez-vous. Le parcours de remplacement destiné aux clients de Revize vérifie aussi le stock en temps réel dans l’entrepôt desservant l’adresse de livraison.

orderEditCommit règle-t-il tous les paiements et remboursements ?

La validation applique les modifications préparées, tandis que le règlement financier reste une étape distincte. Après la validation, récupérez la commande et examinez le solde. Une augmentation peut nécessiter un encaissement avant le traitement de la commande ; une diminution peut nécessiter une opération de remboursement distincte. Revize fournit aux clients un parcours de règlement via Shopify.

Quels champs d’autorisation faut-il pour modifier des commandes ?

Le flux de modification des commandes calculées nécessite write_order_edits. Shopify indique aussi que les applications ont besoin de read_all_orders pour interroger des commandes de plus de 60 jours. Cet accès en lecture supplémentaire ne change pas les critères de modification : les commandes archivées, celles passées avant le 1er janvier 2019 et les lignes déjà traitées restent exclues du flux documenté.

Le client reçoit-il une notification après une modification par l’API ?

Le développeur contrôle la notification Shopify lors de la validation avec notifyCustomer sur orderEditCommit. Définissez ce paramètre délibérément et utilisez staffNote lorsqu’un contexte interne est utile. Si un autre système envoie le message, récupérez d’abord la commande validée pour éviter d’envoyer au client des variantes, des quantités ou des totaux obsolètes.