curl --request POST \
--url https://www.closient.com/brands/api/v1/brands/{id}/glns \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"gln": "0614141000005",
"gln_type": "physical",
"is_primary": true,
"label": "Head office"
}
'import requests
url = "https://www.closient.com/brands/api/v1/brands/{id}/glns"
payload = {
"gln": "0614141000005",
"gln_type": "physical",
"is_primary": True,
"label": "Head office"
}
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({
gln: '0614141000005',
gln_type: 'physical',
is_primary: true,
label: 'Head office'
})
};
fetch('https://www.closient.com/brands/api/v1/brands/{id}/glns', 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/brands/api/v1/brands/{id}/glns",
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([
'gln' => '0614141000005',
'gln_type' => 'physical',
'is_primary' => true,
'label' => 'Head office'
]),
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/brands/api/v1/brands/{id}/glns"
payload := strings.NewReader("{\n \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\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/brands/api/v1/brands/{id}/glns")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/brands/api/v1/brands/{id}/glns")
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 \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\n}"
response = http.request(request)
puts response.read_body{
"ai_code": "414",
"created": "2026-06-01T09:00:00Z",
"gln": "0614141000005",
"gln_type": "physical",
"id": "nP4sKd9QwE2rTy6UvBx3Zc",
"is_primary": true,
"label": "Head office"
}{
"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"
}Link a GLN to a brand
Link a GLN to the brand, registering it in Closient’s GLN registry if it is new there. The first GLN a brand gets becomes its primary. Requires the Owner, Manager or Editor role on the organization that owns the brand; a read-only key is refused with 403. A GLN the brand already has, or one registered under a different classification, is refused with 409.
curl --request POST \
--url https://www.closient.com/brands/api/v1/brands/{id}/glns \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"gln": "0614141000005",
"gln_type": "physical",
"is_primary": true,
"label": "Head office"
}
'import requests
url = "https://www.closient.com/brands/api/v1/brands/{id}/glns"
payload = {
"gln": "0614141000005",
"gln_type": "physical",
"is_primary": True,
"label": "Head office"
}
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({
gln: '0614141000005',
gln_type: 'physical',
is_primary: true,
label: 'Head office'
})
};
fetch('https://www.closient.com/brands/api/v1/brands/{id}/glns', 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/brands/api/v1/brands/{id}/glns",
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([
'gln' => '0614141000005',
'gln_type' => 'physical',
'is_primary' => true,
'label' => 'Head office'
]),
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/brands/api/v1/brands/{id}/glns"
payload := strings.NewReader("{\n \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\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/brands/api/v1/brands/{id}/glns")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/brands/api/v1/brands/{id}/glns")
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 \"gln\": \"0614141000005\",\n \"gln_type\": \"physical\",\n \"is_primary\": true,\n \"label\": \"Head office\"\n}"
response = http.request(request)
puts response.read_body{
"ai_code": "414",
"created": "2026-06-01T09:00:00Z",
"gln": "0614141000005",
"gln_type": "physical",
"id": "nP4sKd9QwE2rTy6UvBx3Zc",
"is_primary": true,
"label": "Head office"
}{
"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
URL-safe brand identifier.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Body
Payload to link a GLN to a brand.
The 13-digit Global Location Number, including its GS1 check digit. A wrong check digit is refused with 422.
13^[0-9]{13}$GS1 classification: physical (AI 414), invoicing (AI 415) or legal (AI 417). A GLN already registered on Closient under a different classification is refused with 409.
physical, invoicing, legal Optional human-readable description, such as 'Head office'.
255^[^\x00]{0,255}$Make this the brand's primary GLN, demoting the current one. The first GLN a brand gets is primary whatever this says.
Response
Created
One GLN linked to a brand.
Identifier of this brand-to-GLN link (not the GLN itself).
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$The 13-digit Global Location Number.
GS1 classification of the GLN: physical (physical location, AI 414), invoicing (invoicing party, AI 415) or legal (legal entity, AI 417). Held by the GLN registry, so one GLN has one classification across Closient.
physical, invoicing, legal GS1 Application Identifier the classification maps to: 414, 415 or 417.
Optional human-readable description, such as 'Head office'.
Whether this is the brand's primary GLN. A brand has at most one.
ISO-8601 time the GLN was linked to the brand.