Products
Products are the core resource of Pixee PIM. Each product is uniquely identified by its EAN/GTIN (barcode), stored on Product.ean.
List products
Returns a paginated list of products in your catalog. Pagination uses page / per_page, not skip / limit.
Query parameters
- Name
page- Type
- integer
- Description
Page number, starting at 1 (default: 1).
- Name
per_page- Type
- integer
- Description
Items per page, max 100 (default: 20).
- Name
search- Type
- string
- Description
Full-text search on name, EAN, or SKU.
- Name
is_active- Type
- boolean
- Description
Filter by active/inactive status.
- Name
supplier_ids- Type
- array
- Description
Filter by one or more supplier UUIDs. Repeatable:
supplier_ids=<uuid>&supplier_ids=<uuid>.
- Name
in_stock- Type
- boolean
- Description
Filter to products currently in stock.
- Name
has_asin- Type
- boolean
- Description
Filter by presence of an Amazon ASIN.
- Name
has_price- Type
- boolean
- Description
Filter by presence of a selling price.
- Name
has_multiple_suppliers- Type
- boolean
- Description
Filter to products sourced from more than one supplier.
- Name
has_images- Type
- boolean
- Description
Filter by presence of gallery images.
- Name
no_supplier- Type
- boolean
- Description
Filter to products with no supplier assigned.
- Name
no_brand- Type
- boolean
- Description
Filter to products with no brand assigned.
- Name
not_enriched- Type
- boolean
- Description
Filter to products that have not gone through AI enrichment.
- Name
has_scraper_assets- Type
- boolean
- Description
Filter to products with scraped assets (images/descriptions) available.
- Name
without_category- Type
- boolean
- Description
Filter to products with no category assigned.
- Name
without_description- Type
- boolean
- Description
Filter to products with an empty description.
- Name
min_completeness- Type
- number
- Description
Minimum completeness score (0–100).
- Name
max_completeness- Type
- number
- Description
Maximum completeness score (0–100).
- Name
completeness_grade- Type
- string
- Description
Filter by completeness grade (e.g.
A,B,C,D).
- Name
include_deleted- Type
- boolean
- Description
Include soft-deleted products (default:
false).
Request
curl "https://api.pixeepim.com/api/v1/products?page=1&per_page=20&is_active=true" \
-H "Authorization: Bearer {api_key}"
Response
{
"items": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"title": "Produit exemple",
"price": 29.99,
"cost_price": 18.00,
"weight": 0.5,
"is_active": true,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-03-10T14:22:00Z"
}
],
"meta": {
"total": 1234,
"page": 1,
"per_page": 20,
"total_pages": 62,
"has_next": true,
"has_previous": false
}
}
Get a product
Retrieves a single product by its UUID. By default, textual content resolves against the locale requested via Accept-Language.
Path parameters
- Name
id- Type
- string
- Description
The product UUID.
Query parameters
- Name
entity_id- Type
- string
- Description
Resolve the product's overlay content and price for a specific multi-entity target (e.g. a channel or subsidiary). See Multi-entity overlays.
- Name
configuration_id- Type
- string
- Description
Resolve the product's content for a specific configuration target, taking precedence over the entity-level default.
entity_id and configuration_id only change which override the content resolver reads — the base product record is unaffected. Omit both to get the master content.
Request
curl "https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000?entity_id=6ba7b810-9dad-11d1-80b4-00c04fd430c8" \
-H "Authorization: Bearer {api_key}" \
-H "Accept-Language: fr"
Response
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"title": "Produit exemple",
"barcode": "3760000000001",
"price": 29.99,
"cost_price": 18.00,
"weight": 0.5,
"is_active": true,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-03-10T14:22:00Z"
}
Create a product
Creates a new product. The barcode (EAN/GTIN) must be unique.
Body parameters
- Name
name- Type
- string
- Description
Product name. Maps to
Product.titlein the database.
- Name
supplier_id- Type
- string
- Description
Supplier UUID sourcing this product.
- Name
barcode- Type
- string
- Description
Product EAN/GTIN (13-digit recommended). Maps to
Product.ean, the unique identifier.
- Name
category_id- Type
- string
- Description
Category UUID.
- Name
brand_id- Type
- string
- Description
Brand UUID. Look it up or create it via the Brands endpoints first.
- Name
description- Type
- string
- Description
Full product description.
- Name
short_description- Type
- string
- Description
Short description.
- Name
price- Type
- number
- Description
Selling price (≥ 0).
- Name
cost_price- Type
- number
- Description
Cost / purchase price (≥ 0).
- Name
weight- Type
- number
- Description
Weight in kg (> 0).
- Name
width- Type
- number
- Description
Width in cm.
- Name
height- Type
- number
- Description
Height in cm.
- Name
depth- Type
- number
- Description
Depth in cm.
- Name
tax_rate- Type
- number
- Description
Tax rate percentage.
- Name
is_active- Type
- boolean
- Description
Whether the product is active (default:
true).
sku is accepted for backwards compatibility but is deprecated: SKU is now supplier-specific and lives on the supplier/product link, not on the product itself.
Request
curl -X POST https://api.pixeepim.com/api/v1/products \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"name": "Produit exemple",
"supplier_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"barcode": "3760000000001",
"price": 29.99,
"cost_price": 18.00,
"weight": 0.5
}'
Response
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"title": "Produit exemple",
"price": 29.99,
"cost_price": 18.00,
"weight": 0.5,
"is_active": true,
"created_at": "2026-03-15T09:00:00Z",
"updated_at": "2026-03-15T09:00:00Z"
}
Update a product
Updates a product. Send only the fields you want to change — all other fields are left untouched.
The endpoint is PUT, not PATCH. Despite using PUT as the HTTP method, the server performs a partial update: only the fields present in the request body are written. Omitted fields are not cleared.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Body parameters (selected)
ProductUpdate accepts a large surface of logistics, compliance, and merchandising fields. Common ones:
- Name
name- Type
- string
- Description
Product name (maps to
Product.title).
- Name
description- Type
- string
- Description
Full product description.
- Name
short_description- Type
- string
- Description
Brief product summary.
- Name
price- Type
- number
- Description
Selling price (≥ 0).
- Name
cost_price- Type
- number
- Description
Cost price (≥ 0).
- Name
barcode- Type
- string
- Description
EAN/GTIN (maps to
Product.ean).
- Name
asin- Type
- string
- Description
Amazon Standard Identification Number.
- Name
supplier_id- Type
- string
- Description
Supplier UUID.
- Name
category_id- Type
- string
- Description
Category UUID.
- Name
brand_id- Type
- string
- Description
Brand UUID.
- Name
google_category- Type
- string
- Description
Google Shopping category string.
- Name
amazon_category- Type
- string
- Description
Amazon category string.
- Name
country_of_origin- Type
- string
- Description
ISO 3166-1 alpha-2 country code (e.g.
FR,DE).
- Name
status- Type
- string
- Description
Product status (
active,inactive, etc.).
- Name
is_active- Type
- boolean
- Description
Enable or disable the product.
- Name
lifecycle_status- Type
- string
- Description
Lifecycle status (
active,discontinued, etc.).
The full schema also covers packaging, customs/HS code, dangerous goods, REACH/RoHS/CE/WEEE compliance flags, warranty, return policy, and merchandising attributes (color, size, material, …). Fields not listed above still round-trip if you know their name — see components.schemas.ProductUpdate in the OpenAPI spec for the exhaustive list.
Request
curl -X PUT https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"price": 24.99,
"description": "Description mise à jour.",
"brand_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"is_active": true
}'
Response
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"ean": "3760000000001",
"title": "Produit exemple",
"price": 24.99,
"description": "Description mise à jour.",
"is_active": true,
"updated_at": "2026-03-15T10:00:00Z"
}
Delete a product
Deletes a product from your catalog. Soft-deleted by default (retained for audit purposes and recoverable via include_deleted=true on list); pass permanent=true to erase it irreversibly.
Path parameters
- Name
id- Type
- string
- Description
The product UUID to delete.
Query parameters
- Name
permanent- Type
- boolean
- Description
Permanently delete instead of soft-deleting (default:
false). Irreversible.
Request
curl -X DELETE "https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000?permanent=false" \
-H "Authorization: Bearer {api_key}"
Response
{}
Content variants
A product's translatable content (title, descriptions, SEO fields, bullet points…) is stored per language, and optionally per multi-entity target (entity_id) or configuration (configuration_id). This is distinct from product variants (size/color SKUs).
Three operations:
- Name
GET /products/{product_id}/content-variants- Description
Lists every content variant for the product across all languages and targets, plus the resolved pivot (the content actually served by
GET /products/{id}).
- Name
PUT /products/{product_id}/content-variants/{language}- Description
Creates or updates the content variant for a given language. Query params
entity_idandconfiguration_idscope the write to that target; omit both to write the master content for that language.
- Name
PATCH /products/{product_id}/content-variants/{language}/review- Description
Marks the variant as human-reviewed (
reviewed: true), typically after AI-generated content has been checked.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
- Name
language- Type
- string
- Description
ISO 639-1 language code (e.g.
fr,en,de).
Body parameters — PUT .../content-variants/{language}
- Name
title- Type
- string
- Description
- Localized product title.
- Name
short_description- Type
- string
- Description
- Localized short description.
- Name
description- Type
- string
- Description
- Localized full description.
- Name
marketing_description- Type
- string
- Description
- Localized marketing copy.
- Name
seo_title- Type
- string
- Description
- Localized SEO title.
- Name
seo_meta_description- Type
- string
- Description
- Localized SEO meta description.
- Name
seo_keywords- Type
- array
- Description
- Localized SEO keywords.
- Name
url_slug- Type
- string
- Description
- Localized URL slug.
- Name
bullet_points- Type
- array
- Description
- Localized bullet points.
- Name
key_features- Type
- array
- Description
- Localized key features.
- Name
promotional_text- Type
- string
- Description
- Localized promotional text.
- Name
attributes- Type
- object
- Description
- Free-form localized attributes.
Request
curl -X PUT "https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/content-variants/fr?entity_id=6ba7b810-9dad-11d1-80b4-00c04fd430c8" \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"title": "Produit exemple (FR)",
"short_description": "Version courte en français.",
"seo_title": "Acheter Produit exemple"
}'
Response
{
"language": "fr",
"entity_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"configuration_id": null,
"title": "Produit exemple (FR)",
"reviewed": false,
"updated_at": "2026-09-16T08:00:00Z"
}
Relations
Manages products explicitly linked to this one — accessories, cross-sells, spare parts, etc. This is distinct from similar products (GET /search/products/{id}/similar, see Search), which are computed automatically from the vector index.
- Name
GET /products/{product_id}/relations- Description
Lists linked products. Optional
relationship_typequery parameter filters the list.
- Name
POST /products/{product_id}/relations- Description
Links another product to this one.
- Name
DELETE /products/{product_id}/relations/{relation_id}- Description
Removes a link.
Body parameters — POST .../relations
- Name
related_product_id- Type
- string
- Description
UUID of the product to link.
- Name
relationship_type- Type
- string
- Description
One of
accessory,cross_sell,up_sell,spare_part,compatible_with,replacement.
- Name
priority- Type
- integer
- Description
Display order among relations of the same type.
Request
curl -X POST https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/relations \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"related_product_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"relationship_type": "accessory",
"priority": 1
}'
Response
{
"id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"related_product_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"relationship_type": "accessory",
"priority": 1,
"created_at": "2026-09-16T08:00:00Z"
}
Multi-entity overlays
Products can belong to several "entities" (e.g. channels, subsidiaries) with a per-entity content and price override. Description resolution falls back from the override to the master content when no override is set.
- Name
GET /products/{product_id}/entities- Description
Cross-entity overview: every entity this product belongs to, with its resolved overlay and price.
- Name
GET /products/{product_id}/entities/{entity_id}- Description
Resolved data for one entity.
- Name
POST /products/{product_id}/entities/{entity_id}- Description
Adds the product to the entity (membership only — idempotent).
- Name
PUT /products/{product_id}/entities/{entity_id}- Description
Upserts the per-entity overlay.
- Name
DELETE /products/{product_id}/entities/{entity_id}- Description
Removes the product from the entity.
Body parameters — PUT .../entities/{entity_id}
- Name
internal_reference- Type
- string
- Description
Entity-specific internal reference.
- Name
description_override- Type
- string
- Description
Overrides the master description for this entity.
- Name
short_description_override- Type
- string
- Description
Overrides the master short description for this entity.
- Name
status- Type
- string
- Description
Entity-specific status.
- Name
notes- Type
- string
- Description
Internal notes for this entity assignment.
Request
curl -X PUT https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/entities/6ba7b810-9dad-11d1-80b4-00c04fd430c8 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"description_override": "Description spécifique à cette enseigne.",
"status": "active"
}'
Response
{
"entity_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"description_override": "Description spécifique à cette enseigne.",
"status": "active",
"price": 29.99
}
Variants & options
Size/color-style variants (ProductVariant), each with its own SKU, EAN, price, and stock — distinct from content variants.
- Name
GET /products/{product_id}/variants- Description
Lists variants and their option definitions.
- Name
POST /products/{product_id}/variants- Description
Creates a single variant.
- Name
POST /products/{product_id}/variants/bulk- Description
Creates 1–100 variants at once, optionally replacing the option definitions.
- Name
PATCH /products/{product_id}/variants/{variant_id}- Description
Updates a variant.
- Name
DELETE /products/{product_id}/variants/{variant_id}- Description
Deletes a variant.
- Name
GET /products/{product_id}/options- Description
Lists option definitions (e.g.
Couleur,Taille).
- Name
POST /products/{product_id}/options- Description
Creates or updates option definitions.
- Name
DELETE /products/{product_id}/options/{option_id}- Description
Deletes an option definition.
Body parameters — POST .../variants
- Name
sku- Type
- string
- Description
Unique SKU for this variant.
- Name
ean- Type
- string
- Description
EAN barcode for this variant.
- Name
option_values- Type
- object
- Description
Option combination, e.g.
{"Couleur": "Rouge", "Taille": "L"}.
- Name
price- Type
- number
- Description
Selling price.
- Name
compare_at_price- Type
- number
- Description
Compare-at / strikethrough price.
- Name
cost_price- Type
- number
- Description
Cost price.
- Name
stock- Type
- integer
- Description
Stock quantity.
- Name
weight_kg- Type
- number
- Description
Weight in kg.
- Name
image_url- Type
- string
- Description
Variant-specific image URL.
- Name
is_active- Type
- boolean
- Description
Whether this variant is active.
- Name
position- Type
- integer
- Description
Display order.
Request
curl -X POST https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/variants \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"sku": "PROD-RED-L",
"ean": "3760000000018",
"option_values": {"Couleur": "Rouge", "Taille": "L"},
"price": 29.99,
"stock": 42
}'
Response
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"sku": "PROD-RED-L",
"ean": "3760000000018",
"option_values": {"Couleur": "Rouge", "Taille": "L"},
"price": 29.99,
"stock": 42,
"is_active": true
}
Bulk operations
Spreadsheet-like bulk edit and bulk delete, matched by product UUID (not EAN).
There is no bulk-create endpoint (POST /products/bulk was removed). Create products individually via POST /products, or use Imports for bulk ingestion from a file.
- Name
PATCH /products/bulk/- Description
Applies per-product field updates, up to 100 products per request.
- Name
DELETE /products/bulk/delete- Description
Deletes up to 1,000 products by UUID.
- Name
DELETE /products/bulk/delete-all- Description
Deletes every product in the catalog. Requires an explicit confirmation phrase — irreversible.
Body parameters — PATCH /products/bulk/
- Name
updates- Type
- array
- Description
1–100 objects, each
{ "id": "<uuid>", "fields": { ... } }wherefieldsholds anyProductUpdatefield.
Body parameters — DELETE /products/bulk/delete
- Name
product_ids- Type
- array
- Description
Up to 1,000 product UUIDs to delete.
Body parameters — DELETE /products/bulk/delete-all
- Name
confirmation_phrase- Type
- string
- Description
Exact confirmation phrase required by the server to proceed.
Request
curl -X PATCH https://api.pixeepim.com/api/v1/products/bulk/ \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"updates": [
{"id": "550e8400-e29b-41d4-a716-446655440000", "fields": {"brand_name": "Samsung", "is_active": true}},
{"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "fields": {"status": "active"}}
]
}'
Response
{
"updated": 2,
"errors": []
}
Export to CSV / Excel
Exports the catalog (or a filtered subset) to CSV or Excel.
Query parameters
- Name
category- Type
- string
- Description
Filter by category.
- Name
brand- Type
- string
- Description
Filter by brand.
- Name
active_only- Type
- boolean
- Description
Export only active products.
- Name
ids- Type
- array
- Description
Restrict the export to specific product UUIDs.
- Name
language- Type
- string
- Description
Single content language to export (ISO 639-1).
- Name
languages- Type
- array
- Description
Multiple content languages to export, one column set per language.
- Name
include_stats- Type
- boolean
- Description
Excel export only — include a summary stats sheet.
- Name
include_images- Type
- boolean
- Description
Excel export only — embed product images.
Request
curl "https://api.pixeepim.com/api/v1/products/export/csv?active_only=true&languages=fr&languages=en" \
-H "Authorization: Bearer {api_key}" \
-o products.csv
Request
curl "https://api.pixeepim.com/api/v1/products/export/excel?include_stats=true&include_images=true" \
-H "Authorization: Bearer {api_key}" \
-o products.xlsx
Other product endpoints
The product resource also exposes narrower endpoints used by other areas of Pixee PIM. They exist in the public API and are stable, but are documented in more depth alongside the feature they support:
| Method & path | Purpose |
|---|---|
POST /products/search | Structured product search with price/category/brand/supplier filters and cursor pagination — see Search for the full-text equivalent. |
GET /products/brands/list, GET /products/categories, GET /products/categories/list | Lightweight lookup lists used to populate filters; prefer Catalog referentials for full CRUD. |
GET /products/stats/overview, .../stats/completeness, .../stats/completeness/data-sources, .../stats/completeness/products, POST .../stats/completeness/recalculate | Catalog completeness scoring and dashboards. |
GET /products/{id}/suppliers, .../supplier-recommendation, .../sourcing | Supplier sourcing data for a product — see Catalog referentials. |
GET /products/{id}/competitors, .../price-comparison, POST .../repricing/preview, POST .../repricing/apply, GET .../repricing/eligible-price-lists, GET .../entity-prices | Competitive pricing and repricing. |
GET /products/{id}/platform-mappings | Cross-platform (marketplace) ID mappings. |
POST /products/{id}/media/upload | Uploads a product image (multipart form: title, alt_text, position, is_primary). |
POST /products/{id}/entities/rewrite-all, POST /products/{id}/entities/{entity_id}/rewrite-description | AI rewrite of entity-level descriptions. |
None of these are covered in the examples above; consult the OpenAPI spec (components.schemas) for their exact request/response shape.