curl --request GET \
--url https://www.closient.com/resolver/api/v1/public/gs1/validateimport requests
url = "https://www.closient.com/resolver/api/v1/public/gs1/validate"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.closient.com/resolver/api/v1/public/gs1/validate', 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/resolver/api/v1/public/gs1/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/resolver/api/v1/public/gs1/validate"
req, _ := http.NewRequest("GET", url, nil)
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/resolver/api/v1/public/gs1/validate")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/public/gs1/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"canonical_path": "/01/09506000164908/10/LOT1",
"data_attributes": [
{
"code": "17",
"name": "Expiration date",
"value": "261231"
}
],
"host": "id.gs1.org",
"is_conformant": true,
"issues": [],
"primary": {
"code": "01",
"description": "Global Trade Item Number",
"kind": "primary",
"name": "GTIN",
"value": "09506000164908"
},
"qualifiers": [
{
"code": "10",
"description": "Batch or lot number",
"kind": "qualifier",
"name": "Batch/Lot",
"value": "LOT1"
}
],
"scheme": "https",
"uri": "https://id.gs1.org/01/09506000164908/10/LOT1?17=261231"
}{
"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"
}Validate a GS1 Digital Link URI against the specification
Grade a candidate URI for GS1 Digital Link conformance and return every issue found, each with a stable code, a severity, and a human-readable message.
A non-conformant URI is a 200 with is_conformant: false — that is the answer to a validation question, not a failed request.
Keyless — no API key, no signup. IP-throttled at 300 requests/minute and cached at the edge for 24h, so repeat calls for the same input do not reach origin. Over-rate callers get a 429 with a Retry-After header and a retry_after field — it never silently degrades or returns a wrong answer under load.
curl --request GET \
--url https://www.closient.com/resolver/api/v1/public/gs1/validateimport requests
url = "https://www.closient.com/resolver/api/v1/public/gs1/validate"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.closient.com/resolver/api/v1/public/gs1/validate', 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/resolver/api/v1/public/gs1/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/resolver/api/v1/public/gs1/validate"
req, _ := http.NewRequest("GET", url, nil)
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/resolver/api/v1/public/gs1/validate")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/public/gs1/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"canonical_path": "/01/09506000164908/10/LOT1",
"data_attributes": [
{
"code": "17",
"name": "Expiration date",
"value": "261231"
}
],
"host": "id.gs1.org",
"is_conformant": true,
"issues": [],
"primary": {
"code": "01",
"description": "Global Trade Item Number",
"kind": "primary",
"name": "GTIN",
"value": "09506000164908"
},
"qualifiers": [
{
"code": "10",
"description": "Batch or lot number",
"kind": "qualifier",
"name": "Batch/Lot",
"value": "LOT1"
}
],
"scheme": "https",
"uri": "https://id.gs1.org/01/09506000164908/10/LOT1?17=261231"
}{
"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"
}Query Parameters
The candidate GS1 Digital Link URI to grade. Example: https://id.gs1.org/01/09506000164908/10/LOT1?17=261231
1 - 4096Response
OK
Full conformance report for a candidate Digital Link URI.
The input URI, echoed back unchanged.
True when the URI carries no error-severity issues. Warnings do not affect this flag.
Every issue found, errors and warnings together, in the order the validator produced them.
Show child attributes
Show child attributes
URI scheme, or null when the input could not be split.
"https"
URI host, or null when the input could not be split.
"id.gs1.org"
The primary identifier AI, or null when none was recognised.
Show child attributes
Show child attributes
{ "code": "01", "description": "Global Trade Item Number — the primary key identifying the trade item.", "kind": "primary", "name": "GTIN", "value": "09506000164908" }
Qualifier AIs found in the path, in path order.
Show child attributes
Show child attributes
Data attributes found on the query string.
Show child attributes
Show child attributes
The spec-canonical path for this identifier set, or null when no primary AI was recognised.