Skip to content
Providers

Hetzner DNS Console is gone: moving your zones and tokens to the Hetzner Console

Hetzner DNS Console migration dates, API and token changes, integration breakpoints, and the steps to verify zones now hosted in the Hetzner Console.

8 min readDNSMigrator team

The DNS service did not disappear with dns.hetzner.com. Its control plane moved into console.hetzner.com and the Hetzner Cloud API. If DNS still resolves but certificate renewal, dynamic DNS, or Kubernetes automation fails, inspect the integration and credential before changing the zone itself.

Hetzner DNS Console migration timeline#

Hetzner’s dates changed from an initial plan to a final shutdown schedule. The October 7, 2025 announcement said the beta was expected to end on November 10, recommended manual migration by the end of April 2026, and planned an early-May shutdown. Hetzner’s final migration FAQ and status notice refined that schedule:

DateWhat Hetzner said would happen
October 7, 2025Public beta began for DNS in the Hetzner Console and the new Hetzner Cloud DNS API. Existing zones could be migrated voluntarily; the old console and API still allowed creation and editing.
November 10, 2025Beta ended and DNS in the Hetzner Console became generally available. Creating a new zone through the old DNS Console or old DNS API stopped; existing old-console zones could still be edited.
End of 2025 through early 2026Hetzner sent repeated migration reminders.
February 16 through May 20, 2026Scheduled “brownouts” increasingly disabled writes in the old console and API. During a brownout, reads and migrations remained available, while write endpoints returned HTTP 503.
Before May 20, 2026Hetzner automatically migrated all remaining zones into the Hetzner Console.
May 20, 2026The old DNS Console and API moved to read-only mode. Hetzner’s status notice said no zones remained in the old system.
May 27, 2026 at 07:39 UTCHetzner removed the old DNS Console and API; dns.hetzner.com began redirecting to console.hetzner.com.

An official Hetzner Community update from August 2026 confirms the outcome: the old console and legacy API shut down in May, and remaining zones were migrated automatically.

There were two different statements at different stages, and both were true at the time. The manual migration instructions originally said no zones were migrated automatically; you had to trigger a one-way move. The final schedule later added an automatic migration for whatever remained before the old system became read-only. If you moved early, you controlled the timing. If you did not, Hetzner completed it before shutdown.

What moved automatically, and what stayed the same#

The migration moved the zone’s control-plane representation, not its delegation to a new DNS network. Hetzner’s migration documentation said resolution had no downtime, zone settings remained unchanged, and both consoles used the same authoritative nameservers. During a manual move the zone was briefly locked against changes, disappeared from the old console when complete, and appeared under a project named DNS Migrated. You could then transfer it to another project.

The final automatic pass moved all remaining zones. Hetzner’s current DNS overview still distinguishes three valid assigned nameserver sets and notes that older primary zones can keep the older set. Do not replace nameservers merely because a blog example shows a newer set.

What did not carry over was access to the old API. Tokens issued at dns.hetzner.com, scripts using its request headers, and tools built only for its record endpoints cannot authenticate to the Cloud API. The current features and integrations page states this directly: you need a new token from the Hetzner Console, and old DNS Console tokens do not work.

Hetzner DNS API changes that break old clients#

The new API is not a version bump at the old hostname. It changes the endpoint, credential scope, and update model.

ConcernRetired DNS Console APIHetzner Console Cloud API
Base URLhttps://dns.hetzner.com/api/v1https://api.hetzner.cloud/v1
AuthenticationDNS Console token sent in Auth-API-TokenHetzner Cloud API token sent as Authorization: Bearer <token>
ScopeOld DNS Console accountOne Hetzner Console project
Zone organizationDNS-specific consoleZones live in projects beside other Hetzner Cloud resources; a zone can be transferred between projects
Record updatesLegacy clients commonly addressed individual recordsThe Cloud API groups records by owner name and type into RRSets and exposes RRSet actions such as changing TTL or replacing the records
Long-running changesLegacy response modelCloud API writes can return an action that the client follows until success or error

The RRSet change is easy to miss. All values with the same name and type form one set and share a TTL. A script that used to find one record ID and patch one value must now read the RRSet, retain values it still wants, and submit the complete desired set. Hetzner’s old migration validator required equal TTLs for records with the same name and type for exactly this reason.

The current API’s shape is documented under zones and RRSets. Hetzner’s updated DDNS tutorial demonstrates the practical sequence: resolve the zone through /zones?name=..., fetch /zones/{id}/rrsets, find the exact A or AAAA RRSet, and call set_records.

Create a new Hetzner DNS API token#

A Hetzner DNS API token now means a Hetzner Cloud API token for the project containing the zone. Open that project, then use Security → API tokens → Generate API token. Choose Read for inventory or a source-only preview and Read & Write for an integration that creates or changes records. Hetzner displays the token once.

A token from the wrong project can authenticate successfully while returning no expected zones. Separate projects are therefore useful for least privilege, but every consumer must use a token from the project that owns its zone. Hetzner’s token guide documents the permissions and Bearer header; the DNSMigrator Hetzner setup page gives the exact connection steps.

Do not put Bearer into a credential field unless the client asks for a complete header. DNSMigrator accepts the token secret itself and adds the header. It uses the Hetzner Console Cloud API at https://api.hetzner.cloud/v1, reads primary-zone RRSets, and refuses secondary-mode zones because the release adapter does not read or write their records.

Which integrations broke after the Hetzner DNS API changes?#

Any integration still calling dns.hetzner.com/api/v1 or presenting an old token stopped writing after May 20. Hetzner warned that plugins could unexpectedly stop in May and published a replacement list. “Supported” in that list means a compatible release exists; it does not update your deployment or secret automatically.

IntegrationWhat Hetzner’s current migration page says
ACME DNS-01 with acme.shCloud API support arrived November 18, 2025. The provider name changed from dns_hetzner to dns_hetznercloud, so changing only the token is not enough.
Other ACME clientslego supports the new API from v4.27.0 and renamed the credential from HETZNER_API_KEY to HETZNER_API_TOKEN. Hetzner lists compatible certbot plugins separately. Check the plugin, not only the ACME client’s version.
Dynamic DNS scriptsHetzner lists filiparag/hetzner_ddns from v1.0.0. Custom scripts must move to the Cloud API, Bearer token, and RRSet update flow. The updated Hetzner DDNS bridge tutorial shows those changes.
external-dnsHetzner points to the official external-dns-hetzner-webhook, supported from v0.1.0. Replace a legacy provider or webhook and update the project token secret.
cert-managerHetzner points to the official cert-manager-webhook-hetzner, supported from v0.1.0. Its official Community tutorial uses a Read & Write Cloud API token and a DNS-01 webhook solver.
DNSControlCloud API support starts with v4.28.0, and the provider ID changed from HETZNER to HETZNER_V2.

For certificate automation, test an issuance or staging renewal now. Waiting for the next production renewal window turns an API migration problem into an expiring-certificate incident. For external-dns, reconcile a harmless test record and confirm the controller no longer logs 401, 403, 404, or legacy-host errors.

How to verify your zones after the move#

First open the zone in Hetzner Console and read its Name servers tab. New primary zones normally use:

text
hydrogen.ns.hetzner.com.
oxygen.ns.hetzner.com.
helium.ns.hetzner.de.

Older migrated primary zones may still use:

text
ns1.first-ns.de.
robotns2.second-ns.de.
robotns3.second-ns.com.

A konsoleH-linked zone can have a third documented set. Use the assigned set shown for your zone; do not mix sets. Query every assigned authority directly with recursion disabled:

bash
dig +norecurse @hydrogen.ns.hetzner.com example.com SOA
dig +norecurse @hydrogen.ns.hetzner.com example.com A
dig +norecurse @oxygen.ns.hetzner.com example.com MX
dig +norecurse @helium.ns.hetzner.de example.com TXT

Expect the aa flag and the intended complete RRSet. Repeat representative queries against all three servers, including AAAA, CAA, SRV, DKIM selectors, _dmarc, _acme-challenge, wildcards, and a name that should not exist. Then inspect the published delegation:

bash
dig +short example.com NS
dig +trace example.com NS

The parent delegation should match the assigned Hetzner set. Hetzner’s delegation guide says nameserver changes can take up to 48 hours, but a console migration that retained the same set should not start a new delegation change. Use the propagation checker only after confirming the authorities themselves are correct.

Finally, exercise every writer: DDNS, ACME DNS-01, external-dns, cert-manager, Terraform, DNSControl, or a custom deployment. DNS answers prove the current zone is serving; they do not prove a token can make the next change.

Move from Hetzner DNS if you prefer another provider#

The console migration does not require you to remain with Hetzner. Create a project-scoped Read token, connect a primary Hetzner zone as the source, and choose any supported destination. DNSMigrator reads that zone’s Cloud API RRSets, normalizes them, and compares them with the destination’s capabilities.

Review every status in the migration preview, especially provider-specific record types and TTL changes. Apply to the destination and verify its authoritative nameservers before changing the registrar. Hetzner’s current catalog has no automatic DNSSEC signing, so the destination’s DNSSEC capabilities and any parent DS state need a separate check. Follow the nameserver cutover guide, keep Hetzner answering through the old delegation TTL, and use the DNS migration checker to confirm the live result.

If you want a portable backup first, export the normalized zone through the BIND zone-file workflow. A file is useful for records, but it will not carry project permissions or repair old integrations; migrate those consumers deliberately.

When did the Hetzner DNS Console shut down?
Hetzner moved the old system to read-only on May 20, 2026, when its status notice said no zones remained there. It removed the DNS Console and API on May 27 at 07:39 UTC, after which dns.hetzner.com redirected to the Hetzner Console.
Were Hetzner DNS zones migrated automatically?
Yes. Early documentation asked customers to trigger a one-way manual migration, but the final schedule automatically migrated all remaining zones before the old system became read-only on May 20, 2026. Hetzner said the DNS service kept using the same nameservers, so this control-plane move did not itself require a delegation change.
Do old Hetzner DNS API tokens still work?
No. Tokens created in the retired DNS Console do not work with the Hetzner Cloud API. Create a new Read or Read & Write token inside the Hetzner Console project that contains the zone.
What changed in the Hetzner DNS API?
The base URL moved from dns.hetzner.com/api/v1 to api.hetzner.cloud/v1, authentication moved to project-scoped Bearer tokens, and record updates now use an RRSet model. Integrations also need Cloud-API-compatible provider versions and, in some cases, renamed configuration keys.
Why did ACME or dynamic DNS stop after the migration?
The zone could keep resolving from unchanged nameservers while the automation still used the retired API, token, or provider name. Upgrade to a Cloud-API-compatible plugin, create a new project token, update its secret and configuration, and perform a real test write or staging certificate issuance.