curl --request POST \
--url https://www.closient.com/sustainability/api/v1/recyclability \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE"
}
'import requests
url = "https://www.closient.com/sustainability/api/v1/recyclability"
payload = {
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assessment_date: '2026-03-01',
assessment_standard: 'ISO_14021',
packaging_id: '8Jw2nQxK5vTbR3mYcLdZaE',
recyclability_code: 'PET-1',
recyclability_percentage: 95,
recycling_instructions: 'Place in curbside recycling bin.',
recycling_stream: 'PLASTIC_PET',
status: 'WIDELY_RECYCLABLE'
})
};
fetch('https://www.closient.com/sustainability/api/v1/recyclability', 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/sustainability/api/v1/recyclability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assessment_date' => '2026-03-01',
'assessment_standard' => 'ISO_14021',
'packaging_id' => '8Jw2nQxK5vTbR3mYcLdZaE',
'recyclability_code' => 'PET-1',
'recyclability_percentage' => 95,
'recycling_instructions' => 'Place in curbside recycling bin.',
'recycling_stream' => 'PLASTIC_PET',
'status' => 'WIDELY_RECYCLABLE'
]),
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/sustainability/api/v1/recyclability"
payload := strings.NewReader("{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://www.closient.com/sustainability/api/v1/recyclability")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/sustainability/api/v1/recyclability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}"
response = http.request(request)
puts response.read_body{
"assessed_by": "RecycleSmart Labs",
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"conditions": "Rinse and remove cap before recycling.",
"created": "2026-09-30T09:00:00Z",
"description": "PET plastic, widely recyclable.",
"gtin": "00850012345688",
"id": "F5n5NdW6dTbvPYkgnLNjte",
"modified": "2026-09-30T09:00:00Z",
"organization_id": "9fHkqR2aXcVbNmLpQwErTy",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_instructions_url": "https://example.com/recycle",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE",
"valid_regions": "US, CA, EU",
"valid_until": "2027-03-01"
}{
"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"
}{
"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 recyclability assessment
Record the recyclability assessment of a packaging element. 409 if the element already has one. Requires CONTRIBUTE on the organization. 404 if the packaging element isn’t one of the organization’s or a referenced id isn’t the organization’s. Nothing is created on error.
curl --request POST \
--url https://www.closient.com/sustainability/api/v1/recyclability \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE"
}
'import requests
url = "https://www.closient.com/sustainability/api/v1/recyclability"
payload = {
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
assessment_date: '2026-03-01',
assessment_standard: 'ISO_14021',
packaging_id: '8Jw2nQxK5vTbR3mYcLdZaE',
recyclability_code: 'PET-1',
recyclability_percentage: 95,
recycling_instructions: 'Place in curbside recycling bin.',
recycling_stream: 'PLASTIC_PET',
status: 'WIDELY_RECYCLABLE'
})
};
fetch('https://www.closient.com/sustainability/api/v1/recyclability', 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/sustainability/api/v1/recyclability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'assessment_date' => '2026-03-01',
'assessment_standard' => 'ISO_14021',
'packaging_id' => '8Jw2nQxK5vTbR3mYcLdZaE',
'recyclability_code' => 'PET-1',
'recyclability_percentage' => 95,
'recycling_instructions' => 'Place in curbside recycling bin.',
'recycling_stream' => 'PLASTIC_PET',
'status' => 'WIDELY_RECYCLABLE'
]),
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/sustainability/api/v1/recyclability"
payload := strings.NewReader("{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://www.closient.com/sustainability/api/v1/recyclability")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/sustainability/api/v1/recyclability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assessment_date\": \"2026-03-01\",\n \"assessment_standard\": \"ISO_14021\",\n \"packaging_id\": \"8Jw2nQxK5vTbR3mYcLdZaE\",\n \"recyclability_code\": \"PET-1\",\n \"recyclability_percentage\": 95,\n \"recycling_instructions\": \"Place in curbside recycling bin.\",\n \"recycling_stream\": \"PLASTIC_PET\",\n \"status\": \"WIDELY_RECYCLABLE\"\n}"
response = http.request(request)
puts response.read_body{
"assessed_by": "RecycleSmart Labs",
"assessment_date": "2026-03-01",
"assessment_standard": "ISO_14021",
"conditions": "Rinse and remove cap before recycling.",
"created": "2026-09-30T09:00:00Z",
"description": "PET plastic, widely recyclable.",
"gtin": "00850012345688",
"id": "F5n5NdW6dTbvPYkgnLNjte",
"modified": "2026-09-30T09:00:00Z",
"organization_id": "9fHkqR2aXcVbNmLpQwErTy",
"packaging_id": "8Jw2nQxK5vTbR3mYcLdZaE",
"recyclability_code": "PET-1",
"recyclability_percentage": 95,
"recycling_instructions": "Place in curbside recycling bin.",
"recycling_instructions_url": "https://example.com/recycle",
"recycling_stream": "PLASTIC_PET",
"status": "WIDELY_RECYCLABLE",
"valid_regions": "US, CA, EU",
"valid_until": "2027-03-01"
}{
"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"
}{
"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
Body
Payload for POST /recyclability. One assessment per packaging element.
Packaging element to assess. Must belong to one of the caller's organization's products, else 404. 409 if it already has an assessment.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Consumer-facing status (How2Recycle-aligned).
WIDELY_RECYCLABLE, CHECK_LOCALLY, STORE_DROP_OFF, SPECIAL_HANDLING, NOT_RECYCLABLE Short code for the material or scheme.
50^[^\x00]{0,50}$Share that is recyclable, 0-100.
0 <= x <= 100Free-text description.
1000^[^\x00]{0,1000}$Conditions for recyclability.
1000^[^\x00]{0,1000}$How to recycle it.
1000^[^\x00]{0,1000}$Link to recycling instructions (http or https).
200^([Hh][Tt][Tt][Pp][Ss]?://[^\x00-\x20\x7f/?#][^\x00-\x20\x7f]{0,191})?$Standard the assessment follows.
EN_13430, ISO_14021, HOW2RECYCLE, OPRL, RECYCLASS, CUSTOM Date of the assessment.
Who performed the assessment.
200^[^\x00]{0,200}$Date the assessment expires.
Regions the assessment applies to, for example US, CA.
200^[^\x00]{0,200}$Recycling stream the element belongs to.
PAPER_CARDBOARD, PLASTIC_PET, PLASTIC_HDPE, GLASS, METAL_ALUMINUM, METAL_STEEL, ORGANIC_COMPOSTABLE, ELECTRONICS, HAZARDOUS, MIXED_OTHER, NOT_RECYCLABLE Response
Created
The recyclability assessment of one packaging element.
URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$The organization that owns the product.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$The product's GTIN, normalized to GTIN-14.
Server-side ISO 8601 timestamp of creation (UTC).
Server-side ISO 8601 timestamp of last modification (UTC).
The packaging element this assessment applies to.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Consumer-facing status. Empty string when unset.
Short code for the material or scheme. Empty when unset.
Share that is recyclable, 0-100. Null when unset.
Free-text description. Empty when unset.
Conditions for recyclability. Empty when unset.
How to recycle it. Empty when unset.
Link to recycling instructions. Empty when unset.
Standard the assessment follows. Empty when unset.
Date of the assessment. Null when unset.
Who performed the assessment. Empty when unset.
Date the assessment expires. Null when unset.
Regions the assessment applies to. Empty when unset.
Recycling stream the element belongs to. Empty when unset.