curl --request GET \
--url https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname} \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}', 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}/custom-hostnames/{hostname}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"fallback_mode": "hosted_404",
"fallback_redirect_url": "",
"fallback_utm_campaign": "",
"fallback_utm_content": "",
"fallback_utm_medium": "",
"fallback_utm_source": "",
"fallback_utm_term": "",
"hostname": "id.theirco.com",
"is_qr_ready": true,
"last_checked_at": "2026-07-20T18:04:11Z",
"last_error": "",
"setup": {
"challenge": {
"name": "_closient-challenge.id.theirco.com",
"purpose": "ownership_verification",
"type": "CNAME",
"value": "9f86d081884c.verify.gtin.one"
},
"qr_density_warning": false,
"serving": {
"name": "id.theirco.com",
"purpose": "resolver_routing",
"type": "CNAME",
"value": "gtin.one"
}
},
"status": "VERIFIED",
"tls_status": "ACTIVE",
"verified_at": "2026-07-20T18:04:11Z"
}{
"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"
}Get a custom resolver hostname
One custom hostname registered to the organization, with its status and the DNS records to publish. The hostname itself is the identifier: it is globally unique and every action above addresses it that way. Returns 404 when the organization has no such hostname, whether it does not exist or another organization holds it. Requires VIEW permission.
curl --request GET \
--url https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname} \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}', 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}/custom-hostnames/{hostname}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/resolver/api/v1/organizations/{organization_id}/custom-hostnames/{hostname}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"fallback_mode": "hosted_404",
"fallback_redirect_url": "",
"fallback_utm_campaign": "",
"fallback_utm_content": "",
"fallback_utm_medium": "",
"fallback_utm_source": "",
"fallback_utm_term": "",
"hostname": "id.theirco.com",
"is_qr_ready": true,
"last_checked_at": "2026-07-20T18:04:11Z",
"last_error": "",
"setup": {
"challenge": {
"name": "_closient-challenge.id.theirco.com",
"purpose": "ownership_verification",
"type": "CNAME",
"value": "9f86d081884c.verify.gtin.one"
},
"qr_density_warning": false,
"serving": {
"name": "id.theirco.com",
"purpose": "resolver_routing",
"type": "CNAME",
"value": "gtin.one"
}
},
"status": "VERIFIED",
"tls_status": "ACTIVE",
"verified_at": "2026-07-20T18:04:11Z"
}{
"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
Organization UUID.
22^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$The registered hostname, e.g. id.theirco.com. Letters, digits, dot, hyphen and underscore.
1 - 253^[A-Za-z0-9._-]+$Response
OK
The customer-owned hostname, normalized lowercase.
Ownership-verification state.
PENDING, VERIFIED, DISABLED Edge-certificate state (read-only; driven by the cert pipeline).
NOT_REQUESTED, PENDING, ACTIVE, FAILED True when this hostname is VERIFIED and its edge cert is ACTIVE — QRs may print against it.
Unresolved-scan fallback policy (C-4755). hosted_404 (default) or redirect.
hosted_404, redirect DNS records to publish for this hostname.
Show child attributes
Show child attributes
{
"challenge": {
"name": "_closient-challenge.id.theirco.com",
"purpose": "ownership_verification",
"type": "CNAME",
"value": "9f86d081884c.verify.gtin.one"
},
"qr_density_warning": false,
"serving": {
"name": "id.theirco.com",
"purpose": "resolver_routing",
"type": "CNAME",
"value": "gtin.one"
}
}
ISO-8601 timestamp of the last successful verification, or null.
ISO-8601 timestamp of the last verification attempt, or null.
Reason the last verification attempt failed (empty on success).
Reason the last certificate issuance or renewal check failed (empty on success).
ISO-8601 time before which certificate issuance will not be retried, or null when not in cooldown.
ISO-8601 expiry of the certificate seen at the last successful probe, or null.
Redirect-mode destination. Empty unless fallback_mode is redirect.
2048UTM source override for redirect-mode fallback. Empty = platform default.
255UTM medium override for redirect-mode fallback. Empty = platform default.
255UTM campaign override for redirect-mode fallback. Empty = platform default.
255UTM term override for redirect-mode fallback. Empty = platform default.
255UTM content override for redirect-mode fallback. Empty = platform default.
255