curl --request GET \
--url https://www.closient.com/agent/api/v1/products/{gtin} \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/agent/api/v1/products/{gtin}"
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/agent/api/v1/products/{gtin}', 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/agent/api/v1/products/{gtin}",
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/agent/api/v1/products/{gtin}"
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/agent/api/v1/products/{gtin}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/agent/api/v1/products/{gtin}")
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{
"brand": "Acme Beverages",
"category": "Food, Beverages & Tobacco > Beverages > Milk",
"certifications": [
{
"issuing_body": "USDA",
"label": "USDA Organic",
"valid_from": "2024-01-01",
"valid_until": "2026-01-01",
"verification_status": "verified"
}
],
"claims": [
{
"label": "Vegan",
"source": "THIRD_PARTY_VERIFIED",
"valid": true
}
],
"country_of_origin": "US",
"description": "Creamy organic almond milk, unsweetened.",
"gtin": "00012345678905",
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"name": "Organic Almond Milk",
"net_content": "500ml",
"substances": [
{
"is_major_allergen": true,
"may_contain": false,
"name": "Almonds",
"percentage": 15,
"type": "FOOD_INGREDIENT"
}
]
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}Get full product detail by GTIN
Returns comprehensive product information including substance composition, certifications, and claims for a given GTIN. Accepts GTIN-8, GTIN-12, GTIN-13, or GTIN-14 formats.
curl --request GET \
--url https://www.closient.com/agent/api/v1/products/{gtin} \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/agent/api/v1/products/{gtin}"
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/agent/api/v1/products/{gtin}', 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/agent/api/v1/products/{gtin}",
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/agent/api/v1/products/{gtin}"
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/agent/api/v1/products/{gtin}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/agent/api/v1/products/{gtin}")
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{
"brand": "Acme Beverages",
"category": "Food, Beverages & Tobacco > Beverages > Milk",
"certifications": [
{
"issuing_body": "USDA",
"label": "USDA Organic",
"valid_from": "2024-01-01",
"valid_until": "2026-01-01",
"verification_status": "verified"
}
],
"claims": [
{
"label": "Vegan",
"source": "THIRD_PARTY_VERIFIED",
"valid": true
}
],
"country_of_origin": "US",
"description": "Creamy organic almond milk, unsweetened.",
"gtin": "00012345678905",
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"name": "Organic Almond Milk",
"net_content": "500ml",
"substances": [
{
"is_major_allergen": true,
"may_contain": false,
"name": "Almonds",
"percentage": 15,
"type": "FOOD_INGREDIENT"
}
]
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}Authorizations
Path Parameters
GTIN of the product to look up. Accepts GTIN-8, GTIN-12 (UPC-A), GTIN-13 (EAN-13), or GTIN-14; the service pads shorter forms to GTIN-14 internally before lookup.
8 - 14^\d{8}$|^\d{12,14}$Response
OK
Full product detail with substances, certifications, and claims.
Returned by GET /products/{gtin}. Heavier than :class:ProductOut
— includes typed certification / claim / substance detail rather than
label-only summaries, so an assistant can reason about validity,
sources, and ingredient composition without a follow-up call.
GTIN-14 identifier (always 14 digits, zero-padded).
14^\d{14}$Product name.
Brand name.
Marketing description of the product. May be empty when no description is on file; never null. Holds HTML and is sanitized on the way out against an allow-list (paragraphs, line breaks, inline emphasis, lists, and links restricted to http, https and mailto); script, style, event handlers and javascript:/data: URLs are removed. Stored data is never modified.
Absolute HTTPS URL of the product image. Empty string when not on file.
Google Product Taxonomy full category path. Empty string when not assigned.
Net content with unit (e.g. '500ml', '340g'). Empty string when unknown.
ISO 3166-1 alpha-2 country code (e.g. 'US', 'IT', 'JP'). Empty string when unknown.
Full certification details including validity, issuing body, and verification status. Empty list when no certifications are on file.
Show child attributes
Show child attributes
Product claims with source and validity. Empty list when no claims are on file.
Show child attributes
Show child attributes
Substance composition with percentages and allergen flags, ordered by the underlying priority (declared order on the package). Empty list when no substance data is on file.
Show child attributes
Show child attributes