curl --request GET \
--url https://www.closient.com/products/api/v1/products/{gtin}/verification \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/verification"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/products/api/v1/products/{gtin}/verification', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.closient.com/products/api/v1/products/{gtin}/verification",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/products/api/v1/products/{gtin}/verification"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/products/api/v1/products/{gtin}/verification")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/{gtin}/verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"blocks_resolver_serving": true,
"checklist": [
{
"action": "Upload GS1 certificate",
"evidence_type": "gs1_certificate",
"is_done": false
}
],
"claim_verification_status": "unverified",
"domain_verification": {
"dns_record_name": "_closient-verify.acme.example",
"domain": "acme.example",
"http_enabled": false,
"http_file_url": "https://acme.example/.well-known/closient-verification.txt",
"is_available": true,
"token": "closient-verify=3f9c1a7e5b2d4c6a8e0f1b3d5c7a9e1f"
},
"evidence": [
{
"badge": "pending",
"created": "2026-09-29T14:03:11Z",
"evidence_type": "gs1_certificate",
"has_file": true,
"id": "2N4kq7ZxYQ8vR3sT1bWnCp",
"notes": "GS1 US company prefix certificate, issued 2024.",
"review_status": "pending",
"strength": "strong"
}
],
"gtin": "00012345678905",
"next_status": "verified",
"promotion_rules": [
{
"is_met": false,
"requirements": [
{
"have": 0,
"missing": 1,
"required": 1,
"strength": "strong"
}
]
}
]
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}Get a claim's verification status
Where your organization’s ownership claim on this GTIN stands: its verification tier, the evidence you have filed with each item’s review state and expiry, how far the claim is from Verified under each promotion rule, and what to publish for the domain-control checks. Only the organization that owns the product can read it; any other GTIN is a 404.
curl --request GET \
--url https://www.closient.com/products/api/v1/products/{gtin}/verification \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/verification"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/products/api/v1/products/{gtin}/verification', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.closient.com/products/api/v1/products/{gtin}/verification",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/products/api/v1/products/{gtin}/verification"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/products/api/v1/products/{gtin}/verification")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/{gtin}/verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"blocks_resolver_serving": true,
"checklist": [
{
"action": "Upload GS1 certificate",
"evidence_type": "gs1_certificate",
"is_done": false
}
],
"claim_verification_status": "unverified",
"domain_verification": {
"dns_record_name": "_closient-verify.acme.example",
"domain": "acme.example",
"http_enabled": false,
"http_file_url": "https://acme.example/.well-known/closient-verification.txt",
"is_available": true,
"token": "closient-verify=3f9c1a7e5b2d4c6a8e0f1b3d5c7a9e1f"
},
"evidence": [
{
"badge": "pending",
"created": "2026-09-29T14:03:11Z",
"evidence_type": "gs1_certificate",
"has_file": true,
"id": "2N4kq7ZxYQ8vR3sT1bWnCp",
"notes": "GS1 US company prefix certificate, issued 2024.",
"review_status": "pending",
"strength": "strong"
}
],
"gtin": "00012345678905",
"next_status": "verified",
"promotion_rules": [
{
"is_met": false,
"requirements": [
{
"have": 0,
"missing": 1,
"required": 1,
"strength": "strong"
}
]
}
]
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}Authorizations
Path Parameters
GTIN barcode (8, 12, 13, or 14 digits, with or without separators). Normalized to GTIN-14 for lookup.
^[0-9]{8,14}$Response
OK
Where a GTIN ownership claim stands and what would move it to Verified.
The product's GTIN-14.
Current verification tier. A claimed product with no status yet reads unverified.
unverified, prefix_matched, verified, disputed, rejected The tier this claim can climb to by self-serve evidence; null when verified, disputed or rejected.
unverified, prefix_matched, verified, disputed, rejected True while the claim is not authoritative enough for the resolver to serve the brand's links.
Self-serve routes to Verified.
Show child attributes
Show child attributes
Each evidence combination that qualifies for Verified and how far off it is. Any one rule suffices.
Show child attributes
Show child attributes
Evidence this organization has filed for the product, newest first.
Show child attributes
Show child attributes
Instructions for the domain-control checks.
Show child attributes
Show child attributes
{
"dns_record_name": "_closient-verify.acme.example",
"domain": "acme.example",
"http_enabled": false,
"http_file_url": "https://acme.example/.well-known/closient-verification.txt",
"is_available": true,
"token": "closient-verify=3f9c1a7e5b2d4c6a8e0f1b3d5c7a9e1f"
}