List Application Domains
curl --request GET \
--url https://api.vertracloud.app/v1/apps/{id}/domainsimport requests
url = "https://api.vertracloud.app/v1/apps/{id}/domains"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/domains")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/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": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"hostname": "example.com",
"apex": true,
"companion_of": null,
"redirect_to": null,
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
},
{
"id": "c2a9d4f1-86b0-4a37-b5e8-1f3d7a9c0e62",
"hostname": "www.example.com",
"apex": false,
"companion_of": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_to": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
}
]
}
Domains
List Application Domains
Lists the custom domains of an application with their status, certificate state, port, path prefix and redirect.
GET
/
v1
/
apps
/
{id}
/
domains
List Application Domains
curl --request GET \
--url https://api.vertracloud.app/v1/apps/{id}/domainsimport requests
url = "https://api.vertracloud.app/v1/apps/{id}/domains"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/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://api.vertracloud.app/v1/apps/{id}/domains")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/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": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"hostname": "example.com",
"apex": true,
"companion_of": null,
"redirect_to": null,
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
},
{
"id": "c2a9d4f1-86b0-4a37-b5e8-1f3d7a9c0e62",
"hostname": "www.example.com",
"apex": false,
"companion_of": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_to": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
}
]
}
Returns every custom domain of the application, including the automatic
www (or root) companion that
Add Application Domain creates next to the domain you add. The
list is empty when the application has none. Requires the apps:read scope when called with an API key.
For how domains work, see the custom domains guide.
string
required
The application ID.
string
If the application belongs to a workspace, the workspace’s ID. Required for workspace members acting on an application they don’t own.
Response
APIApplicationDomain[]
The custom domains of the application, oldest first.
Show Toggle object
Show Toggle object
string
The domain ID. Use it in the other domain routes and in
redirect_to.string
The hostname, in lowercase (e.g.,
example.com).boolean
true when the hostname is a root domain (example.com, example.com.br) rather than a subdomain.
A CNAME record at the root only works at DNS providers that flatten it; see the
guide.string | null
The ID of the main domain when this one is its automatic
www (or root) companion; null otherwise.
A companion does not count toward the plan’s domain limit.string | null
The ID of another domain of the same application that this one redirects to, or
null when it serves the application.integer
The HTTP status of the redirect:
301, 302, 307 or 308. Always 308 when redirect_to is null.string | null
A path added in front of every request to the application (e.g.,
/api), or null for none.integer
The port of the application that serves this domain, from
1 to 65535. 80 by default.string
pending (waiting for the DNS records), active (serving the application), moved (the domain
stopped pointing at Vertra Cloud) or deleted (no longer registered).string
The state of the HTTPS certificate:
pending, active or failed.string
When the domain was added.
{
"response": [
{
"id": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"hostname": "example.com",
"apex": true,
"companion_of": null,
"redirect_to": null,
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
},
{
"id": "c2a9d4f1-86b0-4a37-b5e8-1f3d7a9c0e62",
"hostname": "www.example.com",
"apex": false,
"companion_of": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_to": "7b8f5e0a-3c1d-4e52-9a47-0d6e2c1f9b34",
"redirect_status": 308,
"path_prefix": null,
"port": 80,
"status": "active",
"ssl_status": "active",
"created_at": "2026-10-21T14:02:11.000Z"
}
]
}
status and ssl_status are refreshed in the background and every time you call
Domain DNS Records, so a domain can show pending for a few
minutes after its records resolve. A domain that never becomes active is removed automatically after 14 days; delete
its DNS records at your provider afterwards.Error Responses
string
The error code indicating the reason for the failure. Possible values:
VALIDATION_ERROR: The path parameter or the query failed validation (400). The response also carriesmessageandpath.UNAUTHORIZED: The request is not authenticated (401).USER_NOT_FOUND: The authenticated user could not be resolved (401).ACCESS_DENIED: The user does not have permission to read the application (403).API_KEY_SCOPE_DENIED: The API key does not have theapps:readscope (403).APP_NOT_FOUND: The specified application does not exist (404).RATE_LIMIT_EXCEEDED: The route’s budget was reached (429).INTERNAL_SERVER_ERROR: Unexpected failure (500).
{
"code": "APP_NOT_FOUND"
}
This route has its own budget of 30 requests per minute. See Rate Limiting.