Raccorder un canal de vente sans avoir deux systèmes écrivainsTous les articles

Raccorder un canal de vente sans avoir deux systèmes écrivains

L’erreur la plus coûteuse d’un raccordement survient avant le premier enregistrement : deux systèmes qui écrivent tous les deux. Ce cas montre comment clarifier la responsabilité en amont.

Publié: 2026-09-12Temps de lecture: 5 minAPI tapinomahub & processus
API & processusAftermarket automobileAPIERP & gestion de stockMarketplacesPrix & évaluationCommerce de pièces

Un négociant vend via une marketplace et tient un ERP en parallèle. Les deux systèmes se croient de référence. Qui l’a vécu connaît le résultat : des stocks qui oscillent, des prix redevenus anciens une nuit plus tard, et une pièce unique vendue deux fois.

Raccorder un canal de vente sans avoir deux systèmes écrivainsEntrée : un compte de vente alimenté aujourd’hui par la boutique et l’ERP 1. Lire les capacités (GET /commerce/v1/capabilities): Par canal : supportLevel, flows et prise en charge des réservations 2. Créer la connexion (POST /commerce/v1/connections): authorizationProof et ownershipMode ; les accès ne sont jamais divulgués 3. Attribuer l’autorité (POST /commerce/v1/sync-plans): writerAssignments : au plus une affectation d’écriture active par compte de vente, zone de marché, offre facultative et flow ; conflictPolicy règle les conflits 4. Faire un essai à blanc (POST /commerce/v1/sync-runs): mode en aperçu ; counts donne read, changed, rejected et conflicted 5. Approuver (POST /commerce/v1/sync-runs/{syncRunId}/approval): decision, previewRevision et expectedRevision — on approuve l’aperçu contrôlé, rien d’autre Sortie : une connexion à responsabilité claire et un premier transfert approuvé Aperçu : ce contrat n’effectue aucune modification de canal en production ni prélèvement de frais ; une validation distincte est requise.Raccorder un canal de vente sans avoir deux systèmesécrivainsEntrée : un compte de vente alimenté aujourd’hui par la boutique et l’ERP01Lire les capacitésGET /commerce/v1/capabilitiesPar canal : supportLevel, flows et prise en charge des réservations02Créer la connexionPOST /commerce/v1/connectionsauthorizationProof et ownershipMode ; les accès ne sont jamais divulgués03Attribuer l’autoritéPOST /commerce/v1/sync-planswriterAssignments : au plus une affectation d’écriture active par compte de vente, zone demarché, offre facultative et flow ; conflictPolicy règle les conflits04Faire un essai à blancPOST /commerce/v1/sync-runsmode en aperçu ; counts donne read, changed, rejected et conflicted05ApprouverPOST /commerce/v1/sync-runs/{syncRunId}/approvaldecision, previewRevision et expectedRevision — on approuve l’aperçu contrôlé, rien d’autreSortie : une connexion à responsabilité claire et un premier transfert approuvéAperçu : ce contrat n’effectue aucune modification de canal en production ni prélèvement de frais ; unevalidation distincte est requise.
Cinq appels jusqu’au premier transfert validé. L’essai à blanc précède la validation, il ne la suit pas.

Le contrat Commerce place donc volontairement une étape avant le transfert : avant toute écriture, un plan de synchronisation consigne qui écrit ; au plus une affectation d’écriture active est admise par compte de vente, zone de marché, offre facultative et flux métier. Ensuite vient un aperçu, et seule une validation explicite en fait une modification.

SurfaceRôles
CommerceCommerce de pièces, Plateforme et marketplace, Éditeur de logiciels

Ce que ce cas suppose

  • Un compte de vente autorisé. La connexion est créée avec une preuve d’autorisation ; les accès du canal ne sont ni divulgués ni transmis.
  • Une décision sur le système de référence. Cette question est commerciale, non technique. Le contrat impose seulement qu’on y réponde.
  • La volonté de lire l’essai à blanc. Un aperçu que personne ne regarde renonce à la seule occasion d’échouer sans conséquence.
  • Une clé d’idempotence par appel écrivain. Un appel répété ne doit pas produire un second effet.

Le déroulement

Le tableau indique pour chaque étape l’appel compétent et ce qui existe ensuite. La justification de l’étape figure en dessous.

La chaîne d’appels de ce cas d’usage
ÉtapeAppelCe qui existe ensuite
Lire les capacitésGET /commerce/v1/capabilitiesPar canal : supportLevel, flows et prise en charge des réservations
Créer la connexionPOST /commerce/v1/connectionsauthorizationProof et ownershipMode ; les accès ne sont jamais divulgués
Attribuer l’autoritéPOST /commerce/v1/sync-planswriterAssignments : au plus une affectation d’écriture active par compte de vente, zone de marché, offre facultative et flow ; conflictPolicy règle les conflits
Faire un essai à blancPOST /commerce/v1/sync-runsmode en aperçu ; counts donne read, changed, rejected et conflicted
ApprouverPOST /commerce/v1/sync-runs/{syncRunId}/approvaldecision, previewRevision et expectedRevision — on approuve l’aperçu contrôlé, rien d’autre

Pourquoi chaque étape est nécessaire

  1. Lire les capacités. GET /commerce/v1/capabilities indique par canal supportLevel, flows et la prise en charge des réservations. Cette étape établit avant tout travail ce que le canal sait faire — sinon un raccordement sur une fonction non prise en charge échoue tard et cher.
  2. Créer la connexion. POST /commerce/v1/connections prend channelId, channelAccountReference, marketAreaReference, authorizationProof et ownershipMode. Les détails liés au canal restent derrière une frontière de traduction privée ; les identifiants publics sont opaques.
  3. Fixer la responsabilité. POST /commerce/v1/sync-plans est l’étape décisive : writerAssignments admet au plus une affectation d’écriture active par compte de vente, zone de marché, offre facultative et flow, conflictPolicy règle le litige, et dryRunRequired peut rendre l’essai à blanc obligatoire.
  4. Faire un essai à blanc. POST /commerce/v1/sync-runs en mode aperçu renvoie counts avec read, changed, rejected et conflicted. Quatre chiffres qui disent, avant la première écriture réelle, ce qui se passerait.
  5. Valider. POST /commerce/v1/sync-runs/{syncRunId}/approval prend decision, previewRevision et expectedRevision ; les trois champs sont obligatoires. On valide donc exactement l’aperçu contrôlé — non un état entre-temps modifié.
Lancer une exécution de synchronisation en aperçu
curl -X POST \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: lauf-2026-09-12-01' \
  -d '{"syncPlanId":"<syncPlanId>","mode":"preview"}' \
  'https://commerce-preview.invalid/commerce/v1/sync-runs'

Ce que l’on obtient

Il reste une connexion où le plan consigne qui écrit, et un premier transfert lu en aperçu avant validation. Le contrat ne garantit pas que le stock cesse d’osciller pour autant : il ne peut empêcher un travail manuel à côté dans le canal.

Où cela figure dans la documentation

Les listes de champs contractuelles, les codes d’erreur et les réponses d’exemple se trouvent dans le contrat OpenAPI de cette surface, à l’adresse docs.tapinomahub.com (tapinoma-commerce). Tous les cas d’usage classés par surface et par rôle : aperçu des cas d’usage.

Sources et références juridiques

Questions fréquentes

Puis-je laisser deux systèmes écrire s’ils se coordonnent ?

Le plan n’admet qu’une affectation d’écriture active par compte de vente, zone de marché, offre facultative et flux. Ce qui doit se coordonner peut se répartir sur des flux distincts — stock ici, prix là, par exemple.

Dois-je toujours faire un essai à blanc ?

Le plan comporte un champ pour cela. Le définir rend l’essai obligatoire ; c’est conseillé pour un premier raccordement et après une modification du plan.

Mes accès marketplace sont-ils transmis ?

Non. La connexion est créée avec une preuve d’autorisation, et les détails liés au canal restent derrière une frontière privée.