DynDNS update: update URL, DynDNS2 protocol and responses

Your router, NAS or script reports its current IP address to IPv64.net via the update URL. The updater speaks the DynDNS2 protocol (/nic/update), understands the parameter names of many other providers and can detect your IP on its own. This page lists all parameters, responses and limits.

Update URL and endpoints

The IPv64.net DynDNS update URL is available at three addresses. All three behave the same:

AddressNote
https://ipv64.net/nic/updateDynDNS2 path, recommended for routers and clients such as ddclient or inadyn
https://ipv64.net/updateShort form
https://ipv64.net/update.phpOriginal address

The updater accepts GET and POST. The response is JSON by default; you get the classic DynDNS2 words such as good or nochg with output=min (see Responses).

To force the automatically detected address to be IPv4 or IPv6, call the updater via one of the two host names that only have one address family:

  • https://ipv4.ipv64.net/nic/update – connection over IPv4 only
  • https://ipv6.ipv64.net/nic/update – connection over IPv6 only

You find the right update URL for your domain on ipv64.net/dyndns in the domain settings. How to create domains and records is explained under DynDNS domains; ready-made device guides are under Routers & devices.

Authentication: update token and domain key

An update needs one of three keys. All are 32 characters long and are shown in your account; the narrower the key, the safer:

KeyValid forWhere to find it
Record token (security level 3, high)exactly one record (its prefix)in the individual record of the domain
Domain key / domain update token (level 2, recommended)this one domain onlydomain settings, “Domain Update URL”
Account Update Token (level 1, low)all domains of your accountdomain settings (“Account Update URL”) and as “Account Update Token” in the account box (see Account)

With a domain key or record token you can leave out the domain parameter – the updater then uses the key’s domain. With the Account Update Token you always have to name the domain. You can regenerate every key in the web interface; the old one stops working. The updater does not accept an e-mail/password combination.

Passing the key

You can send the key in three ways. Many routers only have fields for user name and password – then put the key into one of them.

  1. As a parameter
    One of the names key, token, user, username, pwd, pass or password (GET or POST).
  2. Via HTTP basic auth
    User name and password are free; one of the two fields must be the key (24 or 32 characters). Fill the other one with any value, e.g. none. If the key is missing entirely, the updater answers 401 with the header WWW-Authenticate: Basic realm="IPv64" so that clients send their credentials.
  3. Via header
    Authorization: Bearer YOUR_DOMAIN_KEY (also Authorization: Token …).
Protect your key

With GET requests the key is part of the URL and ends up in logs, for example. Prefer the domain key or record token over the Account Update Token – then a leak only affects one domain.

All parameters

The updater understands the parameter names of many routers and DynDNS clients. If several names mean the same, the first one that is filled wins.

ParameterMeaning
key, token, user, username, pwd, pass, passwordKey (see Authentication)
domain, domains, host, hostname, zone, host_id (GET only)Domain, e.g. yourdomain.ipv64.net. Separate several domains with commas. Optional with a domain key or record token.
ip, ip4, ipv4, myip, myip4, myipv4IPv4 address for the A record. auto = detect automatically. If the value contains a comma (e.g. “IPv6,IPv4” as sent by some Speedport routers), every valid address is used.
ip6, ipv6, myip6, myipv6IPv6 address for the AAAA record. auto = detect automatically.
praefixPrefix (subdomain) of the record within the domain, e.g. nas for nas.yourdomain.ipv64.net. Empty = the domain itself.
ipv6prefix, ip6lanprefix, ip6prefix, ipv6lanprefix, prefixIPv6 prefix of your network, e.g. 2001:db8:1234:5600::/64, or auto (see IPv6 prefix, example URLs).
onlyprefixUpdate the IPv6 prefix only, no IP addresses. The parameter just has to be present.
healthcheck, healthtokenToken of a push check. After every processed address – also with nochg – the updater additionally calls this check's push URL. The answer is in the field healthcheck (OK for a push check). The push counts against the daily health check quota like any other.
dkeyDomain key of a domain to select the domain; only together with a valid key in key.
output (GET only)full (default, JSON), min (a single word, plain text) or none (no output)
howismyip (GET only)Without a key: only shows the IP address you are connecting from
praefix is not prefix

praefix (German spelling with “ae”) selects the record within the domain, i.e. the subdomain. prefix, on the other hand, is an alias for the IPv6 prefix. Sending prefix=nas does not select the subdomain “nas” but sets an invalid IPv6 prefix.

For subdomains, pass the domain in domain and the front part in praefix.

If the A or AAAA record for the domain and prefix does not exist yet, the updater creates it with the first update.

Automatic IP detection

If you send neither an IPv4 nor an IPv6 address (or just auto), the updater uses the address your request comes from. That is always only one address – depending on whether your device uses IPv4 or IPv6 for the connection. For dual stack there are two ways:

  • two calls, one via ipv4.ipv64.net and one via ipv6.ipv64.net, or
  • send both addresses explicitly (ip=…&ip6=…).

Which address IPv64.net sees from you is shown by https://ipv64.net/update.php?howismyip.

Only public addresses are accepted. The updater rejects private and reserved ranges (e.g. 192.168.0.0/16, 10.0.0.0/8, fe80::/10) and IPv4-mapped IPv6 addresses (::ffff:…). It strips square brackets and a zone suffix such as %eth0.

In the domain settings, “Ignore IPv4 / IPv6 on the updater (/nic/update)” lets you hide one address family – useful with DS-Lite or CG-NAT when the router reports an unusable IPv4. The response then shows "ignore" for that family.

Updating the IPv6 prefix

When your provider changes the IPv6 prefix, the addresses of all devices in your home network change. Instead of reporting every device, the router sends only the prefix. AAAA records whose content is only the interface ID (starts with ::, e.g. ::211:22ff:fe33:4455) are then combined with the new prefix by IPv64.net and written to DNS shortly afterwards. How to create such records and how the addresses are built is explained under IPv6 prefix and interface ID.

Values for ipv6prefix

Instead of ipv6prefix you can also use ip6lanprefix, ip6prefix, ipv6lanprefix and prefix – whatever your router offers.

ValueEffect
2001:db8:1234:5600::/64Fixed prefix with length. It must end with ::/ and the length (e.g. ::/56 or ::/64); without a length you get format error. The first 64 bits are used.
autoThe /64 of the IPv6 address the request comes from. Only works if the request arrives via IPv6 – use ipv6.ipv64.net for that. If it arrives via IPv4, nothing happens (the response then contains no ipv6prefix).
Router placeholder, e.g. <ip6lanprefix>The router inserts the prefix of its home network itself, e.g. 2001:db8:1234:5600::/64.

With or without onlyprefix: Without onlyprefix, a call updates the prefix and, as usual, the A and AAAA records of the domain (sent or automatically detected address) – this is how the FRITZ!Box works. With onlyprefix only the prefix is stored, the domain's addresses stay. The parameter needs no value, &onlyprefix is enough.

Example URLs for the IPv6 prefix

Detect the prefix automatically, change nothing else – e.g. via cron on a device in your home network:

https://ipv6.ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&ipv6prefix=auto&onlyprefix

Set a fixed prefix:

https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&ipv6prefix=2001:db8:1234:5600::/64&onlyprefix

Prefix and addresses in one call – A and AAAA record of the domain plus all device records:

https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&ip=192.0.2.10&ip6=2001:db8:1234:5600::1&ipv6prefix=2001:db8:1234:5600::/64

With the Account Update Token – the domain must be included here:

https://ipv6.ipv64.net/nic/update?key=YOUR_UPDATE_TOKEN&domain=yourdomain.ipv64.net&ipv6prefix=auto&onlyprefix

Via POST with a bearer token:

curl -X POST "https://ipv6.ipv64.net/nic/update" \
  -H "Authorization: Bearer YOUR_DOMAIN_KEY" \
  -d "ipv6prefix=auto" -d "onlyprefix=1"

Router with placeholder (FRITZ!Box, setup under FRITZ!Box with IPv6 prefix):

https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&ip=<ipaddr>&ip6=<ip6addr>&ip6lanprefix=<ip6lanprefix>

Responses

With onlyprefix, the JSON response only contains the result for the prefix:

// new prefix stored, 3 device records are being adjusted
{"info":"good","updated_ipv6prefix_ips":"3","ipv6prefix":"2001:db8:1234:5600::/64","status":"success"}
// prefix unchanged
{"info":"nochg","ipv6prefix":"2001:db8:1234:5600::/64","status":"success"}
// prefix not recognised, e.g. without /length
{"info":"","ipv6prefix":"format error"}

With output=min you get good, nochg or 911 on an error. Without onlyprefix, status and info follow the address update, and ip is added as with every update. updated_ipv6prefix_ips counts all AAAA records of the domain with an interface ID.

Responses and status codes

The default is JSON (output=full). The object contains status, info and – depending on the request – ip (with ipv4/ipv6), ipv6prefix and healthcheck:

{"info":"good","status":"success","ip":{"ipv4":"192.0.2.10"}}

With output=min you get a single word as plain text, as DynDNS2 clients expect. output=none returns no body, only the HTTP status code.

HTTPJSON status / infooutput=minMeaning
200success / goodgoodIP was changed (or record newly created)
200success / nochgnochgIP was already current, nothing changed
400400 Bad Request / No correct IP transmitted911No valid public IP address
401401 Unauthorized / badauthbadauthKey missing or wrong, account not active or domain deactivated
404404 Not Found / nohostnohostDomain not found or does not match the key
409409 Conflict / CNAME is set.911There is a CNAME on this prefix; A/AAAA are not set
429429 Too Many Requests / Update Cooldown - 10secabuseToo many requests in a short time
429429 Too Many Requests / Updateintervall overcommitedabuseDaily update limit reached

Special values in the ip field: "ignore" means the address family is hidden in the domain settings; "cdn" means that for this address family the name only has the record of a CDN64 edge server; it stays unchanged (info is then nochg unless something else was changed). If the name in CDN64 has A/AAAA records of its own, the updater updates them as usual in the background while DNS keeps pointing to the edge servers (see CDN64 → DynDNS updates).

With several domains in one call, the response merges all results into one object; later domains overwrite the fields of earlier ones. For troubleshooting, call the domains one by one.

Limits and rate limit

  • Cooldown: At most three updater requests within 10 seconds per account. Technically the updater counts the entries in the account log of the last 10 seconds; if there are more than two, it answers 429 with Update Cooldown - 10sec.
  • Daily limit: The number of DynDNS updates per day depends on the account class (Free: 64, Home / Supporter: 1024, Business and Company: unlimited – see Account & limits). Every processed address per domain counts, including a nochg. A call with IPv4 and IPv6 therefore counts twice.
  • Reset: The counter is reset to 0 once a day.
Rule of thumb for scripts

With a Free account, one call every 30 minutes for one address is fine (48 updates per day). Better: let the script check whether the IP has changed and only call the updater then. Routers usually do this on their own.

Examples with curl and wget

Domain key only, IP detected automatically

curl "https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY"

Domain and both addresses

curl "https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&domain=yourdomain.ipv64.net&ip=192.0.2.10&ip6=2001:db8::10"

Record with prefix (nas.yourdomain.ipv64.net)

curl "https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&domain=yourdomain.ipv64.net&praefix=nas&ip6=2001:db8::20"

Basic auth and DynDNS2 response

curl -u "none:YOUR_DOMAIN_KEY" "https://ipv64.net/nic/update?hostname=yourdomain.ipv64.net&myip=192.0.2.10&output=min"

Bearer token via POST

curl -X POST "https://ipv64.net/nic/update" \
  -H "Authorization: Bearer YOUR_DOMAIN_KEY" \
  -d "domain=yourdomain.ipv64.net" -d "ip=192.0.2.10"

Dual stack, detected automatically, with wget

wget -qO- "https://ipv4.ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&output=min"
wget -qO- "https://ipv6.ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&output=min"

Several domains with the Account Update Token

curl "https://ipv64.net/nic/update?key=YOUR_UPDATE_TOKEN&domain=yourdomain.ipv64.net,seconddomain.ipv64.net"

A single record with the record key

curl "https://ipv4.ipv64.net/nic/update?key=YOUR_RECORD_KEY"
curl "https://ipv6.ipv64.net/nic/update?key=YOUR_RECORD_KEY"

The first call sets the A record, the second the AAAA record of the record the key belongs to – each with the automatically detected address.

Update with a heartbeat to a health check

curl "https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&healthcheck=YOUR_HEALTHCHECK_TOKEN"

If the update stops, the push check reports down after its period.

Without output (for cron)

curl -s "https://ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&output=none"

IPv6 prefix only

curl "https://ipv6.ipv64.net/nic/update?key=YOUR_DOMAIN_KEY&ipv6prefix=auto&onlyprefix"

More variants under Example URLs for the IPv6 prefix.

Which address does IPv64.net see?

curl "https://ipv4.ipv64.net/update.php?howismyip"
curl "https://ipv6.ipv64.net/update.php?howismyip"

For regular updates via cron see Routers & devices.

Troubleshooting

  • badauth: Check that the key is complete (32 characters, case-sensitive) and that it was replaced after regenerating. With basic auth the key must be in the user name or the password. The account must be activated and the domain must not be deactivated.
  • nohost: Check the spelling of the domain. A domain key only works for its own domain – with a different domain in the parameter you get nohost.
  • No correct IP transmitted: The router reports a private address (e.g. behind a second router or with CG-NAT). Let the IP be detected automatically or use ipv4.ipv64.net.
  • Wrong address family: Automatic detection returns IPv6 but you want IPv4 (or the other way round) – use the matching host name ipv4.ipv64.net or ipv6.ipv64.net.
  • CNAME is set.: There is a CNAME on the prefix. Delete it or use a different prefix.
  • abuse / 429: Router or script call too often. Increase the interval or only update when the IP changes.
  • No effect in DNS: The updater stores the new IP immediately, the name server picks it up shortly afterwards. After that, the record’s TTL still applies in resolver caches.

Every successful update is listed in the account log at ipv64.net/logs (“Update A/AAAA Record - GOOD”). More help is in the FAQ and the v64.tech forum.

Found a mistake or missing something? Tell us in the v64.tech forum. · Updated: 2026-10-29