Skip to main content
Closient is a GS1-conformant Digital Link resolver. A GTIN can be resolved to structured product data, a consumer product information page, warranty info, recall status, and more.

When to use

  • The agent has a GTIN (or scanned barcode) and needs product detail.
  • The agent received a GTIN from local-product-search and wants the full product record.

Two ways in

Returns the full ProductOut schema: product_name, brand, manufacturer, image_url, description, net_content, GPC taxonomy, dimensions, weight, country_of_origin, data quality signals (confidence_score, field_confidence), ownership state (is_claimed, claim_verification_status).

Qualifier paths

  • /01/{gtin}/10/{batch} — resolve with batch/lot identifier
  • /01/{gtin}/21/{serial} — resolve with serial number
  • ?linkType=gs1:pip / gs1:warranty / gs1:recallStatus — specific link types

The safety block

The JSON and JSON-LD representations of /01/{gtin} (and any qualifier path under it) always carry a safety object. It is the per-scan safety verdict, evaluated from the same gate a human scanning the same URI is stopped by, so a machine and a person cannot be given different answers.

recallStatus — three values, and they are not interchangeable

indeterminate exists because the absence of a recall record has two very different causes — “we looked and there is nothing” and “we have nothing to look in” — and until it existed both were reported as none. Sources are polled independently (FDA, FSIS, CPSC, Health Canada), so one dark feed degrades only the products it regulates; a product whose category we have not classified is treated as governed by all of them. The key is never omitted. An absent field is indistinguishable from a resolver that does not implement it, so “unknown” is a value rather than a silence. GET /pip/{gtin}/recall/ is the human-readable counterpart and renders the same three states — including an explicit “recall status unconfirmed” page, which names the sources that could not be checked. Accept: text/markdown returns it as structured markdown with the same recallStatus value. gs1:recallStatus in the linkset is a link relation, not a verdict: it is advertised when there is an open recall to read. Its absence is not a clearance — read safety.recallStatus for the answer.

What’s NOT in the response

Certifications, allergens, and recall data live in separate APIs. Use:
  • check-recalls for recall/safety notice status
  • /certifications/api/v1/... for product certifications
  • check-recalls — active recalls for this GTIN
  • compare-products — diff two GTINs side-by-side
  • local-product-search — find where to buy this GTIN near you