1. Extensions
  2. API

API Exantrix : documentation vendeur

L'API Exantrix permet à un vendeur de relier n'importe quel logiciel à la marketplace : envoyer son catalogue, tenir son stock à jour, lire ses commandes payées et déclarer l'expédition. Les extensions WooCommerce, PrestaShop et Shopify utilisent exactement cette API. Elle est en JSON, sur HTTPS, sans SDK à installer.

GitHub : github.com/tony-dev-web/exantrix-api (collection Postman, spécification OpenAPI et client Python).

Prêt à l'emploi : extension WooCommerce, module PrestaShop, guide Shopify.

Authentification

Générez un jeton dans votre espace vendeur (section API). Chaque requête porte l'en-tête :

Authorization: Bearer VOTRE_JETON

Le jeton identifie votre compte vendeur. Il peut être régénéré à tout moment depuis l'espace vendeur, l'ancien devient alors invalide. Limite : 600 requêtes par tranche de 10 minutes et par jeton (réponse 429 au-delà).

Base et format

Toutes les routes commencent par https://exantrix.com/api/v1. Corps et réponses sont en JSON (UTF-8). Une erreur renvoie un objet {"erreur": "message"} avec le code HTTP correspondant : 400 requête invalide, 401 jeton invalide, 404 introuvable, 405 méthode non autorisée, 429 trop de requêtes.

Routes

MéthodeRouteRôle
GET/moiCompte vendeur : statut, autorisation de vente, taux de commission, boutique reliée, URL de webhook.
GET/produitsListe de vos produits chez Exantrix (référence, prix, stock, visibilité, modération).
PUT/produitsCréation ou mise à jour par référence, 200 fiches maximum par appel.
PATCH/produits/{reference}/stockMise à jour du stock d'un produit.
DELETE/produits/{reference}Retire le produit des listes (stock à 0), sans l'effacer.
GET/commandes?depuis=AAAA-MM-JJCommandes payées contenant au moins un de vos produits (500 dernières).
POST/commandes/{id}/expedierDéclare l'expédition : transporteur et numéro de suivi.

Fiche produit (PUT /produits)

Chaque élément du tableau produits est une fiche. La référence sert de clé : une fiche déjà connue est mise à jour, une nouvelle est créée en attente de modération par Exantrix avant mise en ligne.

ChampTypeObligatoireDétail
referencetexte, 50 car.ouiIdentifiant unique côté boutique (SKU).
titretexte, 60 car.ouiTitre affiché sur la marketplace.
categorietexteoui3d, dtf, textile, flocage ou decoupe.
prix_ttcnombreouiPrix TTC en euros, positif. Publié tel quel, la commission est déduite du versement.
stockentiernonDéfaut 1. 0 retire le produit des listes.
imagestableau d'URLnonURL https des images, 5 maximum. Téléchargées et converties par Exantrix.
descriptiontexte, 160 car.nonRésumé.
informationtexte, 1255 car.nonDescription longue.
marquetexte, 50 car.non
sous_categorietexte, 70 car.non
url_boutiquetexte, 150 car.nonLien vers la fiche sur votre boutique.
curl -X PUT https://exantrix.com/api/v1/produits \  -H "Authorization: Bearer VOTRE_JETON" \  -H "Content-Type: application/json" \  -d '{"produits": [{"reference": "SKU-001", "titre": "Support casque imprime en 3D", "categorie": "3d",       "prix_ttc": 19.90, "stock": 12, "images": ["https://maboutique.fr/img/support.jpg"],       "description": "Support de casque en PLA, 3 coloris."}]}'

Réponse : {"produits": [...], "erreurs": [...]}. Chaque produit renvoyé porte cree (vrai à la création), moderation (attente, accepte, refuse) et visible. Les fiches refusées sont listées dans erreurs avec leur référence et la raison ; le code HTTP est 400 seulement si aucune fiche n'est passée.

curl -X PATCH https://exantrix.com/api/v1/produits/SKU-001/stock \  -H "Authorization: Bearer VOTRE_JETON" -H "Content-Type: application/json" -d '{"stock": 7}'

Commande (GET /commandes)

Chaque commande contient uniquement vos lignes. Le champ total_vendeur_ttc est la somme de vos lignes. Les champs couleur, taille, position, texte_3d et renseignement portent la personnalisation demandée par le client.

{  "id": 4821,  "statut": "PAYEE",  "date": "2026-09-13",  "transporteur": "",  "suivi": "",  "livraison": {    "nom": "Durand",    "prenom": "Marie",    "adresse": "12 rue des Lilas",    "code_postal": "72000",    "ville": "Le Mans",    "telephone": "0600000000",    "email": "marie@example.com",    "mode": "Colissimo"  },  "lignes": [    {      "reference": "SKU-001",      "produit_id": 9107,      "titre": "Support casque imprime en 3D",      "quantite": 2,      "prix_ttc": "19.90",      "total_ttc": "39.80",      "couleur": "noir",      "taille": "",      "position": "",      "texte_3d": "",      "renseignement": ""    }  ],  "total_vendeur_ttc": "39.80"}

Expédition (POST /commandes/{id}/expedier)

Passe la commande au statut EXPEDIEE et enregistre transporteur et numéro de suivi, transmis au client.

curl -X POST https://exantrix.com/api/v1/commandes/4821/expedier \  -H "Authorization: Bearer VOTRE_JETON" -H "Content-Type: application/json" \  -d '{"transporteur": "Colissimo", "suivi": "6A12345678901"}'

Webhook de commande

Si vous renseignez une URL de notification dans votre espace vendeur, chaque commande payée vous est envoyée en POST JSON, avec le même objet commande que ci-dessus et l'événement commande.payee. Le corps est signé : l'en-tête X-Exantrix-Signature vaut sha256= suivi du HMAC-SHA256 hexadécimal du corps brut, clé = votre jeton API. Vérifiez la signature avant tout traitement et répondez 200 ; la commande reste de toute façon visible dans l'espace vendeur et envoyée par email.

Vérification en Python :

import hashlib, hmacdef signature_valide(corps_brut: bytes, entete: str, jeton: str) -> bool:    attendu = "sha256=" + hmac.new(jeton.encode(), corps_brut, hashlib.sha256).hexdigest()    return hmac.compare_digest(attendu, entete)

Bonnes pratiques