L'API Goodstock

Lire et écrire vos données depuis vos propres outils.

Votre instance expose deux interfaces. L'une est dédiée aux articles et tient en deux appels ; l'autre ouvre le modèle complet, au prix d'un peu plus de travail.

L'interface articles répond à la question qu'on pose le plus souvent : que sait Goodstock de cette référence, et comment lui transmettre ce que je sais d'elle. Un appel pour lire, un pour écrire, un jeton, du JSON.

L'accès au modèle passe par XML-RPC, l'interface standard du socle applicatif sur lequel Goodstock est construit. Tout ce que vous voyez à l'écran s'y lit et s'y écrit, avec les mêmes droits que votre utilisateur : commandes fournisseurs, attendus de réception, historiques de statuts, coûts de revient.

Avant de commencer

Les deux interfaces demandent un identifiant que nous vous fournissons : un jeton pour la première, une clé d'API pour la seconde. Écrivez-nous à contact@very-goodstock.com en indiquant ce que vous comptez en faire — cela nous évite de vous ouvrir plus de droits que nécessaire.

Interface articles

Deux appels, un jeton

L'adresse de votre instance vous a été communiquée à l'ouverture du compte, sous la forme https://votre-instance.very-goodstock.com. Chaque requête porte deux en-têtes :

En-têteValeur
X-Auth-Keyle jeton fourni par Goodstock
Content-Typeapplication/json

Lire un article

POST /api/v1/get_product renvoie ce que Goodstock sait d'une référence : son coût de revient et son coût moyen pondéré, son fournisseur principal et les autres fournisseurs connus avec leurs prix et leurs délais, et les commandes d'achat en cours qui la concernent.

POST /api/v1/get_product
X-Auth-Key: token_xxxxxxxxxxxxxxxxx
Content-Type: application/json

{ "product_code": "123456" }
{
  "id": 22112,
  "name": "Savon de Marseille 300 g",
  "real_cost": 4.15,
  "average_cost": 4.15,
  "main_supplier": {
    "id": 156,
    "name": "Savonnerie du Midi",
    "currency": "EUR",
    "purchase_price": 4.36,
    "lead_time": 45
  },
  "suppliers": [ ... ],
  "purchases": [
    {
      "line_id": 88431,
      "order": { "id": 4148, "name": "4148" },
      "date_planned": "2027-02-08",
      "quantity": 144,
      "quantity_received": 0
    }
  ]
}

Les tableaux suppliers et purchases reprennent la même structure que main_supplier, ligne par ligne.

Mettre à jour un article

PATCH /api/v1/product/<référence> écrit le nom, le stock, la visibilité web, le fournisseur et ses conditions d'achat, le prix de vente, le statut « en soldes » et les relations de remplacement entre articles. Tous les champs sont optionnels : seuls ceux que vous envoyez sont modifiés.

Une modification du stock, du prix de vente ou du statut « en soldes » crée un point de mesure dans l'historique de l'article, exactement comme le ferait une synchronisation par connecteur. Rien ne distingue après coup une donnée reçue par l'API d'une donnée reçue par un connecteur.

PATCH /api/v1/product/123456
X-Auth-Key: token_xxxxxxxxxxxxxxxxx
Content-Type: application/json

{
  "stock": 150,
  "supplier_name": "Savonnerie du Midi",
  "supplier_price": 4.36,
  "supplier_packaging_qty": 100.0,
  "supplier_min_qty": 200.0,
  "sell_price": 8.50,
  "discounted": true
}
Reprendre un historique de stock

Le champ date change la nature de l'appel : au lieu de mettre l'article à jour, il ajoute un point de mesure daté dans son historique. C'est ainsi qu'on reprend des niveaux de stock passés, jour par jour, sans toucher à l'état courant de la fiche.

Ce que répond le serveur

CodeSignification
401Jeton absent ou invalide
400Requête malformée — une référence manquante, par exemple
403Article introuvable
500Erreur interne : signalez-la nous, elle est tracée de notre côté
Accès au modèle

XML-RPC, pour tout le reste

Goodstock est construit sur Odoo, dont l'interface XML-RPC est publique et documentée. Elle donne accès à l'ensemble du modèle avec les droits de l'utilisateur dont vous employez la clé : ce que cet utilisateur voit à l'écran, il le lit par l'API ; ce qu'il ne voit pas lui reste fermé.

C'est la voie à prendre dès que vous sortez de la fiche article : commandes fournisseurs et leurs lignes, attendus de réception, historiques de statuts journaliers, coûts de revient, périodes de fermeture des fournisseurs.

import xmlrpc.client

URL = "https://votre-instance.very-goodstock.com"
BASE, LOGIN, CLE = "gs-votre-base", "vous@exemple.fr", "votre_cle_api"

commun = xmlrpc.client.ServerProxy(f"{URL}/xmlrpc/2/common")
uid = commun.authenticate(BASE, LOGIN, CLE, {})
modeles = xmlrpc.client.ServerProxy(f"{URL}/xmlrpc/2/object")

# Les commandes fournisseurs en cours de réception
commandes = modeles.execute_kw(
    BASE, uid, CLE,
    "goodstock.purchase.order", "search_read",
    [[("state_id.name", "=", "En cours de récep.")]],
    {"fields": ["name", "partner_id", "date_order", "amount_total"], "limit": 50},
)

La clé d'API se crée depuis votre profil, dans les préférences de votre compte. Elle vaut mot de passe : elle ouvre tout ce que vous pouvez ouvrir.

Les modèles que l'on interroge le plus

ModèleCe qu'il porte
goodstock.productLes articles, leurs coûts, leurs niveaux de rotation
goodstock.purchase.orderLes commandes fournisseurs et leur étape
goodstock.purchase.order.lineLes lignes, avec la quantité proposée, la trace du calcul et les avertissements
goodstock.awaitingLes attendus de réception
goodstock.reception.lineLes lignes de réception, quantité par quantité
goodstock.product.supplierinfoLes conditions d'achat : prix, délai, franco, conditionnement
goodstock.partner.leaveLes périodes de fermeture des fournisseurs
Bon usage

Ce que nous vous demandons

Groupez vos appels. search_read sur cinq cents articles coûte moins cher que cinq cents appels sur un article. La même règle vaut pour l'écriture : un seul write sur une liste d'identifiants plutôt qu'un par fiche.

Espacez ce qui peut l'être. Une instance sert d'abord ses utilisateurs ; une reprise d'historique lancée en pleine journée ralentit tout le monde, y compris vous. Les traitements de masse se font la nuit, ou par lots avec une pause entre deux.

Prévenez-nous des gros chantiers. Une reprise de plusieurs centaines de milliers de points de mesure se prépare — nous savons dans quel ordre les charger et ce qu'il faut recalculer après.

Voir Goodstock en fonctionnement

Une heure : l'outil tourne devant vous sur un catalogue de démonstration, ruptures et saisonnalité comprises, puis nous le confrontons à votre situation.

Pas sûr d'en avoir besoin ? Trente questions, trois minutes, et un score sur 90 vous le dit.

Faire le diagnostic

Une question ?

Un cas particulier, un doute sur ce que vous venez de lire, ou l'envie d'en parler de vive voix : écrivez-nous ici. Nous répondons dans les meilleurs délais, et c'est la même équipe qui vous répondra et qui fait le produit.

Ces informations servent à vous répondre, et à rien d'autre. Ce que nous en faisons, en détail.

Votre stock est-il sous contrôle ? 30 questions, 3 minutes