- Extensions
- 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éthode | Route | Rôle |
|---|---|---|
| GET | /moi | Compte vendeur : statut, autorisation de vente, taux de commission, boutique reliée, URL de webhook. |
| GET | /produits | Liste de vos produits chez Exantrix (référence, prix, stock, visibilité, modération). |
| PUT | /produits | Création ou mise à jour par référence, 200 fiches maximum par appel. |
| PATCH | /produits/{reference}/stock | Mise à jour du stock d'un produit. |
| DELETE | /produits/{reference} | Retire le produit des listes (stock à 0), sans l'effacer. |
| GET | /commandes?depuis=AAAA-MM-JJ | Commandes payées contenant au moins un de vos produits (500 dernières). |
| POST | /commandes/{id}/expedier | Dé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.
| Champ | Type | Obligatoire | Détail |
|---|---|---|---|
| reference | texte, 50 car. | oui | Identifiant unique côté boutique (SKU). |
| titre | texte, 60 car. | oui | Titre affiché sur la marketplace. |
| categorie | texte | oui | 3d, dtf, textile, flocage ou decoupe. |
| prix_ttc | nombre | oui | Prix TTC en euros, positif. Publié tel quel, la commission est déduite du versement. |
| stock | entier | non | Défaut 1. 0 retire le produit des listes. |
| images | tableau d'URL | non | URL https des images, 5 maximum. Téléchargées et converties par Exantrix. |
| description | texte, 160 car. | non | Résumé. |
| information | texte, 1255 car. | non | Description longue. |
| marque | texte, 50 car. | non | |
| sous_categorie | texte, 70 car. | non | |
| url_boutique | texte, 150 car. | non | Lien 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
- Envoyez le catalogue par lots (50 à 200 fiches) plutôt qu'une requête par produit.
- Pour le stock, préférez PATCH stock à un PUT complet.
- Conservez l'identifiant de commande Exantrix pour éviter les doublons si le webhook est renvoyé.
- Ne mettez jamais le jeton dans une page publique ou un dépôt.