Domains
Domains connect a site to its web address. Domain management requires an authenticated CMS user. Owners are required for creating and removing domains, DNS zone changes, domain search, suggestions, and transfer-code requests.
Summary of domain endpoints
- GET /admin/api/domains - list all domains for the current site.
- GET /admin/api/domains/1 - get data for a single domain.
- POST /admin/api/domains - add a domain to the current site.
- PUT /admin/api/domains/1 - update a domain.
- DELETE /admin/api/domains/1 - remove a domain.
- GET /admin/api/domains/search - search for available domain names.
- GET /admin/api/domains/search_domains - check domain names and prices for selected TLDs.
- GET /admin/api/domains/domain_suggestions - get domain name suggestions.
- POST /admin/api/domains/1/sendtransfercode - email a domain transfer code.
- GET /admin/api/domains/1/zone - get a domain's DNS zone.
- PUT /admin/api/domains/1/zone - update a domain's DNS zone.
The domain object
Attributes
force_ssl- redirect HTTP requests to HTTPS.iframe_options- control theX-Frame-Optionsresponse header for this domain:null- clear the domain-specific override and use the application's default header.SAMEORIGIN- allow embedding only by pages with the same origin.DENY- prevent embedding in frames.ALLOWALL- remove theX-Frame-Optionsheader, allowing embedding from other origins unless restricted by other policies. This special value is case-sensitive.- Other non-empty strings are copied directly to the header without validation and may not be recognized by browsers.
mode- domain mode.permanent_redirect_domain- enable the permanent redirect when sent astruetogether withpermanent_redirect_url. Ignored whenpermanent_redirect_urlis omitted.permanent_redirect_url- destination URL for a permanent redirect. On update, omittingpermanent_redirect_domainor setting it tofalseclears the redirect instead of setting this URL.redirect_from_to_www- redirect between thewwwand non-wwwversions of the domain. Accepted values:from_www,to_www,none(disable the redirect).wildcard_redirect- append the requested URL path to the permanent redirect destination instead of redirecting every path to the same URL. Returned astruewhen no permanent redirect is configured.
Domain names cannot be changed with PUT. See Add a domain for the parameters
used to create external domains and free Voog subdomains.
Read-only attributes
bundled- whether the purchased domain is included in the site's plan; returned only for purchased domains.category- domain category, such asexternal,subdomain, orpurchased.computed_status- derived domain status. Values includewaiting_manual_registration,waiting_registration,expired,expiring_soon,disabled, andactive.created_at- timestamp when the domain was created.currency_code- currency code indicating the currency in whichpriceis expressed; returned only for purchased domains.dns_zone- object containing the DNS zone ID and API URL; returned only when Voog hosted zone is present for the domain.expires_at- expiration timestamp; returned only for purchased domains.genuine_domain- whether this is a genuine domain.id- domain ID.min_period- minimum purchase period in years; returned only for purchased domains.name- domain name in ASCII form.name_utf8- internationalized domain name in Unicode form.price- domain price; returned only for purchased domains.primary_domain- whether this domain is used for global login and site links in emails sent to site administrators. It does not itself redirect visitors or otherwise change how the site behaves.registrant- registrant details; returned only for purchased domains.status- domain registration status.transfer_code_url- URL for requesting a transfer code; returned only for purchased domains.updated_at- timestamp when the domain was last updated.url- API URL of the domain.redirect_from_www- whether requests from thewwwversion redirect to the non-wwwversion.redirect_to_www- whether requests from the non-wwwversion redirect to thewwwversion.
The domain search result object
Read-only attributes
bundled_offer- whether the TLD is included in a domain bundle offer.currency_code- price currency.min_period- minimum purchase period in years.name- domain name in ASCII form.name_utf8- internationalized domain name in Unicode form.price- yearly domain price.taken- whether the domain is already registered on Voog.tld- top-level domain.
The DNS zone object
Attributes
records- complete array of the zone's editable DNS records, not an incremental update. Existing editable records omitted from the array are deleted; an empty array deletes all editable records.SOAandNSrecords are preserved automatically. Each record accepts:id- existing record ID when updating. Omit when adding a record. An ID not found in this zone is treated as a new record, not an update.cid- client-side identifier used to associate validation errors with a submitted record. Use a unique value for each record; it is not stored or returned as a record attribute.rtype- record type, for examplea,cname,mx,txt, orsrv. Input is case-insensitive and stored in lowercase. Submittedsoaandnsrecords are ignored.name- record name relative to the zone, for examplewww. An empty or omitted name defaults to@(the zone apex).data- record value, for example192.0.2.1for anarecord. Values are validated according to the record type.
Read-only attributes
domain- associated domain with itsid,name_with_idn, and APIurl.id- DNS zone ID.name- DNS zone name.status- DNS zone status. Ignored when updating.updated_at- timestamp when the zone was last updated.url- API URL of the DNS zone.
The domain suggestions object
Read-only attributes
suggestions- array of suggested domain names.
List all domains for the current site
GET /admin/api/domains
Returns all matching domains without pagination.
Example response
Status: 200 OK
[
{
"id": 1,
"name": "example.org",
"name_utf8": "example.org",
"category": "external",
"status": "active",
"primary_domain": true,
"genuine_domain": true,
"computed_status": "active",
"redirect_to_www": false,
"redirect_from_www": false,
"permanent_redirect_domain": false,
"permanent_redirect_url": null,
"wildcard_redirect": true,
"force_ssl": false,
"iframe_options": null,
"mode": "normal",
"created_at": "2026-10-22T09:19:05.000Z",
"updated_at": "2026-10-22T09:19:05.000Z",
"url": "http://helloworld.voog.co/admin/api/domains/1"
}
]
Filter attributes
Read more about filters.
- Object
domainattributes:id,name,status,category,registrant,primary_domain,genuine_domain,expires_at,created_at,updated_at.
Get data for a single domain
GET /admin/api/domains/1
Example response
Status: 200 OK
{
"id": 1,
"name": "example.org",
"name_utf8": "example.org",
"category": "external",
"status": "active",
"primary_domain": true,
"genuine_domain": true,
"computed_status": "active",
"redirect_to_www": false,
"redirect_from_www": false,
"permanent_redirect_domain": false,
"permanent_redirect_url": null,
"wildcard_redirect": true,
"force_ssl": false,
"iframe_options": null,
"mode": "normal",
"created_at": "2026-10-22T09:19:05.000Z",
"updated_at": "2026-10-22T09:19:05.000Z",
"url": "http://helloworld.voog.co/admin/api/domains/1"
}
Add a domain to the current site
POST /admin/api/domains
Example request (external domain)
POST http://helloworld.voog.co/admin/api/domains
{
"name": "www.example.org"
}
Example response
Status: 200 OK
{
"id": 1,
"name": "example.org",
"name_utf8": "example.org",
"category": "external",
"status": "active",
"primary_domain": true,
"genuine_domain": true,
"computed_status": "active",
"redirect_to_www": false,
"redirect_from_www": false,
"permanent_redirect_domain": false,
"permanent_redirect_url": null,
"wildcard_redirect": true,
"force_ssl": false,
"iframe_options": null,
"mode": "normal",
"created_at": "2026-10-22T09:19:05.000Z",
"updated_at": "2026-10-22T09:19:05.000Z",
"url": "http://helloworld.voog.co/admin/api/domains/1"
}
Parameters
Accepts domain object attributes.
name- required when adding an external domain. Omitsubdomainin this case.subdomain- required when creating a free Voog technical subdomain. Supply only the prefix:my-companycreatesmy-company.voog.com. Do not sendnamein this case. This parameter is accepted only when creating a domain.
The leading www. prefix is removed from the domain name when creating an external domain.
Invalid or duplicate domain names return 422 Unprocessable Entity.
Example request (free Voog subdomain)
POST http://helloworld.voog.co/admin/api/domains
{
"subdomain": "my-company"
}
The response is a domain object with name and name_utf8 set to
my-company.voog.com and category set to subdomain.
Update a domain
PUT /admin/api/domains/1
Example request
PUT http://helloworld.voog.co/admin/api/domains/1
{
"force_ssl": true
}
Example response
Status: 200 OK
{
"id": 1,
"name": "example.org",
"name_utf8": "example.org",
"category": "external",
"status": "active",
"primary_domain": true,
"genuine_domain": true,
"computed_status": "active",
"redirect_to_www": false,
"redirect_from_www": false,
"permanent_redirect_domain": false,
"permanent_redirect_url": null,
"wildcard_redirect": true,
"force_ssl": true,
"iframe_options": null,
"mode": "normal",
"created_at": "2026-10-22T09:19:05.000Z",
"updated_at": "2026-10-22T10:02:11.000Z",
"url": "http://helloworld.voog.co/admin/api/domains/1"
}
Parameters
Accepts domain object attributes. The domain name cannot be changed.
Iframe options
To allow embedding from other origins, remove the domain's X-Frame-Options header:
PUT http://helloworld.voog.co/admin/api/domains/1
{
"iframe_options": "ALLOWALL"
}
Use SAMEORIGIN to restrict embedding to the same origin, or DENY to prevent embedding.
Send iframe_options as null to clear the override and restore the application's default header.
Permanent redirects
To enable a permanent redirect, send both permanent_redirect_domain and permanent_redirect_url:
{
"permanent_redirect_domain": true,
"permanent_redirect_url": "https://example.com",
"wildcard_redirect": true
}
With wildcard_redirect enabled, a request for /about redirects to https://example.com/about.
With it disabled, all paths redirect to https://example.com.
To remove the permanent redirect, send permanent_redirect_url as null.
Sending only permanent_redirect_domain does not change the redirect.
Remove a domain
DELETE /admin/api/domains/1
Example response
Status: 204 No Content
Domains that cannot be deleted return an error response.
Search for available domain names
GET /admin/api/domains/search
Searches the default set of purchasable TLDs for the supplied domain name.
Example request
GET http://helloworld.voog.co/admin/api/domains/search?domain=example
Example response
Status: 200 OK
[
{
"name": "example.com",
"name_utf8": "example.com",
"tld": "com",
"price": 12.0,
"min_period": 1,
"currency_code": "EUR",
"taken": false,
"bundled_offer": false
}
]
Parameters
domain- required; domain name to search. Only the first comma-separated value is used.
The response contains domain search result objects.
Check domain names and prices for selected TLDs
GET /admin/api/domains/search_domains
Returns one result for each combination of the supplied names and TLDs. If tld is omitted, the default purchasable TLD set is used.
Example request
GET http://helloworld.voog.co/admin/api/domains/search_domains?domain=example&tld=com
Example response
Status: 200 OK
[
{
"name": "example.com",
"name_utf8": "example.com",
"tld": "com",
"price": 12.0,
"min_period": 1,
"currency_code": "EUR",
"taken": false,
"bundled_offer": false
}
]
Parameters
domain- required; one or more names, comma-separated or as an array. Basenames are lowercased, sanitized, and limited to 63 characters.tld- one or more TLDs, comma-separated or as an array. Unsupported TLDs are ignored; if none remain, the request is invalid.
The response contains domain search result objects.
Invalid names or TLDs return an error response.
Get domain name suggestions
GET /admin/api/domains/domain_suggestions
Returns suggested domain names as a domain suggestions object.
Example request
GET http://helloworld.voog.co/admin/api/domains/domain_suggestions?domain=my-company.com
Example response
Status: 200 OK
{
"suggestions": [
"companyhub.com",
"companywise.com",
"companyworks.com",
"companyconnect.com",
"companygrowth.com",
"companysolutions.com"
]
}
Parameters
domain- name to use when generating suggestions.
Email a domain transfer code
POST /admin/api/domains/1/send_transfer_code
Sends a transfer code to the current user's email address. This action is available for purchased domains.
Example response
Status: 204 No Content
The request returns 422 Unprocessable Entity if the transfer code could not be sent.
Get a domain's DNS zone
GET /admin/api/domains/1/zone
The DNS zone is available only when zone services are enabled for the domain.
Example response
Status: 200 OK
{
"id": 1,
"name": "example.org",
"status": "active",
"records": [],
"updated_at": "2026-10-22T09:19:05.000Z",
"domain": {
"id": 1,
"name_with_idn": "example.org",
"url": "http://helloworld.voog.co/admin/api/domains/1"
},
"url": "http://helloworld.voog.co/admin/api/domains/1/zone"
}
The response is a DNS zone object.
Update a domain's DNS zone
PUT /admin/api/domains/1/zone
Updates the zone records. The zone status cannot be changed through this endpoint.
SOA and NS records are protected and cannot be overwritten.
Unlike domain creation and updates, this endpoint requires a dns_zone root object in the request
body. A flat records payload is not supported.
Send the complete set of editable records to keep, including unchanged records. This is a
replacement, not an incremental update. Records omitted from the array are deleted, except for
protected SOA and NS records. Sending records: [] deletes all editable records.
To update an existing record, include its id and the complete rtype, name, and data values.
To add a record, omit id. Include a unique cid for each submitted record so validation errors
can be matched to the input. If any record fails validation, the entire update is rolled back and
the endpoint returns 422 Unprocessable Entity, with record errors keyed by cid in
errors.records.
Example request
This example keeps and updates record 2, adds a TXT record, and deletes any other editable records.
PUT http://helloworld.voog.co/admin/api/domains/1/zone
{
"dns_zone": {
"records": [
{
"id": 2,
"cid": 2,
"rtype": "a",
"name": "www",
"data": "192.0.2.1"
},
{
"cid": "new-txt",
"rtype": "txt",
"name": "@",
"data": "site-verification=example"
}
]
}
}
Example response
Status: 200 OK
{
"id": 1,
"name": "example.org",
"status": "active",
"records": [
{
"id": 2,
"rtype": "a",
"name": "www",
"data": "192.0.2.1"
},
{
"id": 3,
"rtype": "txt",
"name": "@",
"data": "site-verification=example"
}
],
"updated_at": "2026-10-22T10:02:11.000Z",
"domain": {
"id": 1,
"name_with_idn": "example.org",
"url": "http://helloworld.voog.co/admin/api/domains/1"
},
"url": "http://helloworld.voog.co/admin/api/domains/1/zone"
}
Parameters
Accepts DNS zone object attributes.
records- required.