Documentation API
Comment ça marche
- Inscrivez-vous et copiez la clé. Elle ne s’affiche qu’une fois.
- Attendez que EJS approuve l’entreprise.
- Appelez le catalogue depuis votre serveur avec cette clé.
Le catalogue se consulte en lecture seule, depuis le serveur du revendeur. Chaque requête envoie la clé de l’entreprise dans l’en-tête X-Api-Key. Tant que le compte est en attente, la clé répond 403 pending_approval.
Base : https://n8n.ejscomputers.com/webhook/v1. Méthode autorisée : GET.
Points d’accès
GET /products— liste du catalogueGET /products/{sku}— un produitGET /categories— catégories
Paramètres de /products
| Paramètre | Rôle |
|---|---|
category |
Slug de catégorie |
sku |
Jusqu’à 50 SKU, séparés par des virgules |
include_out_of_stock |
Inclure les ruptures. Défaut : false |
updated_since |
Date ISO 8601. Produits modifiés depuis cette date |
limit |
1 à 200. Défaut : 50 |
cursor |
Page suivante, reprise de next_cursor |
Réponse
data contient les produits. pagination donne limit, next_cursor et total. meta donne api_version, request_id et generated_at. Une erreur a la forme { "error": { "code", "message", "parameter?" }, "meta" }.
Produit
Champs : sku, title, condition (new ou used), category (slug, name_fr, name_en), brand, mpn, upc, quantity, in_stock, price, discount_price, discount_ends_at, currency (CAD), weight_kg, images (url, alt, position), image_missing, attributes (value, unit, label_fr, label_en), updated_at, variants.
Le price du premier niveau est celui du produit seul.
Variante câble
variants est une liste d’objets { variant, sku, price, discount_price, in_stock, quantity, includes? }. variant vaut base ou cable. Les HDD et SSD SATA ont une variante cable : le SKU se termine par -CABLE et un câble SATA est inclus.
Synchronisation
- Faire un passage complet avec include_out_of_stock=true.
- Retenir le plus grand updated_at reçu.
- Suivre next_cursor jusqu’à null.
- Aux passages suivants, appeler updated_since avec ce updated_at, encore jusqu’à next_cursor nul.
Codes d’erreur
400— paramètre invalide401— clé absente ou refusée403— forbidden ou pending_approval404— introuvable405— méthode autre que GET429— limite atteinte. L’en-tête Retry-After indique le délai502— erreur en amont
Exemple curl
curl -s "https://n8n.ejscomputers.com/webhook/v1/products?limit=50&include_out_of_stock=true" \
-H "Accept: application/json" \
-H "X-Api-Key: ejs_VOTRE_CLE"
curl -s "https://n8n.ejscomputers.com/webhook/v1/products/HDD-EXEMPLE-2TO" \
-H "X-Api-Key: ejs_VOTRE_CLE"
curl -s "https://n8n.ejscomputers.com/webhook/v1/categories" \
-H "X-Api-Key: ejs_VOTRE_CLE"
Exemple de réponse
{
"data": [
{
"sku": "HDD-EXEMPLE-2TO",
"title": "Disque dur 2 To",
"condition": "used",
"category": { "slug": "hdd", "name_fr": "Disques durs", "name_en": "Hard drives" },
"brand": "Exemple",
"mpn": "EX-2TB",
"upc": "000000000000",
"quantity": 4,
"in_stock": true,
"price": "49.00",
"discount_price": null,
"discount_ends_at": null,
"currency": "CAD",
"weight_kg": 0.42,
"images": [{ "url": "https://exemple.invalid/hdd.jpg", "alt": "Disque dur", "position": 1 }],
"image_missing": false,
"attributes": {
"capacity": { "value": "2", "unit": "TB", "label_fr": "Capacité", "label_en": "Capacity" }
},
"updated_at": "2026-10-08T12:00:00Z",
"variants": [
{
"variant": "base",
"sku": "HDD-EXEMPLE-2TO",
"price": "49.00",
"discount_price": null,
"in_stock": true,
"quantity": 4
},
{
"variant": "cable",
"sku": "HDD-EXEMPLE-2TO-CABLE",
"price": "54.00",
"discount_price": null,
"in_stock": true,
"quantity": 4,
"includes": "Câble SATA"
}
]
}
],
"pagination": { "limit": 50, "next_cursor": null, "total": 1 },
"meta": {
"api_version": "v1",
"request_id": "req_exemple",
"generated_at": "2026-10-08T12:00:01Z"
}
}
Exemple d’erreur
{
"error": {
"code": "invalid_parameter",
"message": "limit must be between 1 and 200",
"parameter": "limit"
},
"meta": {
"api_version": "v1",
"request_id": "req_exemple",
"generated_at": "2026-10-08T12:00:01Z"
}
}