Products

Products are the core resource of Pixee PIM. Each product is uniquely identified by its EAN/GTIN (barcode), stored on Product.ean.


GET/products

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

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

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.

Request

GET
/products/{id}
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"
}

POST/products

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.title in 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).

Request

POST
/products
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"
}

PUT/products/{product_id}

Update a product

Updates a product. Send only the fields you want to change — all other fields are left untouched.

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.).

Request

PUT
/products/{product_id}
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/products/{id}

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

DELETE
/products/{id}
curl -X DELETE "https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000?permanent=false" \
  -H "Authorization: Bearer {api_key}"

Response

{}

GET/products/{product_id}/content-variants

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_id and configuration_id scope 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

PUT
/products/{product_id}/content-variants/{language}
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"
}

GET/products/{product_id}/relations

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_type query 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

POST
/products/{product_id}/relations
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"
}

GET/products/{product_id}/entities

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

PUT
/products/{product_id}/entities/{entity_id}
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
}

GET/products/{product_id}/variants

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

POST
/products/{product_id}/variants
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
}

PATCH/products/bulk/

Bulk operations

Spreadsheet-like bulk edit and bulk delete, matched by product UUID (not EAN).

  • 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": { ... } } where fields holds any ProductUpdate field.

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

PATCH
/products/bulk/
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": []
}

GET/products/export/csv

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

GET
/products/export/csv
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

GET
/products/export/excel
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 & pathPurpose
POST /products/searchStructured 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/listLightweight 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/recalculateCatalog completeness scoring and dashboards.
GET /products/{id}/suppliers, .../supplier-recommendation, .../sourcingSupplier 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-pricesCompetitive pricing and repricing.
GET /products/{id}/platform-mappingsCross-platform (marketplace) ID mappings.
POST /products/{id}/media/uploadUploads a product image (multipart form: title, alt_text, position, is_primary).
POST /products/{id}/entities/rewrite-all, POST /products/{id}/entities/{entity_id}/rewrite-descriptionAI 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.

Was this page helpful?