Voog.com

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

The domain object

Attributes

  • force_ssl - redirect HTTP requests to HTTPS.
  • iframe_options - control the X-Frame-Options response 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 the X-Frame-Options header, 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 as true together with permanent_redirect_url. Ignored when permanent_redirect_url is omitted.
  • permanent_redirect_url - destination URL for a permanent redirect. On update, omitting permanent_redirect_domain or setting it to false clears the redirect instead of setting this URL.
  • redirect_from_to_www - redirect between the www and non-www versions 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 as true when 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 as external, subdomain, or purchased.
  • computed_status - derived domain status. Values include waiting_manual_registration, waiting_registration, expired, expiring_soon, disabled, and active.
  • created_at - timestamp when the domain was created.
  • currency_code - currency code indicating the currency in which price is 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 the www version redirect to the non-www version.
  • redirect_to_www - whether requests from the non-www version redirect to the www version.

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. SOA and NS records 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 example a, cname, mx, txt, or srv. Input is case-insensitive and stored in lowercase. Submitted soa and ns records are ignored.
    • name - record name relative to the zone, for example www. An empty or omitted name defaults to @ (the zone apex).
    • data - record value, for example 192.0.2.1 for an a record. Values are validated according to the record type.

Read-only attributes

  • domain - associated domain with its id, name_with_idn, and API url.
  • 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 domain attributes: 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. Omit subdomain in this case.
  • subdomain - required when creating a free Voog technical subdomain. Supply only the prefix: my-company creates my-company.voog.com. Do not send name in 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.