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 URLhttps://api.pixeepim.com/api/v1/windev
AuthX-API-Key header
Read scopewindev:read
Write scopewindev:write
Sync scopewindev:sync
Stock / price batch5 000 items max
Product sync batch1 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

ScopeGrants access to
windev:readGET /products, GET /products/since/{ts}, GET /products/{ref}, GET /categories, GET /suppliers
windev:writePATCH /products/{ref}, POST /products/{ref}/activate, POST /products/{ref}/deactivate, POST /stock/update, POST /prices/update
windev:syncPOST /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.


GET/windev/status

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

GET
/windev/status
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
}

GET/windev/products

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

GET
/windev/products
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
}

POST/windev/products/sync

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

POST
/windev/products/sync
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

FieldTypeNotes
referencestringRequired — WinDev internal key
eanstringEAN/GTIN (preferred match key)
namestringRequired — product name
brandstringBrand name
short_descriptionstring
descriptionstring
price_htnumberHT price in EUR
price_ttcnumberTTC price in EUR
stockinteger≥ 0
supplier_codestring
weightnumberkg
width / height / depthnumbercm
unit_of_measurestring
package_weightintegergrams
package_quantityinteger≥ 1
upc / gtin / external_idstring
min_order_quantityinteger≥ 1
lead_time_daysinteger≥ 0
hs_codestringCustoms tariff code
country_of_originstringISO 3166-1 alpha-2 (e.g. FR)
dangerous_goodsboolean
color / size / materialstring
tax_ratenumber0–100
warranty_durationintegermonths
categorystringCategory name (informational only)

GET/windev/products/since/{timestamp}

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. 1750291200 for 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

GET
/windev/products/since/{timestamp}
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/windev/products/{ref}

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

GET
/windev/products/{ref}
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
}

PATCH/windev/products/{ref}

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

PATCH
/windev/products/{ref}
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
}

POST/windev/products/{ref}/activate

Activate / Deactivate

Convenience endpoints to toggle product visibility without a full PATCH body.

  • POST /products/{ref}/activate → sets is_active = true, status = active
  • POST /products/{ref}/deactivate → sets is_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

POST
/windev/products/{ref}/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
}

POST/windev/stock/update

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

POST
/windev/stock/update
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
}

POST/windev/prices/update

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

POST
/windev/prices/update
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
}

GET/windev/categories

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

GET
/windev/categories
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
}

GET/windev/suppliers

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

GET
/windev/suppliers
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
}

Was this page helpful?