Map Product
POST/api/magento1/instances/:integrationInstance/products/:product/map
Maps a single catalog product to a specific SKU.io product chosen in the smart-match modal. Replaces any existing mapping in place. Returns the refreshed Magento 1 product resource (with its product_listing).
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Body fields:
- product_id (integer, required): the SKU.io product id to link (must exist in
products).
custom_attributes (detail responses only)
Magento 1 capture is subtractive: every top-level SOAP key with no mirror column is retained verbatim in magento1_products.custom_attributes. This endpoint annotates each captured code with its Living Catalog (content-sync) mapping, so you can see which of the store's EAV attributes are actually governed.
Each row:
code(string) — the Magento EAV attribute code as returned by the store.label(string) — the mapping's saved label, else the code humanized (url_key→Url Key).value(string|null) — the captured value, stringified (arrays/objects are JSON-encoded).mapped(boolean) — anintegration_attribute_mappingsrow exists for this code on this instance.enabled(boolean) — that mapping is switched on, so the code participates in content-drift detection.attribute_id(integer|null) — the SKU catalogattributes.idit maps to.attribute_name(string|null) — that SKU attribute's name.
Rows are ordered enabled-mapped first, then mapped-but-disabled, then unmapped, each group sorted by code. Returns [] when the product carries no custom attributes. The paginated product list endpoints do NOT include this key — it is detail-only, so the index stays lean.
Authentication: Requires Bearer token.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.