Update a Blob Custom Domain
curl --request PATCH \
--url https://blob.vertracloud.app/v1/domains/{domain_id} \
--header 'Content-Type: application/json' \
--data '
{
"web_content": true
}
'import requests
url = "https://blob.vertracloud.app/v1/domains/{domain_id}"
payload = { "web_content": True }
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({web_content: true})
};
fetch('https://blob.vertracloud.app/v1/domains/{domain_id}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'web_content' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://blob.vertracloud.app/v1/domains/{domain_id}"
payload := strings.NewReader("{\n \"web_content\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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.patch("https://blob.vertracloud.app/v1/domains/{domain_id}")
.header("Content-Type", "application/json")
.body("{\n \"web_content\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains/{domain_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"web_content\": true\n}"
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": true,
"verification": null,
"created_at": "2026-10-14T12:00:00.000Z"
}
}
Custom domains
Update a Blob Custom Domain
Turns web content on or off for a custom domain: whether it serves HTML, SVG and XML in the browser or always downloads them.
PATCH
/
v1
/
domains
/
{domain_id}
Update a Blob Custom Domain
curl --request PATCH \
--url https://blob.vertracloud.app/v1/domains/{domain_id} \
--header 'Content-Type: application/json' \
--data '
{
"web_content": true
}
'import requests
url = "https://blob.vertracloud.app/v1/domains/{domain_id}"
payload = { "web_content": True }
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({web_content: true})
};
fetch('https://blob.vertracloud.app/v1/domains/{domain_id}', 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}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'web_content' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://blob.vertracloud.app/v1/domains/{domain_id}"
payload := strings.NewReader("{\n \"web_content\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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.patch("https://blob.vertracloud.app/v1/domains/{domain_id}")
.header("Content-Type", "application/json")
.body("{\n \"web_content\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://blob.vertracloud.app/v1/domains/{domain_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"web_content\": true\n}"
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": true,
"verification": null,
"created_at": "2026-10-14T12:00:00.000Z"
}
}
Changes
web_content on a custom domain and returns the domain. With true, the domain serves .html, .htm, .xhtml, .svg and .xml files in the browser with their real type; pages run JavaScript in a sandbox with no forms, no cookies and no navigating the top tab. With false (the default), those types always download. The change takes effect within about a minute. The default public link always downloads these types, whatever this setting says. See Custom domains for the risks.
Scope: blob:write.
string
required
The domain ID.
boolean
Turns web content on (
true) or off (false) for this domain.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 PATCH "https://blob.vertracloud.app/v1/domains/9a8b7c6d-5e4f-4a3b-b2c1-d0e9f8a7b6c5" \
-H "Authorization: Bearer $VERTRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"web_content":true}'
Response
object
The updated domain.
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": true,
"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.VALIDATION_ERROR(400):web_contentis missing or isn’t a boolean.details.pathnames the field.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"
}