This is a drop-in provider for ApisCP to enable DNS support for accounts that use Hetzner. This provider is built into Hetzner.
EditDomain -c dns,provider=hetzner -c dns,key=21KUB...tIYvUSq domain.comWhere the key is created within Hetzner. See Hetzner: Getting Started > Generating API Tokens for information.
Note that only Hetzner Cloud is supported. Old DNS management through Hetzner Console is set to go read-only May 2026. Old keys must be updated to the new format. This can be done by reapplying default settings.
Hetzner may be configured as the default provider for all sites using the dns.default-provider Scope. When adding a site in Nexus or AddDomain the key will be replaced with "DEFAULT". This is substituted automatically on account creation.
In a multi-user environment, Keyring usage is necessary to protect users from accessing the password. When setting this value using the dns.default-provider-key in 3.2.42+, this value is automatically encoded as a Keyring value. Automatic wrapping as a Keyring object may be altered by changing [auth] => keyring_provider_types.
cpcmd scope:set dns.default-provider hetzner
# Note, this method is insecure prior to 3.2.42, see below!
cpcmd scope:set dns.default-provider-key '21KUB...tIYvUSq'::: warning
Note that it is not safe to set this value directly in config.ini as a server-wide default in untrusted multiuser environments. A user with panel access can retrieve your key common_get_service_value dns key or even using Javascript in the panel, apnscp.cmd('common_get_service_value',['dns','key'], {async: false}).
Implicit Keyring encoding masks the actual value using a server secret. :::
- Module- overrides Dns_Module behavior
- Validator- service validator, checks input with AddDomain/EditDomain helpers
All module methods can be overwritten. The following are the bare minimum that are overwritten for this DNS provider to work:
atomicUpdate()attempts a record modification, which must retain the original record if it failszoneAxfr()returns all DNS recordsadd_record()add a DNS recordremove_record()removes a DNS recordget_hosting_nameservers()returns nameservers for the DNS provideradd_zone_backend()creates DNS zoneremove_zone_backend()removes a DNS zone
See also: Creating a provider (hq.apnscp.com)
Submit a PR and have fun!