Skip to content

List custom domains

GET
/api/v1/domains
curl --request GET \
--url https://api.deploybase.eu/api/v1/api/v1/domains \
--header 'Authorization: <Authorization>'

Returns a paginated list of custom domains for the authenticated team

page
integer

Page number (default: 1)

page_size
integer

Items per page (default: 20, max: 100)

project_id
string

Filter by project ID (UUID)

OK

Media type application/json
object
data
meta
object
request_id
string
timestamp
string
trace_id
string
data
object
domains
Array<object>
object
bunny_dns_ns1
string
bunny_dns_ns2
string
bunny_dns_zone_id
integer
connection_mode
string
Allowed values: byo_dns managed_dns
created_at
string
debug_url

DebugURL links to an external Let’s Encrypt diagnostic (Let’s Debug) pre-filled for this hostname, so a developer can self-check CAA/DNS issues we don’t probe server-side. Present only while SSL is unresolved (failed/pending/provisioning).

string
deleted_at
string
dns_records
Array<object>
object
name

Record host

string
note

Human-readable guidance

string
type

CNAME | ALIAS | TXT

string
value

Record value/target

string
domain
string
geo_countries
Array<string>
geo_mode

GeoMode + GeoCountries hold the CDN geo-filtering policy (BACK-210). GeoCountries is the set the customer chose (allow set or block set per GeoMode), NOT the inverted Bunny list; the block-list sent to Bunny is derived on the fly by ComputeBlockedCountries. Effective only when the domain is on a dedicated pull zone (UsesDedicatedPullZone()).

string
Allowed values: off allowlist blocklist
id
string
is_apex
boolean
last_verification_attempt
string
next_retry_at

NextRetryAt is when the worker will next automatically re-attempt a failed SSL provisioning, so the UI can show “still retrying, next attempt ~X” instead of a frozen failure. Computed from the last attempt + the worker’s backoff; omitted unless failed.

string
ns_delegated_at
string
project_id
string
pull_zone_id

PullZoneID is the dedicated Bunny pull zone for this custom domain in the 1:1 architecture (BACK-197/198), set at creation. NULL only when the CDN isn’t configured (dev/mock), in which case the domain has no CDN serving and falls back to the shared-PZ DNS instructions (see PointingTarget).

integer
ssl_attempts

NOTE: the explicit column tag is REQUIRED — GORM’s default namer mangles “SSLAttempts” to “s_slattempts” (it treats the embedded “SLA” as a known initialism), which doesn’t match the ssl_attempts column created in migration 000055. Without it every domains write fails with column "s_slattempts" does not exist. The other SSL* fields don’t collide, so only this one needs the override.

integer
ssl_error
string
ssl_error_code

Machine-readable failure reason (SSLErrorCode); drives reason-specific UI guidance

string
ssl_issued_at
string
ssl_last_attempt_at
string
ssl_provisioning_started_at
string
ssl_status
string
Allowed values: pending provisioning issued failed
status
string
Allowed values: pending_verification verified failed awaiting_delegation
supports_geo_filtering

SupportsGeoFiltering reports whether the domain is on a dedicated pull zone and can therefore accept a CDN geo-filtering policy (BACK-210). The UI uses this to enable/disable the geo controls and explain that a legacy (shared-PZ) domain isn’t eligible yet.

boolean
team_id
string
updated_at
string
verification_token
string
verified_at
string
managed_dns_available
boolean
page
integer
page_size
integer
total
integer
total_pages
integer
Example
{
"data": {
"domains": [
{
"connection_mode": "byo_dns",
"geo_mode": "off",
"ssl_status": "pending",
"status": "pending_verification"
}
]
}
}

Bad Request

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Unauthorized

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string
Example generated
{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}