Verify a Blob Custom Domain
curl --request POST \
--url https://blob.vertracloud.app/v1/domains/{domain_id}/verifyimport requests
url = "https://blob.vertracloud.app/v1/domains/{domain_id}/verify"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://blob.vertracloud.app/v1/domains/{domain_id}/verify', 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/{domain_id}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/{domain_id}/verify"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://blob.vertracloud.app/v1/domains/{domain_id}/verify")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains/{domain_id}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"response": {
"id": "9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5",
"hostname": "cdn.example.com",
"status": "active",
"ssl_status": "active",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": null,
"created_at": "2026-10-14T12:00:00.000Z"
}
}
Custom domains
Verify a Blob Custom Domain
Checks the CNAME record and certificate of a custom domain again and returns its updated status.
POST
/
v1
/
domains
/
{domain_id}
/
verify
Verify a Blob Custom Domain
curl --request POST \
--url https://blob.vertracloud.app/v1/domains/{domain_id}/verifyimport requests
url = "https://blob.vertracloud.app/v1/domains/{domain_id}/verify"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://blob.vertracloud.app/v1/domains/{domain_id}/verify', 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/{domain_id}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/{domain_id}/verify"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://blob.vertracloud.app/v1/domains/{domain_id}/verify")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains/{domain_id}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"response": {
"id": "9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5",
"hostname": "cdn.example.com",
"status": "active",
"ssl_status": "active",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": null,
"created_at": "2026-10-14T12:00:00.000Z"
}
}
Checks the CNAME record, the ownership TXT record and the TLS certificate of a custom domain again, right away, and returns the domain with its updated
status. Use it after you change the DNS record.
Scope: blob:write.
string
required
The domain ID.
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 -X POST "https://blob.vertracloud.app/v1/domains/9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5/verify" \
-H "Authorization: Bearer $VERTRA_API_KEY"
Response
object
The domain with its updated status.
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": "active",
"ssl_status": "active",
"cname_target": "cname.vertracloud.dev",
"prefix": "images/",
"web_content": false,
"verification": null,
"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.BLOB_CUSTOM_DOMAIN_NOT_FOUND(404): No domain with that ID in this account.
{
"code": "AUTH_TOKEN_MISSING"
}
{
"code": "API_KEY_SCOPE_DENIED"
}
{
"code": "WORKSPACE_NOT_FOUND"
}