curl --request PATCH \
--url https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123"
}
'import requests
url = "https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings"
payload = {
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123"
}
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({
designated_contact_email: 'traceability@example.com',
designated_contact_name: 'Jane Doe',
designated_contact_phone: '+1 503 555 0123'
})
};
fetch('https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings', 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/compliance/api/v1/organizations/{organization_id}/fsma-settings",
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([
'designated_contact_email' => 'traceability@example.com',
'designated_contact_name' => 'Jane Doe',
'designated_contact_phone' => '+1 503 555 0123'
]),
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/compliance/api/v1/organizations/{organization_id}/fsma-settings"
payload := strings.NewReader("{\n \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\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/compliance/api/v1/organizations/{organization_id}/fsma-settings")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings")
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 \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\n}"
response = http.request(request)
puts response.read_body{
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123",
"tlc_pattern": "{prefix}-{date}-{sequence:04d}",
"tlc_prefix": "SALSA"
}{
"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 FSMA settings
Change the organization’s FSMA 204 designated contact or Traceability Lot Code settings. Send only the fields you are changing; null is refused with 422. A new contact reaches the traceability plan the next time a plan version is generated. Requires the Owner, Manager or Editor role; a read-only key is refused with 403.
curl --request PATCH \
--url https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123"
}
'import requests
url = "https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings"
payload = {
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123"
}
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({
designated_contact_email: 'traceability@example.com',
designated_contact_name: 'Jane Doe',
designated_contact_phone: '+1 503 555 0123'
})
};
fetch('https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings', 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/compliance/api/v1/organizations/{organization_id}/fsma-settings",
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([
'designated_contact_email' => 'traceability@example.com',
'designated_contact_name' => 'Jane Doe',
'designated_contact_phone' => '+1 503 555 0123'
]),
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/compliance/api/v1/organizations/{organization_id}/fsma-settings"
payload := strings.NewReader("{\n \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\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/compliance/api/v1/organizations/{organization_id}/fsma-settings")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/compliance/api/v1/organizations/{organization_id}/fsma-settings")
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 \"designated_contact_email\": \"traceability@example.com\",\n \"designated_contact_name\": \"Jane Doe\",\n \"designated_contact_phone\": \"+1 503 555 0123\"\n}"
response = http.request(request)
puts response.read_body{
"designated_contact_email": "traceability@example.com",
"designated_contact_name": "Jane Doe",
"designated_contact_phone": "+1 503 555 0123",
"tlc_pattern": "{prefix}-{date}-{sequence:04d}",
"tlc_prefix": "SALSA"
}{
"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
Identifier of the organization.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Body
The FSMA 204 settings to change. Send only the fields you are changing.
Name of the designated contact, up to 255 characters; empty clears it.
255^[^\x00]{0,255}$Email address of the designated contact, up to 254 characters; empty clears it. One that is not a valid address is refused with 422.
254^[^\x00]{0,254}$Phone number of the designated contact, up to 40 characters; empty clears it.
40^[^\x00]{0,40}$Short token that starts each Traceability Lot Code, up to 16 characters, such as SALSA. Empty uses the organization's GLN instead.
16^[^\x00]{0,16}$Template for assigned Traceability Lot Codes, up to 128 characters. Use only {prefix}, {date}, {sequence} and {gtin}, with Python format specs such as {sequence:04d}; {sequence} is required because it keeps each code unique. A pattern that breaks these rules is refused with 422. Empty restores the default {prefix}-{date}-{sequence:04d}.
128^[^\x00]{0,128}$Response
OK
The organization's FSMA 204 designated contact and Traceability Lot Code settings.
Name of the person the FDA contacts for traceability records within 24 hours, as FSMA 204 requires on every traceability plan; empty when not set.
Email address of the designated contact; empty when not set.
Phone number of the designated contact; empty when not set.
Short token that starts each Traceability Lot Code the organization assigns. Empty means the organization's GLN is used instead.
Template for the Traceability Lot Codes the organization assigns to food received from an exempt supplier without one. Tokens: {prefix}, {date} (YYYYMMDD), {sequence} and {gtin}.