Skip to main content
Experimental (v1): This linkType response shape is published as a v1 experimental contract. The auth-tier split, response fields, and verificationStatus enum may change before the first external integration freezes the shape. Closient will announce a stable v1.0 once an external scanner or 2D-cert tool integrates against the response.
The gs1:verificationService linkType returns the verification status of a serialized trade item — a GTIN + AI 21 serial pair scanned against the Closient resolver. Two tiers are exposed:

Endpoint

Path parameters mirror the GS1 Digital Link AI ordering used elsewhere in the resolver (01 = GTIN, 21 = serial).

Authentication

Authenticated calls supply an organization API key in the X-API-Key header. The same key shape used elsewhere in the Closient API is accepted (csb_*).
Calls without X-API-Key (or with an unknown key) fall through to the minimal-tier response and are subject to the IP rate limit.

Unauthenticated response (consumer)

Enumeration protection

Serials we have never seen return the same shape as known-authentic serials (verificationStatus: "authentic", recommendation: "proceed"). Consumer-facing scanners cannot use this endpoint to probe whether a particular serial is in the Closient database. Brands needing the truthful “we have not seen this serial” signal must authenticate — the auth-tier response returns scanHistory: null for never-seen serials.

Rate limit

Unauthenticated calls are limited to 60 requests per hour per client IP. The 61st call returns 429 Too Many Requests with a Retry-After header indicating the seconds remaining in the bucket.

Authenticated response (brand / retailer)

The auth-tier response is a strict superset of the unauth-tier response — every consumer field is preserved verbatim.

scanHistory

scanHistory is null when the serial has never been observed by the resolver (auth tier only — the unauth tier omits the field entirely).

anomalies

Empty array when no rule has fired. Phase 1 emits a single rule: Each anomaly entry carries: Phase 3 (tracked in C-2292) layers on the remaining rules — excessive scans, geographic impossibility, post-sale re-entry, serialization errors, mass-scan — each with its own type value.

Status values

The unverified internal state is never returned to consumers — it collapses to authentic for the public contract until Phase 3 ships positive-authentication rules.

Errors

Stability guarantees

This linkType is experimental v1. Until at least one external scanner / 2D-cert tool pins to the contract, the following may change with notice in the changelog:
  • Field names (verificationStatus, recommendation, etc.)
  • The verificationStatus enum set
  • The auth-tier split (which fields are unauth vs auth)
  • The recommendation mapping table
  • The shape of anomalies entries
Stable in all v1 revisions:
  • The path layout (/resolver/api/v1/verify/01/<gtin>/21/<serial>)
  • The X-API-Key auth scheme
  • The 60/hour anonymous rate limit
  • The enumeration-protection guarantee (unknown serial = known-authentic shape)
When the contract freezes, Closient will announce v1.0 in the API changelog.