curl --request GET \
--url https://www.closient.com/products/api/v1/products/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/"
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/', 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/",
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/"
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/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/")
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{
"data": [
{
"brand": "Acme Snacks",
"confidence_score": 0.85,
"country_of_origin": "US",
"data_source": "crowd_sourced",
"date_label_compliance": {
"ca_ab660": "compliant",
"federal": "unknown",
"notes": []
},
"depth_uom": "",
"description": "Premium trail mix with almonds, cashews, and dried cranberries.",
"field_confidence": {
"brand": 0.9,
"product_name": 0.95
},
"gpc_brick_code": "",
"gpc_class_code": "",
"gpc_family_code": "",
"gpc_segment_code": "",
"gross_weight_uom": "",
"gtin": "00012345678905",
"height_uom": "",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"is_claimed": false,
"length_uom": "",
"manufacturer": "Acme Foods Inc.",
"metadata": {
"order_id": "6735"
},
"net_content": "340g",
"net_content_uom": "GRM",
"net_content_value": 340,
"net_weight_uom": "",
"product_name": "Acme Trail Mix 12oz",
"sensitivities": [
{
"citations": [
{
"note": "Aged cheeses are very high histamine.",
"source": "SIGHI"
}
],
"name": "Histamine",
"reasoning": "Contains aged cheddar cheese, a major histamine source.",
"severity": "HIGH",
"slug": "histamine",
"source": "llm_inferred",
"verified": false
}
],
"width_uom": ""
}
],
"pagination": {
"has_next": true,
"has_previous": false,
"page": 1,
"page_size": 25,
"total_count": 342,
"total_pages": 14
}
}{
"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"
}List claimed products
List all products claimed by a specific organization. Requires the organization_id query parameter. A caller outside the organization sees only the products whose ownership claim is not unverified, disputed or rejected. Supports ?metadata[key]=value exact-match filtering (C-2734). Supports dietary-sensitivity filtering via ?avoid_sensitivity=histamine,sulfites&min_severity=MODERATE — products flagged with ANY listed sensitivity at or above min_severity are excluded.
curl --request GET \
--url https://www.closient.com/products/api/v1/products/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/products/api/v1/products/"
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/', 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/",
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/"
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/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/products/api/v1/products/")
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{
"data": [
{
"brand": "Acme Snacks",
"confidence_score": 0.85,
"country_of_origin": "US",
"data_source": "crowd_sourced",
"date_label_compliance": {
"ca_ab660": "compliant",
"federal": "unknown",
"notes": []
},
"depth_uom": "",
"description": "Premium trail mix with almonds, cashews, and dried cranberries.",
"field_confidence": {
"brand": 0.9,
"product_name": 0.95
},
"gpc_brick_code": "",
"gpc_class_code": "",
"gpc_family_code": "",
"gpc_segment_code": "",
"gross_weight_uom": "",
"gtin": "00012345678905",
"height_uom": "",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"image_url": "https://cdn.closient.com/products/00012345678905/hero.jpg",
"is_claimed": false,
"length_uom": "",
"manufacturer": "Acme Foods Inc.",
"metadata": {
"order_id": "6735"
},
"net_content": "340g",
"net_content_uom": "GRM",
"net_content_value": 340,
"net_weight_uom": "",
"product_name": "Acme Trail Mix 12oz",
"sensitivities": [
{
"citations": [
{
"note": "Aged cheeses are very high histamine.",
"source": "SIGHI"
}
],
"name": "Histamine",
"reasoning": "Contains aged cheddar cheese, a major histamine source.",
"severity": "HIGH",
"slug": "histamine",
"source": "llm_inferred",
"verified": false
}
],
"width_uom": ""
}
],
"pagination": {
"has_next": true,
"has_previous": false,
"page": 1,
"page_size": 25,
"total_count": 342,
"total_pages": 14
}
}{
"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
Query Parameters
UUID of the Organization whose claimed products should be listed.
^[^\x00]{0,}$Include LOW-severity dietary-sensitivity flags in each product's sensitivities list. Defaults to false; HIGH and MODERATE flags are always included.
Comma-separated sensitivity slugs to filter out (e.g. histamine,sulfites). Products flagged with ANY of these at or above min_severity are excluded from the results. Empty (default) applies no sensitivity filter.
^[^\x00]{0,}$Severity threshold for avoid_sensitivity filtering: a product is excluded only when it carries a listed sensitivity at this band or higher. One of HIGH, MODERATE, LOW; defaults to MODERATE (LOW flags do not exclude by default). Ignored when avoid_sensitivity is empty. An unrecognized value returns 422.
^[^\x00]{0,}$Page number (1-indexed).
x >= 1Number of items per page (max 100).
1 <= x <= 100Response
OK
Items on the current page, each conforming to the endpoint's item schema. Empty when the result set is empty or page is past the end.
Show child attributes
Show child attributes
Pagination envelope describing position within the full result set.
Show child attributes
Show child attributes
{
"has_next": true,
"has_previous": false,
"page": 1,
"page_size": 25,
"total_count": 342,
"total_pages": 14
}