curl --request GET \
--url https://www.closient.com/resolver/api/v1/public/gs1/parseimport requests
url = "https://www.closient.com/resolver/api/v1/public/gs1/parse"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.closient.com/resolver/api/v1/public/gs1/parse', 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/parse",
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/parse"
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/parse")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/public/gs1/parse")
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{
"ai_map": {
"10": "LOT1",
"17": "261231",
"01": "09506000164908"
},
"canonical_path": "/01/09506000164908/10/LOT1",
"data_attributes": [
{
"code": "17",
"name": "Expiration date",
"value": "261231"
}
],
"host": "id.gs1.org",
"is_conformant": true,
"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"
}Parse a GS1 Digital Link URI into its Application Identifiers
Decompose a URI into its primary key, qualifiers and data attributes, plus a flat ai_map for callers that just want a lookup table.
Backed by the same engine as /validate; use this when you want the structure and /validate when you want the reasons.
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/parseimport requests
url = "https://www.closient.com/resolver/api/v1/public/gs1/parse"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.closient.com/resolver/api/v1/public/gs1/parse', 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/parse",
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/parse"
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/parse")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/public/gs1/parse")
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{
"ai_map": {
"10": "LOT1",
"17": "261231",
"01": "09506000164908"
},
"canonical_path": "/01/09506000164908/10/LOT1",
"data_attributes": [
{
"code": "17",
"name": "Expiration date",
"value": "261231"
}
],
"host": "id.gs1.org",
"is_conformant": true,
"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 GS1 Digital Link URI to decompose. Example: https://id.gs1.org/01/09506000164908/10/LOT1?17=261231
1 - 4096Response
OK
Structured decomposition of a URI, without the conformance grading.
The same engine backs this and /validate; this is the projection for
callers who want "what AIs are in here" and do not need the issue list.
The input URI, echoed back unchanged.
Whether the URI is spec-conformant. Call /validate for the reasons.
URI scheme.
"https"
URI host.
"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.
Show child attributes
Show child attributes
Data attributes found on the query string.
Show child attributes
Show child attributes
Flat {ai_code: value} map of every AI found, for callers that want one lookup table.
Show child attributes
Show child attributes
The spec-canonical path for this identifier set.