curl --request GET \
--url https://www.closient.com/products/api/v1/products/{gtin}/content \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/content"
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}/content', 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}/content",
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}/content"
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}/content")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/{gtin}/content")
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{
"certifications": [],
"claims": [],
"images": [
{
"created": "2025-07-01T14:00:00Z",
"description": "",
"height": 1200,
"id": 1,
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"is_primary": true,
"priority": 0,
"thumbnail_url": "https://cdn.closient.com/products/00012345678905/hero_thumb.jpg",
"title": "Front of package",
"width": 1200
}
],
"ingredients": [
{
"id": 1,
"is_major_allergen": true,
"may_contain": false,
"name": "Almonds",
"notes": "",
"origin": "US",
"priority": 0
}
],
"recalls": []
}{
"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 product content
Retrieve every content sub-resource for a product in a single response: images, ingredients, nutrition facts, certifications, claims, recalls, circularity score, and FTL designation. Use this on resolver pages to avoid five round-trips; use the per-resource endpoints when only a slice is needed.
curl --request GET \
--url https://www.closient.com/products/api/v1/products/{gtin}/content \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/{gtin}/content"
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}/content', 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}/content",
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}/content"
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}/content")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/{gtin}/content")
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{
"certifications": [],
"claims": [],
"images": [
{
"created": "2025-07-01T14:00:00Z",
"description": "",
"height": 1200,
"id": 1,
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"is_primary": true,
"priority": 0,
"thumbnail_url": "https://cdn.closient.com/products/00012345678905/hero_thumb.jpg",
"title": "Front of package",
"width": 1200
}
],
"ingredients": [
{
"id": 1,
"is_major_allergen": true,
"may_contain": false,
"name": "Almonds",
"notes": "",
"origin": "US",
"priority": 0
}
],
"recalls": []
}{
"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.
Response
OK
Aggregated content bundle for a product.
One-shot endpoint that gathers everything a resolver page needs:
images, ingredients, nutrition facts, certifications, claims,
recalls, circularity score, and FTL designation. Use the per-resource
sub-endpoints (/products/{gtin}/images, /products/{gtin}/ingredients,
etc.) when only a slice is needed.
All images attached to the product, ordered by priority. Empty list when none on file.
Show child attributes
Show child attributes
All ingredient rows for the product, ordered by priority (label order). Empty list when none on file.
Show child attributes
Show child attributes
All certifications assigned to the product (e.g. USDA Organic, Fair Trade). Empty list when none on file.
Show child attributes
Show child attributes
All product claims assigned to the product (e.g. Non-GMO, Vegan). Empty list when none on file.
Show child attributes
Show child attributes
Recall records linked to the product across FDA, FSIS, CPSC, and Health Canada. Empty list when no recalls are on file.
Show child attributes
Show child attributes
Structured nutrition-facts panel. Null when no panel has been recorded for the product.
Show child attributes
Show child attributes
{ "label_format": "US_FDA", "nutrients": [], "serving_size": "1 cup (240ml)", "serving_size_g": 240, "servings_per_container": 8 }
Sustainability circularity score for the product. Null when none has been computed.
Show child attributes
Show child attributes
{ "assessment_date": "2025-06-01", "durability_score": 8, "methodology": "EU Circular Economy Monitoring Framework", "overall_score": 7.5, "recyclability_score": 9, "repairability_score": 6, "reusability_score": 7 }
FSMA 204 Food Traceability List designation. Null when the product has not been evaluated for FTL coverage.
Show child attributes
Show child attributes
{ "contains_ftl_substance": true, "ftl_categories": [], "ftl_substance_categories": ["FRESH_HERBS"], "is_ftl": false }