curl --request PUT \
--url https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"label_format": "US_FDA",
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}
'import requests
url = "https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition"
payload = {
"label_format": "US_FDA",
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label_format: 'US_FDA',
serving_size: '1 cup (240ml)',
serving_size_g: 240,
servings_per_container: 8
})
};
fetch('https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition', 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/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'label_format' => 'US_FDA',
'serving_size' => '1 cup (240ml)',
'serving_size_g' => 240,
'servings_per_container' => 8
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition"
payload := strings.NewReader("{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}"
response = http.request(request)
puts response.read_body{
"label_format": "US_FDA",
"nutrients": [],
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}{
"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"
}Create or replace product nutrition header
Create the nutrition-facts header for a product, or update it in place when one already exists (the header is one-per-product). Nutrient rows are managed separately via the /nutrients endpoints. Requires the organization.contribute_organization permission on the membership.
curl --request PUT \
--url https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"label_format": "US_FDA",
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}
'import requests
url = "https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition"
payload = {
"label_format": "US_FDA",
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label_format: 'US_FDA',
serving_size: '1 cup (240ml)',
serving_size_g: 240,
servings_per_container: 8
})
};
fetch('https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition', 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/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'label_format' => 'US_FDA',
'serving_size' => '1 cup (240ml)',
'serving_size_g' => 240,
'servings_per_container' => 8
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition"
payload := strings.NewReader("{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/dashboard/api/v1/trade-items/{organization_id}/{gtin}/nutrition")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label_format\": \"US_FDA\",\n \"serving_size\": \"1 cup (240ml)\",\n \"serving_size_g\": 240,\n \"servings_per_container\": 8\n}"
response = http.request(request)
puts response.read_body{
"label_format": "US_FDA",
"nutrients": [],
"serving_size": "1 cup (240ml)",
"serving_size_g": 240,
"servings_per_container": 8
}{
"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
UUID of the organization that owns the product.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$GTIN-8/12/13/14 of the target product. Normalized to GTIN-14 by zero-padding before lookup.
^\d{8,14}$Body
Request body for creating or replacing a product's nutrition header.
Free-text serving size as printed on the label (e.g. 1 cup (240ml)).
100"1 cup (240ml)"
Numeric serving size expressed in grams. Null when the label uses non-mass units (e.g. mL, count).
x >= 0240
Number of declared servings per container. May be fractional (e.g. 2.5).
x >= 08
Regulatory format the panel is laid out for. Defaults to US_FDA.
US_FDA, EU, CA_CFIA, AU_NZ, UK "US_FDA"
Response
OK
Structured nutrition-facts panel for a product, including nutrient row ids.
Free-text serving size as printed on the label (e.g. 1 cup (240ml)).
Regulatory format the panel is laid out for.
US_FDA, EU, CA_CFIA, AU_NZ, UK Per-serving nutrient rows on the panel, in label order. Empty list when none recorded.
Show child attributes
Show child attributes
Numeric serving size expressed in grams. Null when the label uses non-mass units.
x >= 0Number of declared servings per container. May be fractional.
x >= 0