➜︎ 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.
Réglages → API & Make.
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é | Type | Explications |
|---|---|---|
| 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é | Type | Explications |
|---|---|---|
| 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é | Type | Explications |
|---|---|---|
| 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é | Type | Explications |
|---|---|---|
| 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é.
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