Catalog referentials

Brands, categories, suppliers, and tags are the shared referentials that products point to. This page covers the Brands, Categories, Suppliers, and Product Tags tags.


GET/brands

Brands

A brand is uniquely identified by its code. Products link to a brand via brand_id (see Products).

  • Name
    GET /brands
    Description

    Lists brands. Filters: search, is_active, has_products, include_deleted, order_by, order_dir, page, page_size.

  • Name
    GET /brands/{brand_id}
    Description

    Retrieves a single brand.

  • Name
    POST /brands
    Description

    Creates a brand.

  • Name
    PUT /brands/{brand_id}
    Description

    Updates a brand.

  • Name
    DELETE /brands/{brand_id}
    Description

    Deletes a brand. Query permanent=true to bypass the soft-delete.

  • Name
    GET /brands/search
    Description

    Lightweight typeahead search (q, limit) used to populate pickers.

  • Name
    GET /brands/stats, GET /brands/dashboard
    Description

    Aggregate brand statistics / dashboard widgets.

  • Name
    GET /brands/export-csv, POST /brands/import-csv, POST /brands/import-from-odoo
    Description

    CSV export/import and Odoo brand import.

  • Name
    POST /brands/update-products-count
    Description

    Recomputes the cached product count for a brand (brand_id query param).

Body parameters — POST / PUT /brands

  • Name
    code
    Type
    string
    Description

    Unique brand code.

  • Name
    name
    Type
    string
    Description

    Brand name.

  • Name
    display_name
    Type
    string
    Description

    Official display name — overrides name for UI/exports.

  • Name
    logo_url
    Type
    string
    Description

    Brand logo URL.

  • Name
    website
    Type
    string
    Description

    Brand website URL.

  • Name
    description
    Type
    string
    Description

    Brand description.

  • Name
    is_active
    Type
    boolean
    Description

    Whether the brand is active.

Aliases

  • Name
    GET /brands/{brand_id}/aliases
    Description

    Lists known name aliases for a brand (e.g. supplier-specific spellings).

  • Name
    POST /brands/{brand_id}/aliases
    Description

    Adds an alias. Body: alias (required), source.

  • Name
    DELETE /brands/{brand_id}/aliases/{alias_id}
    Description

    Removes an alias.

Request

POST
/brands
curl -X POST https://api.pixeepim.com/api/v1/brands \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "ACME",
    "name": "Acme",
    "website": "https://acme.example",
    "is_active": true
  }'

Response

{
  "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  "code": "ACME",
  "name": "Acme",
  "is_active": true,
  "created_at": "2026-09-17T09:00:00Z"
}

GET/brands/duplicates

Brand deduplication

Brands arrive from multiple suppliers with inconsistent spelling. These endpoints detect and reconcile duplicates.

  • Name
    GET /brands/duplicates
    Description

    Detects likely duplicate brands. Query: min_similarity, limit.

  • Name
    POST /brands/auto-merge-case-duplicates
    Description

    Automatically merges brands that differ only by letter case.

  • Name
    POST /brands/merge
    Description

    Merges one or more source brands into a target brand, optionally creating aliases from the source names.

  • Name
    GET /brands/merge-history
    Description

    Lists past merges. Query: target_brand_id, page, page_size.

  • Name
    POST /brands/match
    Description

    Matches a free-text brand name to an existing brand (used when ingesting supplier data).

  • Name
    POST /brands/match/batch
    Description

    Batch version of /brands/match.

  • Name
    POST /brands/merge/preview, POST /brands/merge-history/{merge_id}/rollback
    Description

    Preview a merge before running it (nothing written), and undo a past merge.

  • Name
    POST /brands/duplicates/recalculer, /accepter, /ecarter, /retablir
    Description

    Recompute duplicate pairs, accept the pairs above a similarity threshold, dismiss a pair, or restore a dismissed pair.

Body parameters — POST /brands/merge

  • Name
    source_brand_ids
    Type
    array
    Description

    Brands to merge — deleted after the merge.

  • Name
    target_brand_id
    Type
    string
    Description

    Brand to keep; receives the merged data.

  • Name
    merge_reason
    Type
    string
    Description

    Free-text reason, kept for audit.

  • Name
    create_aliases
    Type
    boolean
    Description

    Create aliases from the source brand names (default varies — pass explicitly).

Body parameters — POST /brands/match

  • Name
    name
    Type
    string
    Description

    Brand name to match.

  • Name
    supplier_code
    Type
    string
    Description

    Supplier code, used as matching context.

Shop correspondences, proposals and manufacturers

The former queue of “pending brands” (/brands/pending/*) and POST /brands/suggest-matches have been removed (v6.33.0). Unknown brand names found at import are no longer queued: they are kept on the product, without an attached brand, and surface in the proposals below.

  • Name
    GET /brands/correspondances, GET /brands/correspondances/boutiques
    Description

    Correspondences between each shop's brands and your brand directory (read only), and the shops that have some.

  • Name
    POST /brands/correspondances/valider, /rejeter, /relire, POST /brands/correspondances/{correspondance_id}/lier
    Description

    Validate, reject, re-read correspondences, or link one to a brand of the directory. A validated correspondence is used when sending products to the shop.

  • Name
    GET /brands/correspondances/export, POST /brands/correspondances/import/apercu, POST /brands/correspondances/import
    Description

    CSV export and import of correspondences, with a preview that writes nothing.

  • Name
    GET /brands/ecarts/produits, GET /brands/ecarts/connexions, POST /brands/{brand_id}/ecarts/envoi
    Description

    Products whose brand differs from what was last sent to a shop (motifs: marque, correspondance), and preparing their sending.

  • Name
    GET /brands/propositions, GET /brands/propositions/resume
    Description

    Proposed brands for products (current brand, proposed brand, sources, score), best score first.

  • Name
    POST /brands/propositions/recalculer, /ia, /accepter, /refuser, POST /brands/propositions/lots/{lot_id}/annuler
    Description

    Recompute proposals (optionally with AI), accept or refuse them, and undo an accepted batch.

  • Name
    GET /brands/from-products/preview, POST /brands/from-products/apply
    Description

    Create brands from the brand names found on products, after a preview.

  • Name
    POST /brands/{brand_id}/logo, DELETE /brands/{brand_id}/logo
    Description

    Upload or remove a brand logo.

  • Name
    GET|POST /brands/fabricants, GET|PATCH|DELETE /brands/fabricants/{fabricant_id}, PUT /brands/{brand_id}/fabricant
    Description

    Manufacturer records for product safety (EU GPSR) and the default manufacturer of a brand; CSV import with preview (/brands/fabricants/import-csv/apercu, /import-csv), Amazon-based proposals (/brands/fabricants/propositions, /propositions/creer), coverage per brand (/brands/fabricants/marques) and linking one manufacturer to several brands (/brands/fabricants/{fabricant_id}/marques, with /apercu).

Request

POST
/brands/merge
curl -X POST https://api.pixeepim.com/api/v1/brands/merge \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "source_brand_ids": ["11111111-1111-1111-1111-111111111111"],
    "target_brand_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "create_aliases": true
  }'

Request

GET
/brands/propositions
curl "https://api.pixeepim.com/api/v1/brands/propositions" \
  -H "Authorization: Bearer {api_key}"

GET/categories-manager/taxonomies/{taxonomy_id}/categories

Categories

Categories live under one or more taxonomies (e.g. your internal tree, Google Product Taxonomy, Amazon Browse Nodes). categories-manager/* manages your taxonomies; the read-only reference trees (Amazon, Google) are exposed under categories/*. The former generic “web” category tree has been removed (v6.33.0) — products are filed through the Category Manager only.

Your taxonomies

  • Name
    GET /categories-manager/taxonomies
    Description

    Lists taxonomies. Query: is_active.

  • Name
    GET /categories-manager/taxonomies/{taxonomy_id}
    Description

    Retrieves a taxonomy.

  • Name
    POST /categories-manager/taxonomies/{taxonomy_id}/sync
    Description

    Re-syncs a taxonomy from its configured source.

  • Name
    POST /categories-manager/taxonomies/{taxonomy_id}/sync-and-map
    Description

    Syncs and immediately runs auto-mapping against another taxonomy.

  • Name
    GET /categories-manager/taxonomies/{taxonomy_id}/export-csv
    Description

    Exports the taxonomy tree as CSV.

Categories within a taxonomy

  • Name
    GET /categories-manager/taxonomies/{taxonomy_id}/categories
    Description

    Lists categories in a taxonomy. Filters: parent_id, level, search, is_active, flat (flatten the tree), page, page_size.

  • Name
    GET /categories-manager/categories/{category_id}
    Description

    Retrieves a category.

  • Name
    PUT /categories-manager/categories/{category_id}/active
    Description

    Toggles the node's enabled flag. Body: { "is_active": true|false }.

  • Name
    GET /categories-manager/categories/{category_id}/tree
    Description

    Retrieves the subtree rooted at this category.

  • Name
    GET /categories-manager/categories/search
    Description

    Typeahead search across a taxonomy. Query: q, taxonomy_source_id, limit, offset, source_code.

  • Name
    GET /categories-manager/categories/dashboard, GET /categories-manager/categories/stats
    Description

    Dashboard widgets and aggregate stats.

  • Name
    POST /categories-manager/categories/import-csv, POST /categories-manager/categories/import-url
    Description

    Bulk-imports categories from a CSV file or a URL (body: ImportUrlRequest).

Structure changes (preview, apply, undo)

  • Name
    POST /categories-manager/structure/apercu
    Description

    Preview of one change, nothing written. Body: type (required) — creer_taxonomie, modifier_taxonomie, supprimer_taxonomie, creer_categorie, renommer_categorie, deplacer_categorie, fusionner_categories, supprimer_categorie — plus taxonomy_id, category_id, parent_id (absent = root), cible_id (merge target), nom, actif as the change needs.

  • Name
    POST /categories-manager/structure/appliquer
    Description

    Applies the change: same body plus the empreinte returned by the preview. Journaled (who, when, before, after, impact); nothing is sent to shops.

  • Name
    GET /categories-manager/structure/journal, POST /categories-manager/structure/journal/{change_id}/annuler
    Description

    Journal of applied changes, and undo of one change (409 CATEGORY_STRUCTURE_UNDO_CONFLICT if the tree changed since).

  • Name
    GET /categories-manager/structure/arbres/{taxonomy_id}, GET /categories-manager/structure/ecarts, GET /categories-manager/structure/ecarts/{taxonomy_id}
    Description

    A taxonomy's tree as edited, and the differences between your tree and each shop's.

Translations & attributes

  • Name
    GET /categories-manager/categories/{category_id}/translations
    Description

    Lists per-locale translations of a category name.

  • Name
    PUT /categories-manager/categories/{category_id}/translations
    Description

    Writes a translation (body: TaxonomyCategoryTranslationWrite).

  • Name
    GET /categories-manager/categories/{category_id}/attributes
    Description

    Lists the attributes applicable to a category.

  • Name
    GET /categories-manager/attributes, POST, PUT /{attribute_id}, DELETE /{attribute_id}
    Description

    CRUD for taxonomy attributes (body AttributeCreate/AttributeUpdate: taxonomy_category_id, name, display_name, attribute_type, unit, is_required, is_filterable, sort_order).

  • Name
    POST /categories-manager/attributes/{attribute_id}/values
    Description

    Adds a selectable value to an attribute.

  • Name
    GET /categories-manager/attributes/translations, PUT
    Description

    Reads/writes attribute-label translations. Query: scope, key.

  • Name
    POST /categories-manager/attributes/import-csv
    Description

    Bulk-imports attributes.

Reference trees (read-only)

  • Name
    GET /categories/amazon
    Description

    Amazon Browse Node reference categories. Query: limit, offset, search.

  • Name
    GET /categories/google
    Description

    Google Product Taxonomy reference categories. Query: limit, offset, category_id.

Preview a new category

POST
/categories-manager/structure/apercu
curl -X POST https://api.pixeepim.com/api/v1/categories-manager/structure/apercu \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "creer_categorie",
    "taxonomy_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "nom": "Casques audio"
  }'

Apply it

POST
/categories-manager/structure/appliquer
curl -X POST https://api.pixeepim.com/api/v1/categories-manager/structure/appliquer \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "creer_categorie",
    "taxonomy_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "nom": "Casques audio",
    "empreinte": "…fingerprint returned by the preview…"
  }'

Request

PUT
/categories-manager/categories/{category_id}/active
curl -X PUT https://api.pixeepim.com/api/v1/categories-manager/categories/9f8e7d6c-5b4a-3210-9876-543210fedcba/active \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{"is_active": false}'

GET/categories-manager/mappings

Taxonomies & mappings

Mappings link a category in one taxonomy to its equivalent in another (e.g. your internal category → the matching Google category), so exports and feeds can translate automatically.

  • Name
    GET /categories-manager/mappings
    Description

    Lists mappings. Filters: source_taxonomy_id, target_taxonomy_id, status, mapping_type, page, page_size.

  • Name
    POST /categories-manager/mappings
    Description

    Creates a mapping. Body: source_category_id, target_category_id (required), mapping_type, confidence_score, status.

  • Name
    PUT /categories-manager/mappings/{mapping_id}/status
    Description

    Approves/rejects a mapping (body: MappingStatusUpdate).

  • Name
    DELETE /categories-manager/mappings/{mapping_id}
    Description

    Deletes a mapping.

  • Name
    POST /categories-manager/mappings/auto-match
    Description

    Runs automatic matching between two taxonomies. Body: source_taxonomy_id, target_taxonomy_id (required), min_confidence, limit.

  • Name
    GET /categories-manager/mappings/suggestions
    Description

    Suggests mapping candidates for review. Query: taxonomy_source_id, limit.

  • Name
    GET /categories-manager/mappings/export-csv
    Description

    Exports mappings as CSV.

  • Name
    GET /categories-manager/sync/reconcile
    Description

    Reconciles a taxonomy against its source, reporting drift. Query: source_id.

Request

POST
/categories-manager/mappings/auto-match
curl -X POST https://api.pixeepim.com/api/v1/categories-manager/mappings/auto-match \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "source_taxonomy_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "target_taxonomy_id": "11111111-1111-1111-1111-111111111111",
    "min_confidence": 0.8,
    "limit": 100
  }'

GET/categories-manager/products/{product_id}/categories

Product ↔ category assignment

Assigns products to taxonomy categories, with one category per shop/taxonomy flagged primary.

  • Name
    GET /categories-manager/products/{product_id}/categories
    Description

    Lists a product's category assignments.

  • Name
    POST /categories-manager/products/{product_id}/assign
    Description

    Assigns a product to a category. Body: taxonomy_category_id (required), assigned_by, confidence, is_primary.

  • Name
    POST /categories-manager/products/bulk-assign
    Description

    Assigns many products to the same category at once. Body: product_ids, taxonomy_category_id (required), assigned_by, confidence, is_primary.

  • Name
    DELETE /categories-manager/products/{product_id}/categories/{assignment_id}
    Description

    Removes an assignment.

  • Name
    PUT /categories-manager/products/{product_id}/categories/{assignment_id}/primary
    Description

    Sets/unsets the primary flag for one assignment. Body: { "is_primary": true|false }.

  • Name
    POST /categories-manager/products/sync-categories-from-odoo
    Description

    Bulk-syncs product categories from Odoo.

  • Name
    POST /categories-manager/import-odoo-attributes
    Description

    Imports Odoo 18 product attributes into the taxonomy attribute model.

Request

POST
/categories-manager/products/bulk-assign
curl -X POST https://api.pixeepim.com/api/v1/categories-manager/products/bulk-assign \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "product_ids": ["550e8400-e29b-41d4-a716-446655440000", "6ba7b810-9dad-11d1-80b4-00c04fd430c8"],
    "taxonomy_category_id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
    "is_primary": true
  }'

GET/suppliers/

Suppliers

  • Name
    GET /suppliers/
    Description

    Lists suppliers. Filters: search, is_active, page, per_page.

  • Name
    GET /suppliers/{supplier_id}
    Description

    Retrieves a supplier.

  • Name
    POST /suppliers/
    Description

    Creates a supplier. Body: name, code (required), contact_email, contact_phone, address, country, is_active.

  • Name
    PUT /suppliers/{supplier_id}
    Description

    Updates a supplier.

  • Name
    DELETE /suppliers/{supplier_id}
    Description

    Deletes a supplier.

  • Name
    DELETE /suppliers/bulk
    Description

    Deletes multiple suppliers at once. Body: { "supplier_ids": [...] }.

  • Name
    GET /suppliers/active
    Description

    Shortcut list of active suppliers only, for pickers.

  • Name
    GET /suppliers/stats, GET /suppliers/stats/summary, GET /suppliers/list/with-automation
    Description

    Aggregate supplier statistics and connector-automation status.

  • Name
    POST /suppliers/test-connection
    Description

    Validates a source connection before saving. Body: source_type, connection_config (required). A Google Drive source answers 422 SUPPLIER_INTEGRATION_ABSENT (Drive is not offered as a supplier source).

  • Name
    GET /suppliers/{supplier_id}/with-config, POST /suppliers/with-config, PUT /suppliers/{supplier_id}/with-config
    Description

    Reads/creates/updates a supplier together with its import/connector configuration in one call (UnifiedSupplierRequest / UnifiedSupplierUpdateRequest).

Request

POST
/suppliers/
curl -X POST https://api.pixeepim.com/api/v1/suppliers/ \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Distribution",
    "code": "ACME-DIST",
    "contact_email": "orders@acme.example",
    "country": "FR",
    "is_active": true
  }'

Response

{
  "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  "name": "Acme Distribution",
  "code": "ACME-DIST",
  "country": "FR",
  "is_active": true
}

GET/supplier-history/{supplier_code}/catalog

Supplier history

Historical data captured from supplier feed imports: catalog snapshots, price/stock history, sync logs, and EAN resolution review.

  • Name
    GET /supplier-history/{supplier_code}/catalog
    Description

    The supplier's catalog as last imported. Filters: search, ean, is_active, page, per_page.

  • Name
    GET /supplier-history/{supplier_code}/prices
    Description

    Price history over time for the supplier (optionally scoped to product_id), with start_date/end_date.

  • Name
    GET /supplier-history/{supplier_code}/stocks
    Description

    Stock-level history, same filters as prices.

  • Name
    GET /supplier-history/{supplier_code}/files
    Description

    Import files received from this supplier. Filters: file_type, start_date, limit.

  • Name
    GET /supplier-history/{supplier_code}/sync-logs
    Description

    Sync run logs. Filters: status, operation, start_date, limit.

  • Name
    GET /supplier-history/{supplier_code}/stats
    Description

    Aggregate stats for the supplier's import history.

  • Name
    GET /supplier-history/ean-resolutions
    Description

    Lists EAN resolutions awaiting or under review. Filters: page, per_page, status, supplier_code, search, sort_by, sort_order.

  • Name
    PATCH /supplier-history/ean-resolutions/{resolution_id}
    Description

    Updates a resolution. Body: resolved_ean, status, resolution_source.

  • Name
    DELETE /supplier-history/ean-resolutions/{resolution_id}
    Description

    Deletes a resolution record.

Request

GET
/supplier-history/{supplier_code}/catalog
curl "https://api.pixeepim.com/api/v1/supplier-history/ACME-DIST/catalog?is_active=true&per_page=50" \
  -H "Authorization: Bearer {api_key}"

GET/tags/tags

Product tags

Freeform labels for merchandising and filtering.

  • Name
    GET /tags/tags
    Description

    Lists tags. Filters: search, is_active, page, per_page.

  • Name
    POST /tags/tags
    Description

    Creates a tag. Body: name (required), description, color.

  • Name
    POST /tags/tags/bulk
    Description

    Creates multiple tags at once. Body: { "tags": [...] }.

  • Name
    PUT /tags/tags/{tag_id}
    Description

    Updates a tag (name, description, color, is_active).

  • Name
    DELETE /tags/tags/{tag_id}
    Description

    Deletes a tag.

  • Name
    POST /tags/tags/merge
    Description

    Merges one or more source tags into a target tag. Body: source_tag_ids, target_tag_id (required).

Request

POST
/tags/tags
curl -X POST https://api.pixeepim.com/api/v1/tags/tags \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Best-seller",
    "color": "#22c55e"
  }'

Response

{
  "id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
  "name": "Best-seller",
  "color": "#22c55e",
  "is_active": true
}

Was this page helpful?