List Custom Domains for Blob Storage
curl --request GET \
--url https://blob.vertracloud.app/v1/domainsimport requests
url = "https://blob.vertracloud.app/v1/domains"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://blob.vertracloud.app/v1/domains', 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://blob.vertracloud.app/v1/domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://blob.vertracloud.app/v1/domains"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://blob.vertracloud.app/v1/domains")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"response": [
{
"id": "9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5",
"hostname": "cdn.example.com",
"status": "pending",
"ssl_status": "pending_validation",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": { "type": "txt", "name": "_vertra-blob.cdn.example.com", "value": "3f9a1c7e2b5d4e8a9c0d6a1b2c3d4e5f" },
"created_at": "2026-10-14T12:00:00.000Z"
}
]
}
Custom domains
List Custom Domains for Blob Storage
Lists the custom domains of the account for public blob files, with their status and the CNAME target.
GET
/
v1
/
domains
List Custom Domains for Blob Storage
curl --request GET \
--url https://blob.vertracloud.app/v1/domainsimport requests
url = "https://blob.vertracloud.app/v1/domains"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://blob.vertracloud.app/v1/domains', 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://blob.vertracloud.app/v1/domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://blob.vertracloud.app/v1/domains"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://blob.vertracloud.app/v1/domains")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"response": [
{
"id": "9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5",
"hostname": "cdn.example.com",
"status": "pending",
"ssl_status": "pending_validation",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": { "type": "txt", "name": "_vertra-blob.cdn.example.com", "value": "3f9a1c7e2b5d4e8a9c0d6a1b2c3d4e5f" },
"created_at": "2026-10-14T12:00:00.000Z"
}
]
}
Lists the custom domains that serve the account’s public blob files, with the status of each one. Only
active domains serve files.
Scope: blob:read.
string
The workspace ID, when the blob belongs to a workspace. The call acts on the blob of the workspace owner and needs the
blob:read workspace permission (blob:manage on routes that change data). Leave it out to act on your own blob.Example request
curl "https://blob.vertracloud.app/v1/domains" \
-H "Authorization: Bearer $VERTRA_API_KEY"
Response
object[]
The custom domains.
Show properties
Show properties
string
Domain ID.
string
Subdomain only, for example
cdn.example.com.string
pending, active, failed or suspended. Only active serves files.string
Status of the TLS certificate for the hostname.
string
Point a CNAME record of
hostname to this value.string | null
When set, the domain serves only this folder.
boolean
true when the domain serves .html, .htm, .xhtml, .svg and .xml in the browser (sandboxed); false when those types always download.object | null
string
ISO 8601 creation time.
{
"response": [
{
"id": "9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5",
"hostname": "cdn.example.com",
"status": "pending",
"ssl_status": "pending_validation",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": { "type": "txt", "name": "_vertra-blob.cdn.example.com", "value": "3f9a1c7e2b5d4e8a9c0d6a1b2c3d4e5f" },
"created_at": "2026-10-14T12:00:00.000Z"
}
]
}
Error Responses
string
The error code indicating the reason for failure. Possible values:
AUTH_TOKEN_MISSING(401): NoAuthorizationheader was sent.API_KEY_INVALID(401): The API key doesn’t exist, was revoked, or its secret doesn’t match.API_KEY_SCOPE_DENIED(403): The key lacks the scope this route needs (blob:readorblob:write);details.requirednames it.WORKSPACE_PERMISSION_DENIED(403): Only withworkspace_id: you’re not a member, or your role lacks the blob permission.WORKSPACE_NOT_FOUND(404): Only withworkspace_id: no workspace with that ID, or you’re not a member.
{
"code": "AUTH_TOKEN_MISSING"
}
{
"code": "API_KEY_SCOPE_DENIED"
}
{
"code": "WORKSPACE_NOT_FOUND"
}