FAQs

Q1. What framework and database does the PIM Service use?

Fastify (v5) on Node 20+ with TypeScript, backed by MongoDB (pimdb_${STAGE}). Redis is an optional cache and EventBridge carries indexing events.

Q2. How is authentication and authorization enforced?

JWT bearer tokens; each protected route requires a specific privilege (and, for CRUD, admin). Failures return 403 EQ-PIM-4030001. Set SKIP_AUTH=true only for local testing.

Q3. Which endpoints are public?

All /v1/search/*, /v1/action/* (storefront), /v1/health, and (only when STAGE=local) /v1/internal/import-action and /v1/internal/export-action. None require a privilege.

Q4. What does the error-code format mean?

EQ-PIM-XXXXXXX — prefix EQ-PIM-, then 7 digits whose first three encode the HTTP status (e.g. 404, 422, 500). The authoritative status comes from an internal status map kept consistent with those digits.

Q5. What events does the service publish, and where?

Primarily INDEX_REQUESTED to the EventBridge bus EVENT_BUS_NAME (default eq-pim-service-eventbus); the specific entity change (e.g. PRODUCT_CREATED) is inside data.event. The bulk-indexing fan-out also publishes BULK_INDEX_CHUNK / BULK_CATEGORY_INDEX_CHUNK (self-consumed) and bulk jobs emit batch.execution.{progress,completed,failed} status events. Locally, if publish fails, indexing runs in-process.

Q6. Which search engine is used?

Per instance: Typesense or Elasticsearch/OpenSearch, chosen by the instance’s searchEngine property (default elasticsearch). Index collections are named eq9-pim-{instanceId}-products / -categories.

Q7. How do bulk import/export and indexing run in production?

Via AWS Step Functions invoking the PIM Service in a direct-invocation batch mode. Action prefixes route the work: batch. (import), batch.export. (export), price.clone. (clone), refresh./category. (indexer).

Q8. How is multi-tenancy handled?

Nearly all endpoints require an instanceId query parameter; data is scoped by instance (and often catalogId). Per-tenant behavior (locales, search engine, plugins) comes from instance.properties.

Q9. Can behavior be customized per tenant without changing the service?

Yes — via the plugin registry (pluginConfig selects custom validators, allowlisted by environment) and marketplace connectors.

Q10. Why do some composite-product endpoints seem missing?

Several GET/DELETE operations for bundles/kits/collections are not currently enabled. See the flags in §3.


Revision History
2026-08-05 | JP – Created the page and added the content.