curl --request PATCH \
--url https://www.closient.com/sustainability/api/v1/recyclability/{record_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"recyclability_percentage": 60,
"status": "CHECK_LOCALLY"
}
'import requests
url = "https://www.closient.com/sustainability/api/v1/recyclability/{record_id}"
payload = {
"recyclability_percentage": 60,
"status": "CHECK_LOCALLY"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({recyclability_percentage: 60, status: 'CHECK_LOCALLY'})
};
fetch('https://www.closient.com/sustainability/api/v1/recyclability/{record_id}', 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/{record_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'recyclability_percentage' => 60,
'status' => 'CHECK_LOCALLY'
]),
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/{record_id}"
payload := strings.NewReader("{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://www.closient.com/sustainability/api/v1/recyclability/{record_id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/sustainability/api/v1/recyclability/{record_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\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"
}Update recyclability assessment
Partial update: only the keys in the body are applied. The packaging element cannot change; delete and recreate to move it. A null clears a nullable field; an empty body is a 422. Requires CONTRIBUTE on the owning organization.
curl --request PATCH \
--url https://www.closient.com/sustainability/api/v1/recyclability/{record_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"recyclability_percentage": 60,
"status": "CHECK_LOCALLY"
}
'import requests
url = "https://www.closient.com/sustainability/api/v1/recyclability/{record_id}"
payload = {
"recyclability_percentage": 60,
"status": "CHECK_LOCALLY"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({recyclability_percentage: 60, status: 'CHECK_LOCALLY'})
};
fetch('https://www.closient.com/sustainability/api/v1/recyclability/{record_id}', 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/{record_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'recyclability_percentage' => 60,
'status' => 'CHECK_LOCALLY'
]),
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/{record_id}"
payload := strings.NewReader("{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://www.closient.com/sustainability/api/v1/recyclability/{record_id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/sustainability/api/v1/recyclability/{record_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recyclability_percentage\": 60,\n \"status\": \"CHECK_LOCALLY\"\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
Path Parameters
Id of the recyclability assessment.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Body
Payload for PATCH /recyclability/{id}. Only the keys present are applied; the packaging cannot change.
Consumer-facing status. Null clears it.
WIDELY_RECYCLABLE, CHECK_LOCALLY, STORE_DROP_OFF, SPECIAL_HANDLING, NOT_RECYCLABLE Short code. Null clears it.
50^[^\x00]{0,50}$Share that is recyclable, 0-100. Null clears it.
0 <= x <= 100Free-text description. Null clears it.
1000^[^\x00]{0,1000}$Conditions for recyclability. Null clears it.
1000^[^\x00]{0,1000}$How to recycle it. Null clears it.
1000^[^\x00]{0,1000}$Link (http or https). Null clears it.
200^([Hh][Tt][Tt][Pp][Ss]?://[^\x00-\x20\x7f/?#][^\x00-\x20\x7f]{0,191})?$Standard. Null clears it.
EN_13430, ISO_14021, HOW2RECYCLE, OPRL, RECYCLASS, CUSTOM Date of the assessment. Null clears it.
Who performed the assessment. Null clears it.
200^[^\x00]{0,200}$Date the assessment expires. Null clears it.
Regions the assessment applies to. Null clears it.
200^[^\x00]{0,200}$Recycling stream. Null clears it.
PAPER_CARDBOARD, PLASTIC_PET, PLASTIC_HDPE, GLASS, METAL_ALUMINUM, METAL_STEEL, ORGANIC_COMPOSTABLE, ELECTRONICS, HAZARDOUS, MIXED_OTHER, NOT_RECYCLABLE Response
OK
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.