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.
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.
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ête | Valeur |
|---|---|
X-Auth-Key | le jeton fourni par Goodstock |
Content-Type | application/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
}
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
| Code | Signification |
|---|---|
401 | Jeton absent ou invalide |
400 | Requête malformée — une référence manquante, par exemple |
403 | Article introuvable |
500 | Erreur interne : signalez-la nous, elle est tracée de notre côté |
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èle | Ce qu'il porte |
|---|---|
goodstock.product | Les articles, leurs coûts, leurs niveaux de rotation |
goodstock.purchase.order | Les commandes fournisseurs et leur étape |
goodstock.purchase.order.line | Les lignes, avec la quantité proposée, la trace du calcul et les avertissements |
goodstock.awaiting | Les attendus de réception |
goodstock.reception.line | Les lignes de réception, quantité par quantité |
goodstock.product.supplierinfo | Les conditions d'achat : prix, délai, franco, conditionnement |
goodstock.partner.leave | Les périodes de fermeture des fournisseurs |
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 diagnosticUne 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.
Vous souhaitez utiliser Goodstock pour votre cabinet d'expertise comptable ? La mission de pilotage des stocks, côté cabinet
Assistance · API · Conditions d'utilisation · Confidentialité · Gestion des données · Mentions légales