melkal
Manuel d'utilisation
Sommaire - Centre d'aide - Assistance

➜︎ Retour - Menu API, webhooks et mailhooks

Webhook et mailhook « Article : stock mis à jour »

Menu de la documentation
Cette page décrit le webhook et le mailhook « Article : stock mis à jour », qui se règlent dans le menu
Réglages → API & Make.
Ce webhook sert à tenir à jour le stock d'applications extérieures : votre site, un logiciel de gestion, un autre point de vente. Il est volontairement léger : il ne contient que les articles dont le stock a changé, et juste de quoi les retrouver.

Il est envoyé quand :
  • une vente ou un bon de livraison est validé, s'il contient des articles en stock (produits complets, produits déclinés). Cela comprend les ventes de la caisse et celles qui viennent de la synchro WooCommerce ;
  • un mouvement de stock est validé : entrée, sortie, inventaire complet, inventaire tournant, contrôle de stock. Peu importe qu'il vienne du menu Stocks, du back-office, d'une fiche article ou d'un import ;
  • une vente est annulée avec remise du stock en place (cas rare).

Seuls les articles dont le stock a bougé sont envoyés (quantité différente de zéro, positive ou négative). Si rien n'a bougé (une vente de services seuls, un inventaire sans écart...), rien n'est envoyé.

Pour le fonctionnement commun (activation, délai, relances, doublons, formats), voir Webhooks et mailhooks : fonctionnement.

Exemple : après une vente#

{
  "evenement": "stock.maj",
  "idEvenement": 5872,
  "dateEnvoi": "2026-10-13 10:43:02",
  "origine": "vente",
  "vente": {
    "id": 24449,
    "type": "ticket",
    "numero": 1042,
    "numeroFacture": 0,
    "date": "2026-10-13 10:42:07",
    "idStatutPiece": 4,
    "idTypeOperation": 1,
    "typeOperation": "VENTE",
    "idSousTypePiece": 4,
    "sousTypePiece": "TICKET"
  },
  "lignes": [
    {
      "idArticle": 1875,
      "code": 1875,
      "codebarre": "20018753",
      "codebarreFabricant": "3760123456789",
      "refFabricant": "CAH-A5",
      "quantite": 2,
      "stockFinal": 18,
      "wooId": 4412
    },
    {
      "idArticle": 2210,
      "code": 2210,
      "codebarre": "20022107",
      "codebarreFabricant": "",
      "refFabricant": "",
      "quantite": 1,
      "stockFinal": 6,
      "wooId": 0
    }
  ]
}

Exemple : après une entrée en stock#

{
  "evenement": "stock.maj",
  "idEvenement": 5880,
  "dateEnvoi": "2026-10-13 11:21:40",
  "origine": "mouvement",
  "mouvement": {
    "id": 311,
    "numero": 12,
    "idTypeMouvement": 1,
    "typeMouvement": "ENTREE EN STOCK",
    "initiale": "E",
    "date": "2026-10-13 11:20:35",
    "idStatut": 1,
    "idFournisseur": 7,
    "fournisseur": "Papeteries Durand"
  },
  "lignes": [
    {
      "idArticle": 1875,
      "code": 1875,
      "codebarre": "20018753",
      "codebarreFabricant": "3760123456789",
      "refFabricant": "CAH-A5",
      "refFournisseur": "PD-778",
      "quantite": 12,
      "stockFinal": 30,
      "wooId": 4412
    }
  ]
}

Le message : première couche#

PropriétéTypeExplications
evenement string Toujours "stock.maj".
idEvenement integer L'identifiant de cet envoi. Il ne change pas quand Melkal réessaie : servez-vous-en pour ignorer les doublons.
dateEnvoi string La date et l'heure où le message a été préparé.
origine string "vente" (une vente ou un BL) ou "mouvement" (un mouvement de stock). Elle indique quelle propriété décrit la pièce : vente ou mouvement.
vente object Présente si origine = "vente". La vente ou le BL qui a mouvementé le stock : voir ci-dessous.
mouvement object Présente si origine = "mouvement". Le mouvement de stock : voir ci-dessous.
lignes array Les articles dont le stock a changé : voir ci-dessous.

vente : la vente ou le BL#

PropriétéTypeExplications
id integer L'identifiant de la pièce dans Melkal.
type string "ticket", "facture", "avoir" (facture d'avoir), "bl" (bon de livraison) ou "autre".
numero integer Le numéro de la pièce (numéro du ticket ou du BL).
numeroFacture integer Le numéro de facture quand la pièce a été facturée, 0 sinon.
date string La date et l'heure de la pièce.
idStatutPiece integer Le statut de la pièce : 1 validée, 2 annulée, 3 ouverte, 4 validée et encaissée, 5 validée, encaissée et clôturée, 6 validée et clôturée.
idTypeOperation
typeOperation
integer
string
Le type d'opération : 1 VENTE, 2 ANNULATION, 3 RETOUR PARTIEL, 4 LIVRAISON...
idSousTypePiece
sousTypePiece
integer
string
Le sous-type de pièce : 4 TICKET, 5 FACTURE SUR TICKET, 6 BL, 7 AVOIR SUR TICKET...

mouvement : le mouvement de stock#

PropriétéTypeExplications
id integer L'identifiant du mouvement dans Melkal.
numero integer Le numéro du mouvement.
idTypeMouvement
typeMouvement
integer
string
Le type de mouvement : 1 ENTREE EN STOCK, 2 SORTIE DE STOCK, 3 INVENTAIRE, 4 CONTROLE DE STOCK, 5 INVENTAIRE TOURNANT.
initiale string L'initiale du type de mouvement : E, S, I, CA, IT.
date string La date et l'heure du mouvement.
idStatut integer Le statut du mouvement : 1 validé, 2 annulé, 3 brouillon. L'envoi se fait à la validation.
idFournisseur
fournisseur
integer
string
Absentes si le mouvement n'est pas lié à un fournisseur (inventaire, sortie...). Sinon, le fournisseur.

lignes : les articles dont le stock a changé#

PropriétéTypeExplications
idArticle integer L'identifiant de l'article dans Melkal. Pour un produit décliné, chaque déclinaison est un article.
code integer Le code de l'article.
codebarre string Le code-barre interne de l'article.
codebarreFabricant string Le premier code-barre du fabricant (celui qui est en haut de la liste dans la fiche de l'article). Vide s'il n'y en a pas.
refFabricant string La référence fabricant.
refFournisseur string Absente si le mouvement n'est pas lié à un fournisseur. Sinon, la référence de l'article chez ce fournisseur.
wooId integer L'identifiant de l'article dans WooCommerce (la déclinaison, pour un article décliné). 0 s'il n'est pas relié au site e-commerce.
quantite integer La quantité qui a bougé. Attention : son sens dépend de l'origine (voir ci-dessous).
ancienStock integer Absente sauf pour un inventaire ou un contrôle. Le stock avant le comptage. Pour une entrée ou une sortie, elle n'est pas enregistrée.
stockFinal integer Le stock de l'article au moment de l'envoi. C'est la valeur à retenir pour mettre à jour votre stock.
Le sens de la quantité dépend de l'origine.
  • Vente ou BL : quantite est la quantité vendue. Le stock diminue de cette quantité. Elle est négative pour une annulation ou un avoir : le stock remonte.
  • Mouvement de stock : quantite est la variation du stock. Positive pour une entrée (le stock augmente), négative pour une sortie. Pour un inventaire ou un contrôle, c'est l'écart entre l'ancien stock et le stock compté.
Le plus simple et le plus sûr pour mettre à jour votre stock : remplacez-le par stockFinal, sans calculer à partir de la quantité.

Bon à savoir#

  • Le stock est celui du magasin de Melkal. Les quantités sont des nombres entiers : le stock n'est géré que pour des articles vendus à l'unité.
  • Une vente de plusieurs articles envoie un seul message, avec une ligne par article.
  • Un inventaire complet peut contenir beaucoup de lignes : seuls les articles dont le stock a changé sont envoyés.

Dernière mise à jour : 13 octobre 2026