Dynamic DNS
To configure Dynamic DNS, log onto your SERVFAIL account, pick a zone and open the "dynamic dns" page. Enter the full domain name (it has to contained within the zone you're currently editing) It will spit out a per-subdomain token which can be used with the endpoints described below.
Endpoints
https://beta.servfail.network/ddns?token={token}https://beta.servfail.network/ddns?token={token}&ip={ip}
Requesting the first URL will set the record to the caller's IP; Parameter ip is optional and sets the record to an IPv4/IPv6 address you specify. Of note: if you're running a dual-stack setup, you may need to call this address twice, once forcing IPv4 and once IPv6; our side will only change one record at a time.
Important: please do NOT call the endpoint more frequently than once per minute (and preferably every 5 minutes). While it doesn't cause any big problems for us, we still don't like mindless, wasteful traffic: A single device requesting the endpoint once every 10 seconds will make 8640 requests per day - do you really need this?
Responses
On 2026-02-18 we changed the success/failure responses. Apologies if this broke your monitoring or automations. The new responses are as follows:
| Response | Status Code | Description |
|---|---|---|
NOK: missing token | 400 | The token parameter is missing |
NOK: bad token | 403 | DDNS token is invalid or missing. Note: DDNS uses separate per-domain tokens, unrelated to the main API token from the settings. |
NOK: Backend error. Please contact the sysop. Error string: <reason> | 500 | Generic backend error, often related to an invalid IP address formatting, or problems with the zone. |
NOK: Nameserver <ns> is unreachable. Please contact the sysop. | 500 | Something broke, but it's on us. Let us know so we can investigate |
OK: updated. meow! | 200 | Success. Indicates that the record got added or modified. |
OK: IP matches existing record | 200 | Address matches what's already there, no action taken. |
Confirmed-working devices
DDNS is a de-facto standard, but everyone seems to implement it going off of vibes. Here's an incomplete list of working devices:
| Device | Notes | Quirks |
|---|---|---|
| MikroTik | doesn't have real DynDNS support, but you can use a generic HTTP requester in a Scheduler script | Setting triggers based on interface up/down is unreliable and causes excessive traffic. - please only use the scheduler |
| generic FRITZ!Box | name the "password" field as "token", use whatever as user. | |
| UniFi Cloud Gateways | UCGs use inadyn as DDNS update service. | Remove the protocol at the beginning https:// and replace <token> with %p and <ip> with %i so it looks like this: beta.servfail.network/ddns?token=%p and if you need the ip use beta.servfail.network/ddns?token=%p&ip=%i. As the username use whatever you like, as password put your token. |
Quirks
- VPNs and proxies may interfere with the first option. Additionally, only one from IPv4 and IPv6 may be set at a time - you will need to repeat requests through both stacks to set both of them.