- Extensions
- API
Exantrix API: seller documentation
The Exantrix API lets a seller connect any software to the marketplace: send the catalogue, keep stock up to date, read paid orders and declare shipping. The WooCommerce, PrestaShop and Shopify extensions use exactly this API. It is JSON over HTTPS, with no SDK to install.
GitHub: github.com/tony-dev-web/exantrix-api (Postman collection, OpenAPI specification and Python client).
Ready to use: WooCommerce extension, PrestaShop module, Shopify guide.
Authentication
Generate a token in your seller area (API section). Every request carries the header:
Authorization: Bearer VOTRE_JETON
The token identifies your seller account. It can be regenerated at any time from the seller area, the old one then becomes invalid. Limit: 600 requests per 10 minutes per token (429 beyond).
Base URL and format
All routes start with https://exantrix.com/api/v1. Bodies and responses are JSON (UTF-8). An error returns {"erreur": "message"} with the matching HTTP code: 400 invalid request, 401 invalid token, 404 not found, 405 method not allowed, 429 too many requests.
Routes
| Method | Route | Purpose |
|---|---|---|
| GET | /moi | Seller account: status, permission to sell, commission rate, connected shop, webhook URL. |
| GET | /produits | Your products on Exantrix (reference, price, stock, visibility, moderation). |
| PUT | /produits | Create or update by reference, 200 items per call maximum. |
| PATCH | /produits/{reference}/stock | Update the stock of one product. |
| DELETE | /produits/{reference} | Removes the product from listings (stock 0) without deleting it. |
| GET | /commandes?depuis=YYYY-MM-DD | Paid orders containing at least one of your products (last 500). |
| POST | /commandes/{id}/expedier | Declares shipping: carrier and tracking number. |
Product item (PUT /produits)
Each element of the produits array is a product item. The reference is the key: a known reference is updated, a new one is created and held for review by Exantrix before going live.
| Field | Type | Required | Detail |
|---|---|---|---|
| reference | text, 50 chars | yes | Unique identifier on your side (SKU). |
| titre | text, 60 chars | yes | Title shown on the marketplace. |
| categorie | text | yes | 3d, dtf, textile, flocage or decoupe. |
| prix_ttc | number | yes | Tax-included price in euros, positive. Published as is, the commission is deducted from the payout. |
| stock | integer | no | Default 1. 0 removes the product from listings. |
| images | array of URLs | no | https image URLs, 5 maximum. Downloaded and converted by Exantrix. |
| description | text, 160 chars | no | Summary. |
| information | text, 1255 chars | no | Long description. |
| marque | text, 50 chars | no | Brand. |
| sous_categorie | text, 70 chars | no | Sub-category. |
| url_boutique | text, 150 chars | no | Link to the product on your shop. |
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."}]}'Response: {"produits": [...], "erreurs": [...]}. Each returned product carries cree (true on creation), moderation (attente, accepte, refuse) and visible. Rejected items are listed in erreurs with their reference and the reason; the HTTP code is 400 only when no item went through.
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}'Order (GET /commandes)
Each order contains only your lines. total_vendeur_ttc is the sum of your lines. The fields couleur, taille, position, texte_3d and renseignement carry the personalisation requested by the customer.
{ "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"}Shipping (POST /commandes/{id}/expedier)
Sets the order to EXPEDIEE and stores carrier and tracking number, passed on to the customer.
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"}'Order webhook
If you set a notification URL in your seller area, every paid order is sent to it as a JSON POST, with the same order object as above and the event commande.payee. The body is signed: the X-Exantrix-Signature header is sha256= followed by the hex HMAC-SHA256 of the raw body, key = your API token. Verify the signature before any processing and answer 200; the order remains visible in the seller area and is emailed anyway.
Verification in 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)
Good practice
- Send the catalogue in batches (50 to 200 items) rather than one request per product.
- For stock, prefer PATCH stock to a full PUT.
- Keep the Exantrix order id to avoid duplicates if the webhook is resent.
- Never put the token in a public page or a repository.