Create a custom domain
const url = 'https://api.deploybase.eu/api/v1/api/v1/domains';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"connection_mode":"byo_dns","domain":"example","project_id":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.deploybase.eu/api/v1/api/v1/domains \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "connection_mode": "byo_dns", "domain": "example", "project_id": "example" }'Creates a new custom domain for a project with DNS verification
Authorizations
Section titled “ Authorizations ”Request Body
Section titled “ Request Body ”Domain details
object
ConnectionMode selects bring-your-own DNS (default) or managed DNS (deploybase nameservers). Empty defaults to byo_dns.
Responses
Section titled “ Responses ”Created
object
object
object
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()).
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).
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.
Machine-readable failure reason (SSLErrorCode); drives reason-specific UI guidance
Example
{ "data": { "connection_mode": "byo_dns", "geo_mode": "off", "ssl_status": "pending", "status": "pending_verification" }}Bad Request
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Unauthorized
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Project not found
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Domain already exists
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}