WinDev Integration
Synchronise your WinDev applications with Pixee PIM — push products in batch, update stock and prices, and pull the full catalog with a response format designed for WinDev's HTTP calls.
The WinDev API (/api/v1/windev/*) uses a simplified JSON envelope that maps cleanly to WinDev variables. Products are identified by reference (internal WinDev key) or EAN, and all batch endpoints accept up to 5 000 items per call.
Overview
| Base URL | https://api.pixeepim.com/api/v1/windev |
|---|---|
| Auth | X-API-Key header |
| Read scope | windev:read |
| Write scope | windev:write |
| Sync scope | windev:sync |
| Stock / price batch | 5 000 items max |
| Product sync batch | 1 000 items max |
Create WinDev API keys in Settings → API Keys and select the appropriate scopes. A single key can carry multiple scopes.
Authentication
All endpoints except GET /status require an API key in the X-API-Key header.
Authenticated request
curl https://api.pixeepim.com/api/v1/windev/products \
-H "X-API-Key: pm_live_abc123..."
Scopes
| Scope | Grants access to |
|---|---|
windev:read | GET /products, GET /products/since/{ts}, GET /products/{ref}, GET /categories, GET /suppliers |
windev:write | PATCH /products/{ref}, POST /products/{ref}/activate, POST /products/{ref}/deactivate, POST /stock/update, POST /prices/update |
windev:sync | POST /products/sync |
Response format
Every response uses the same WinDev-friendly envelope:
Success
{
"success": true,
"code": 200,
"message": "125 produits trouvés",
"data": [...],
"count": 125,
"page": 1,
"pages": 10,
"total": 125
}
Error
{
"success": false,
"code": 404,
"message": "Produit introuvable pour la référence : REF-001",
"data": null,
"count": 0
}
success and code map directly to WinDev boolean and integer variables. count reflects the number of items in data for that page; total is the full dataset size across all pages.
Status
Public health check — no authentication required. Returns the API version and the list of available endpoints. Use this to verify connectivity from WinDev before running a sync.
Request
curl https://api.pixeepim.com/api/v1/windev/status
Response
{
"success": true,
"code": 200,
"message": "WinDev API opérationnelle",
"data": {
"api": "ProductsManager WinDev API",
"version": "1.1",
"timestamp": "2026-06-19T10:00:00Z",
"endpoints": [
"GET /api/v1/windev/status",
"GET /api/v1/windev/products",
"POST /api/v1/windev/products/sync",
"GET /api/v1/windev/products/since/{timestamp}",
"PATCH /api/v1/windev/products/{ref}",
"GET /api/v1/windev/products/{ref}",
"POST /api/v1/windev/stock/update",
"POST /api/v1/windev/prices/update",
"GET /api/v1/windev/categories",
"GET /api/v1/windev/suppliers"
]
},
"count": 1
}
List products
Returns a paginated product list. Use for the initial full sync when no reference timestamp exists yet.
Requires windev:read.
Query parameters
- Name
page- Type
- integer
- Description
Page number, starting at
1(default:1).
- Name
limit- Type
- integer
- Description
Items per page, max
500(default:100).
- Name
search- Type
- string
- Description
Free-text search across product name and reference.
- Name
ean- Type
- string
- Description
Exact EAN filter.
- Name
active_only- Type
- boolean
- Description
Return only active products (default:
true).
Request
curl "https://api.pixeepim.com/api/v1/windev/products?page=1&limit=100&active_only=true" \
-H "X-API-Key: pm_live_abc123..."
Response
{
"success": true,
"code": 200,
"message": "1250 produits trouvés",
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"reference": "012-1146",
"name": "Support TV mural fixe",
"brand": "KIMEX",
"price_ht": null,
"price_ttc": null,
"stock": 0,
"is_active": true,
"updated_at": "2026-06-19T09:30:00Z"
}
],
"count": 100,
"page": 1,
"pages": 13,
"total": 1250
}
Sync products
Push up to 1 000 products from WinDev to Pixee PIM in a single call. Each product is matched first by EAN (if provided), then by reference. On match: update; no match: create.
Requires windev:sync.
Body parameters
Pass a JSON array directly (not wrapped in an object key):
- Name
reference- Type
- string
- Description
WinDev internal reference — used as fallback key when no EAN is provided.
- Name
ean- Type
- string
- Description
EAN/GTIN. Preferred matching key.
- Name
name- Type
- string
- Description
Product name.
- Name
brand- Type
- string
- Description
Brand name.
- Name
price_ht- Type
- number
- Description
Price excl. VAT (EUR).
- Name
price_ttc- Type
- number
- Description
Price incl. VAT (EUR).
- Name
stock- Type
- integer
- Description
Stock quantity.
- Name
weight- Type
- number
- Description
Weight in kg.
- Name
supplier_code- Type
- string
- Description
Supplier code for stock tracking.
See the full schema in Sync product fields below.
Request
curl -X POST https://api.pixeepim.com/api/v1/windev/products/sync \
-H "X-API-Key: pm_live_abc123..." \
-H "Content-Type: application/json" \
-d '[
{
"reference": "ART-001",
"ean": "3760000000001",
"name": "Support TV mural fixe",
"brand": "KIMEX",
"price_ht": 18.50,
"price_ttc": 22.20,
"stock": 42,
"weight": 1.5
},
{
"reference": "ART-002",
"name": "Câble HDMI 2m",
"price_ht": 5.00,
"stock": 150
}
]'
Response
{
"success": true,
"code": 200,
"message": "Sync terminé : 1 créés, 1 mis à jour, 0 erreurs",
"data": [
{ "reference": "ART-001", "status": "updated", "id": "550e8400-..." },
{ "reference": "ART-002", "status": "created", "id": "661f9511-..." }
],
"count": 2
}
Sync product fields
| Field | Type | Notes |
|---|---|---|
reference | string | Required — WinDev internal key |
ean | string | EAN/GTIN (preferred match key) |
name | string | Required — product name |
brand | string | Brand name |
short_description | string | |
description | string | |
price_ht | number | HT price in EUR |
price_ttc | number | TTC price in EUR |
stock | integer | ≥ 0 |
supplier_code | string | |
weight | number | kg |
width / height / depth | number | cm |
unit_of_measure | string | |
package_weight | integer | grams |
package_quantity | integer | ≥ 1 |
upc / gtin / external_id | string | |
min_order_quantity | integer | ≥ 1 |
lead_time_days | integer | ≥ 0 |
hs_code | string | Customs tariff code |
country_of_origin | string | ISO 3166-1 alpha-2 (e.g. FR) |
dangerous_goods | boolean | |
color / size / material | string | |
tax_rate | number | 0–100 |
warranty_duration | integer | months |
category | string | Category name (informational only) |
Products since timestamp
Returns products created or updated since the given Unix timestamp. Designed for incremental sync — store the timestamp after each sync and pass it as since on the next call.
Requires windev:read.
Path parameters
- Name
timestamp- Type
- integer
- Description
Unix timestamp in seconds (e.g.
1750291200for 2026-06-19 00:00:00 UTC).
Query parameters
- Name
page- Type
- integer
- Description
Page number (default:
1).
- Name
limit- Type
- integer
- Description
Items per page, max
500(default:100).
Request
curl "https://api.pixeepim.com/api/v1/windev/products/since/1750291200?limit=200" \
-H "X-API-Key: pm_live_abc123..."
WinDev pseudo-code
// Store last sync timestamp in a global variable or DB
nLastSync est un entier = GlbLastSyncTimestamp
sURL est une chaîne = ...
"https://api.pixeepim.com/api/v1/windev/products/since/" + nLastSync
HTTPRequête(sURL, httpGET, sRéponse, "", "X-API-Key: " + sAPIKey)
// Parse JSON response
// GlbLastSyncTimestamp = DateSystèmeVersTimestamp(DateSystème())
Get a product
Retrieves a single product by its WinDev reference or EAN. The ref path parameter is tried first as a manufacturer_reference, then as an EAN.
Requires windev:read.
Path parameters
- Name
ref- Type
- string
- Description
WinDev reference or EAN of the product to retrieve.
Request
curl https://api.pixeepim.com/api/v1/windev/products/ART-001 \
-H "X-API-Key: pm_live_abc123..."
Response
{
"success": true,
"code": 200,
"message": "Produit trouvé",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"reference": "ART-001",
"name": "Support TV mural fixe",
"brand": "KIMEX",
"is_active": true,
"updated_at": "2026-06-19T09:30:00Z"
},
"count": 1
}
Update a product
Partially updates a product identified by WinDev reference or EAN. Only fields included in the payload are modified — omitted fields are left unchanged.
Requires windev:write.
Fires a product.updated webhook event on success.
Path parameters
- Name
ref- Type
- string
- Description
WinDev reference or EAN of the product to update.
The body accepts any writable product field. Fields include everything from POST /products/sync plus extended attributes:
- Identifiers:
name,ean,asin,upc,gtin,external_id,reference,url_slug - Content:
brand,description,short_description,promotional_text - Status:
is_active,lifecycle_status,discontinued,end_of_life_date - Dimensions:
weight,width,height,depth,unit_of_measure - Packaging:
package_length,package_width,package_height,package_weight,package_quantity - B2B:
min_order_quantity,max_order_quantity,order_increment,lead_time_days,backorder_allowed,preorder_available,requires_quote,is_b2b_only - Compliance:
hs_code,country_of_origin,dangerous_goods,dangerous_goods_class,reach_compliant,rohs_compliant,ce_marked,weee_category - Energy:
energy_class,recyclable,eco_friendly,carbon_footprint_kg - Warranty:
warranty_duration,warranty_type,return_policy_days,return_allowed - Physical:
color,color_secondary,size,material,finish,style,pattern - JSON:
technical_specs,compatibility - Inline:
price_ht,price_ttc,stock,supplier_code,tax_rate
Request
curl -X PATCH https://api.pixeepim.com/api/v1/windev/products/ART-001 \
-H "X-API-Key: pm_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"price_ht": 19.99,
"stock": 38,
"is_active": true,
"warranty_duration": 24,
"ce_marked": true
}'
Response
{
"success": true,
"code": 200,
"message": "Produit mis à jour",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"name": "Support TV mural fixe",
"is_active": true,
"updated_at": "2026-06-19T10:05:00Z"
},
"count": 1
}
Activate / Deactivate
Convenience endpoints to toggle product visibility without a full PATCH body.
POST /products/{ref}/activate→ setsis_active = true,status = activePOST /products/{ref}/deactivate→ setsis_active = false,status = inactive
Both require windev:write and fire a product.updated webhook event.
Path parameters
- Name
ref- Type
- string
- Description
WinDev reference or EAN of the product.
Activate
curl -X POST https://api.pixeepim.com/api/v1/windev/products/ART-001/activate \
-H "X-API-Key: pm_live_abc123..."
Response
{
"success": true,
"code": 200,
"message": "Produit activé",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"is_active": true,
"status": "active"
},
"count": 1
}
Update stock
Updates stock quantities in batch — up to 5 000 items per call. Products are matched by EAN.
If supplier_code is provided, the stock is updated on the supplier_products record for that supplier. Otherwise, the generic product_stocks entry is updated.
Fires a stock.updated webhook event (first 50 EANs included in payload).
Requires windev:write.
Body parameters
Pass a JSON array directly:
- Name
ean- Type
- string
- Description
EAN of the product.
- Name
stock- Type
- integer
- Description
New stock quantity (≥ 0).
- Name
supplier_code- Type
- string
- Description
Supplier code — routes the update to the supplier-level stock record.
Request
curl -X POST https://api.pixeepim.com/api/v1/windev/stock/update \
-H "X-API-Key: pm_live_abc123..." \
-H "Content-Type: application/json" \
-d '[
{ "ean": "3760000000001", "stock": 42, "supplier_code": "KIMEX" },
{ "ean": "3760000000002", "stock": 0 },
{ "ean": "3760000000003", "stock": 15, "supplier_code": "KIMEX" }
]'
Response
{
"success": true,
"code": 200,
"message": "Stocks : 2 mis à jour, 1 introuvables, 0 erreurs",
"data": [
{ "ean": "3760000000001", "updated": true, "status": "ok" },
{ "ean": "3760000000002", "updated": false, "status": "not_found" },
{ "ean": "3760000000003", "updated": true, "status": "ok" }
],
"count": 3
}
Update prices
Updates product prices in batch — up to 5 000 items per call. Products are matched by EAN.
price_ttc is stored as the selling price; price_ht is stored as cost. Provide at least one.
Fires a price.updated webhook event (first 50 EANs included in payload).
Requires windev:write.
Body parameters
- Name
ean- Type
- string
- Description
EAN of the product.
- Name
price_ht- Type
- number
- Description
Price excl. VAT in EUR (≥ 0).
- Name
price_ttc- Type
- number
- Description
Price incl. VAT in EUR (≥ 0).
Request
curl -X POST https://api.pixeepim.com/api/v1/windev/prices/update \
-H "X-API-Key: pm_live_abc123..." \
-H "Content-Type: application/json" \
-d '[
{ "ean": "3760000000001", "price_ht": 18.50, "price_ttc": 22.20 },
{ "ean": "3760000000002", "price_ttc": 9.99 }
]'
Response
{
"success": true,
"code": 200,
"message": "Prix : 2 mis à jour, 0 introuvables, 0 erreurs",
"data": [
{ "ean": "3760000000001", "updated": true, "status": "ok" },
{ "ean": "3760000000002", "updated": true, "status": "ok" }
],
"count": 2
}
Categories
Returns the flat category tree (all levels), sorted by depth then display order. Use parent_id to reconstruct the hierarchy.
Requires windev:read.
Request
curl https://api.pixeepim.com/api/v1/windev/categories \
-H "X-API-Key: pm_live_abc123..."
Response
{
"success": true,
"code": 200,
"message": "42 catégories",
"data": [
{
"id": "a1b2c3d4-...",
"name": "Supports TV",
"slug": "supports-tv",
"parent_id": null,
"level": 0,
"sort_order": 1
},
{
"id": "b2c3d4e5-...",
"name": "Supports muraux",
"slug": "supports-muraux",
"parent_id": "a1b2c3d4-...",
"level": 1,
"sort_order": 1
}
],
"count": 42
}
Suppliers
Returns the list of active suppliers sorted by name. Use supplier_code values when pushing products via POST /products/sync or POST /stock/update.
Requires windev:read.
Request
curl https://api.pixeepim.com/api/v1/windev/suppliers \
-H "X-API-Key: pm_live_abc123..."
Response
{
"success": true,
"code": 200,
"message": "8 fournisseurs",
"data": [
{
"id": "c3d4e5f6-...",
"name": "KIMEX International",
"code": "KIMEX",
"is_active": true,
"country": "FR"
}
],
"count": 8
}