curl --request POST \
--url https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"relation_type": "PROVIDER",
"service_type": "broadband"
}
'import requests
url = "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations"
payload = {
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"relation_type": "PROVIDER",
"service_type": "broadband"
}
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({
external_url: 'https://acmenet.com/account',
gsrn: '952101530000000011',
relation_type: 'PROVIDER',
service_type: 'broadband'
})
};
fetch('https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations', 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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations",
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([
'external_url' => 'https://acmenet.com/account',
'gsrn' => '952101530000000011',
'relation_type' => 'PROVIDER',
'service_type' => 'broadband'
]),
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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations"
payload := strings.NewReader("{\n \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations")
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 \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\n}"
response = http.request(request)
puts response.read_body{
"created": "2026-06-01T09:00:00Z",
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"id": "a1b2c3d4e5f6",
"modified": "2026-06-19T14:30:00Z",
"organization_id": "b2c3d4e5-f678-9012-abcd-ef2345678901",
"relation_type": "PROVIDER",
"service_type": "broadband"
}{
"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 link-type service relation
Create a GSRN-resolved service relation for the organization. The GSRN must be a well-formed GS1 key (18 digits) and unique across Closient (409 if another row holds it, 422 if malformed). Requires CONTRIBUTE: a read-only key gets 403.
curl --request POST \
--url https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"relation_type": "PROVIDER",
"service_type": "broadband"
}
'import requests
url = "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations"
payload = {
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"relation_type": "PROVIDER",
"service_type": "broadband"
}
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({
external_url: 'https://acmenet.com/account',
gsrn: '952101530000000011',
relation_type: 'PROVIDER',
service_type: 'broadband'
})
};
fetch('https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations', 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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations",
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([
'external_url' => 'https://acmenet.com/account',
'gsrn' => '952101530000000011',
'relation_type' => 'PROVIDER',
'service_type' => 'broadband'
]),
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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations"
payload := strings.NewReader("{\n \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\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/resolver/api/v1/organizations/{organization_id}/link-type-service-relations")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/link-type-service-relations")
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 \"external_url\": \"https://acmenet.com/account\",\n \"gsrn\": \"952101530000000011\",\n \"relation_type\": \"PROVIDER\",\n \"service_type\": \"broadband\"\n}"
response = http.request(request)
puts response.read_body{
"created": "2026-06-01T09:00:00Z",
"external_url": "https://acmenet.com/account",
"gsrn": "952101530000000011",
"id": "a1b2c3d4e5f6",
"modified": "2026-06-19T14:30:00Z",
"organization_id": "b2c3d4e5-f678-9012-abcd-ef2345678901",
"relation_type": "PROVIDER",
"service_type": "broadband"
}{
"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
UUID of the organization that owns the records.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$Body
Payload to create a GSRN service relation.
Global Service Relation Number (AI 8017 or 8018), exactly 18 digits. Unique across Closient.
18^[^\x00]{0,18}$PROVIDER for AI 8017 (the service provider), RECIPIENT for AI 8018 (the recipient).
PROVIDER, RECIPIENT Optional descriptor such as 'broadband' (max 120 characters).
120^[^\x00]{0,120}$The provider's portal or account page: an absolute http(s) URL of at most 2048 characters.
2048^[Hh][Tt][Tt][Pp][Ss]?://[^\x00-\x20\x7f/?#][^\x00-\x20\x7f]{0,2039}$Response
Created
A GSRN service relation as read from the API.
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}$Global Service Relation Number (AI 8017 or 8018), exactly 18 digits. Unique across Closient.
PROVIDER for AI 8017 (the service provider), RECIPIENT for AI 8018 (the recipient).
PROVIDER, RECIPIENT Optional descriptor such as 'broadband'; empty when none.
120UUID of the organization that owns the relation.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$ISO-8601 creation timestamp.
ISO-8601 last-modified timestamp.
The provider's portal or account page, if any.