Skip to content
SarvexDocs
Esc
↑↓navigate↵open⌘Jpreview

Get product detail with issues and attribute mappings

GET/stores/{store_id}/catalog/products/{sku}
Authorization
AuthorizationBearer token (JWT) · headerrequired

JWT issued by the external IdP via the OAuth 2.0 authorization-code flow (Kinde in production; a simulator in test). The client obtains it and sends it as a Bearer token on every authenticated call. Sarvex's services verify it — issuer, audience, signature (IdP JWKS), expiry — and read identity and tenant from its claims. Sarvex does not issue or revoke these tokens. merchant_id/store_id are read from the verified claims (and the merchant→store mapping), never from the URL. The operator scope is required for /operator/*. Operators acting on a specific merchant pass the X-Operate-As header, which is recorded in the audit log.

Path parameters
store_idstringrequired

A store the caller's merchant owns. Authorized server-side against the principal; not a free-form tenant selector.

skustringrequired
Responses
200

Product detail.

skustring
titlestring
scoreinteger
min 0 · max 100
has_blocking_issueboolean
open_issue_countinteger
dimensionsobject
Show properties
completenessinteger
consistencyinteger
attribute_qualityinteger
delivery_datainteger
issuesproduct_issue[]
Show properties
Array of product_issue
issue_idstring
fieldstring
problemstring
Allowed:missingfree_textnon_standard_enuminconsistent
blocks_checkoutboolean
revenue_impact_monthlymoney
Show properties
amount_minorintegerrequired

Amount in minor units (cents).

currencystringrequired
remediablestring
Allowed:rulemanual
attribute_mappingsattribute_mapping[]
Show properties
Array of attribute_mapping
source_attributestring
catalog_attributestring

The canonical merchandising attribute the raw value resolved onto, drawn from the catalogue's attribute field set (internal/pkg/ucp/catalogue/v1/attribute_fields_data.go). These are product-data attributes, NOT fields of the UCP protocol: the UCP spec has no brand, mpn, condition or age_group, and expresses gtin as a barcode type and color/size/material as product options. This was named ucp_field, which asserted a correspondence that does not exist.

tierresolution_tier

Ontology resolution tier shown in V1 (no LLM tier). unresolved means no raw store attribute resolved onto this target at all — the resolve stage emits one entry per catalogue target field, so unresolved entries are the normal way a product reports what it is missing, and carry an empty source_attribute and zero confidence. It was absent from this enum while the sync plane emitted it, which led clients to treat any non-rule tier as learned.

Allowed:rulelearnedunresolved
confidencenumber<float>
min 0 · max 1
404

Resource not found within the caller's tenant.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
detailsobject | null
Try it
Server
Authorization
Parameters
Request
curl -X GET "https://api.sarvex.example.com/v1/stores/string/catalog/products/string" \
  -H "Authorization: Bearer YOUR_TOKEN"
Response
{
  "sku": "string",
  "title": "string",
  "score": 0,
  "has_blocking_issue": true,
  "open_issue_count": 0,
  "dimensions": {
    "completeness": 0,
    "consistency": 0,
    "attribute_quality": 0,
    "delivery_data": 0
  },
  "issues": [
    {
      "issue_id": "string",
      "field": "string",
      "problem": "missing",
      "blocks_checkout": true,
      "revenue_impact_monthly": {
        "amount_minor": 0,
        "currency": "AUD"
      },
      "remediable": "rule"
    }
  ],
  "attribute_mappings": [
    {
      "source_attribute": "Größe",
      "catalog_attribute": "size",
      "tier": "rule",
      "confidence": 0.91
    }
  ]
}