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/suggest-matches
    Description

    Suggests brand matches for review. Query: limit.

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.

Pending brands (supplier ingestion queue)

  • Name
    GET /brands/pending
    Description

    Lists brand names awaiting validation, typically created during a supplier import. Filters: status, search, supplier_code, order_by, order_dir, page, page_size.

  • Name
    GET /brands/pending/{pending_id}
    Description

    Retrieves a single pending brand.

  • Name
    POST /brands/pending/{pending_id}/validate
    Description

    Resolves one pending brand: body action (e.g. assign to an existing brand_id, or create new), create_alias, notes.

  • Name
    POST /brands/pending/bulk-validate
    Description

    Resolves several pending brands at once: body pending_ids, action, brand_id (for assign), create_alias.

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

POST
/brands/pending/{pending_id}/validate
curl -X POST https://api.pixeepim.com/api/v1/brands/pending/22222222-2222-2222-2222-222222222222/validate \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "assign",
    "brand_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    "create_alias": true
  }'

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 own editable taxonomies; the read-only reference trees are exposed separately under categories/* (Amazon, Google, and a generic "web" tree).

Your taxonomies

  • Name
    GET /categories-manager/taxonomies
    Description

    Lists taxonomies. Query: is_active.

  • Name
    POST /categories-manager/taxonomies
    Description

    Creates a taxonomy (body: TaxonomySourceCreate — code, name, locale, source_type, sync_url, sync_method, sync_cron, is_active, config).

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

    Retrieves a taxonomy.

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

    Updates a taxonomy.

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

    Deletes 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
    POST /categories-manager/taxonomies/{taxonomy_id}/categories
    Description

    Creates a category. Body (CategoryCreate): name (required), external_id, slug, parent_id, is_active, sort_order, metadata.

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

    Retrieves a category.

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

    Updates a category (CategoryUpdate: name, external_id, slug, is_active, sort_order, metadata).

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

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

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.

  • Name
    GET /categories/web
    Description

    Generic web/internal category tree. Query: limit, offset, parent_id, include_hierarchy.

  • Name
    GET /categories/{category_id}/tree, /children, /parents
    Description

    Subtree, children, or ancestor chain for a reference category.

  • Name
    GET /categories/{category_id}/translations, PUT
    Description

    Reads/writes a reference category's translation.

Request

POST
/categories-manager/taxonomies/{taxonomy_id}/categories
curl -X POST https://api.pixeepim.com/api/v1/categories-manager/taxonomies/6ba7b810-9dad-11d1-80b4-00c04fd430c8/categories \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Casques audio",
    "parent_id": null,
    "is_active": true,
    "sort_order": 10
  }'

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
    POST /categories-manager/mappings/import-from-legacy
    Description

    Imports mappings from the legacy category system.

  • 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/categories/migrate-product-categories
    Description

    One-off migration of legacy category assignments into the taxonomy model.

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

  • 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?