curl --request POST \
--url https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check', 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/http-check",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/http-check"
req, _ := http.NewRequest("POST", 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.post("https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check")
.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-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"claim_verification_status": "unverified",
"evidence": {
"badge": "pending",
"created": "2026-09-29T14:03:11Z",
"evidence_type": "domain_match",
"has_file": true,
"id": "2N4kq7ZxYQ8vR3sT1bWnCp",
"notes": "GS1 US company prefix certificate, issued 2024.",
"review_status": "pending",
"strength": "medium"
},
"file_url": "https://acme.example/.well-known/closient-verification.txt",
"message": "Domain ownership verified via the .well-known file.",
"outcome": "proof_recorded",
"token": "closient-verify=3f9c1a7e5b2d4c6a8e0f1b3d5c7a9e1f"
}{
"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"
}{
"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"
}Check the brand domain's .well-known file
Fetches the verification file URL named in the verification status response and compares its contents with the claim token. A match records a domain-control proof for the reviewer; it does not verify the claim. Returns 409 when HTTP verification is not enabled on this deployment; use the DNS check instead. Requires the organization.contribute_organization permission on the membership owning the GTIN. Rate-limited per user and per organization; over the limit returns 429.
curl --request POST \
--url https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check', 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/http-check",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/http-check"
req, _ := http.NewRequest("POST", 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.post("https://www.closient.com/products/api/v1/products/{gtin}/verification/http-check")
.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-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"claim_verification_status": "unverified",
"evidence": {
"badge": "pending",
"created": "2026-09-29T14:03:11Z",
"evidence_type": "domain_match",
"has_file": true,
"id": "2N4kq7ZxYQ8vR3sT1bWnCp",
"notes": "GS1 US company prefix certificate, issued 2024.",
"review_status": "pending",
"strength": "medium"
},
"file_url": "https://acme.example/.well-known/closient-verification.txt",
"message": "Domain ownership verified via the .well-known file.",
"outcome": "proof_recorded",
"token": "closient-verify=3f9c1a7e5b2d4c6a8e0f1b3d5c7a9e1f"
}{
"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"
}{
"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
Result of fetching the brand domain's .well-known file for the claim token.
proof_recorded means the file held the token and a domain-control proof was recorded for the reviewer. It does not change the claim's status. destination_refused means the file was not fetched: the domain resolves to an address that is not public, or the server answered with a redirect, which is never followed.
proof_recorded, no_domain, no_file, token_mismatch, fetch_error, destination_refused What happened and, on a miss, what to fix.
URL that was fetched; empty if the brand has no domain.
The token the file must contain.
The recorded proof when outcome is proof_recorded.
Show child attributes
Show child attributes
{
"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"
}
The claim's status after the check, which a domain check never changes.
unverified, prefix_matched, verified, disputed, rejected