DynDNS API: manage domains and records via API

With the IPv64.net API you manage your account from scripts: create and delete domains and DNS records, query Cloud Routers. This page describes the existing API (v1, api.php) with all actions and curl examples; for new projects there is API v2.

API v1 at a glance

  • Address: https://ipv64.net/api.php or https://ipv64.net/api
  • Structure: The action is a parameter of the request, e.g. ?get_domains. Queries use GET, creating uses POST (form data), deleting uses DELETE with an application/x-www-form-urlencoded body.
  • Response: always JSON.
  • Authentication: with an API key (32 characters).

The API is not meant for plain IP updates from routers and simple devices – use the update URL for that.

Authentication with API key

The API accepts two kinds of keys:

  • API keys from Account > API – with a name and an optional expiry date, as many as you like. Ideally one key per device or script.
  • the account API key of your account (see Account & limits).

Send the key in one of these ways:

  1. Header (recommended)
    Authorization: Bearer YOUR_API_KEY (also Authorization: Token …)
  2. HTTP basic auth
    User name or password is the key (32 characters), the other field can be anything.
  3. Parameter
    apikey, key or token via GET or POST.

If the key is missing or wrong, the API answers 401 with "info":"Unauthorized". If an API key has expired, info says API Key is expired. The account must be activated.

Keep keys secret

An API key gives full access to your account. Send it in the header rather than in the URL so it does not end up in logs, and give keys for scripts an expiry date.

Limits

  • Short-term limit: at most 5 API calls within 5 seconds per account. Above that the API answers 429 with "info":"Updateintervall overcommited".
  • Daily limit: Free 512 calls per day; Home / Supporter, Business and Company unlimited (see Account & limits). When it is reached you get 429 with "info":"API Limit". Every authenticated call counts, including one that fails at the short-term limit. The counter is reset daily.

The number of calls per key is shown in Account > API in the “Used” column.

Responses and status codes

Every response is a JSON object with

  • info – success or error (a text for authentication and limit errors),
  • status – the HTTP code as text, e.g. "201 Created",
  • a field named after the action or with an error description, e.g. "add_domain":"domain limit reached",
  • and the actual data.
HTTPMeaning
200Query successful
201Created
202Deletion accepted
400Invalid input (e.g. record already exists)
401Key missing, wrong or expired
403No permission, name not available or account class limit reached
429Short-term or daily limit reached

If a request contains no known action, the response contains no data.

Account information and logs

get_account_info

Returns your account data: e-mail, status, validity of the account class, registration date, counters (DynDNS updates, API calls, health check pings, SMS, CDN and VPN traffic), number of domains and health checks, and under account_class the limits of your account class (dyndns_domain_limit, dyndns_update_limit, dyndns_ttl, api_limit …). The counters cdn_traffic_input and cdn_traffic_output do not include CDN64 traffic; the CDN64 API returns that.

curl "https://ipv64.net/api.php?get_account_info" -H "Authorization: Bearer YOUR_API_KEY"
Contains keys

The response also contains update_hash (Account Update Token) and api_key (account API key). Do not store them unprotected in logs.

get_logs

The last 100 entries of the account log, each with subdomain, time, header and content.

curl "https://ipv64.net/api.php?get_logs" -H "Authorization: Bearer YOUR_API_KEY"

Query, create and delete domains

get_domains

All domains with their records. Per domain: updates, wildcard, domain_update_hash (domain key), ipv6prefix, dualstack, deactivated and records. Each record has record_id, content, ttl, type, praefix, last_update, record_key, deactivated and failover_policy.

curl "https://ipv64.net/api.php?get_domains" -H "Authorization: Bearer YOUR_API_KEY"

Response (shortened):

{
  "subdomains": {
    "yourdomain.ipv64.net": {
      "updates": "42", "wildcard": "1", "deactivated": "0",
      "records": [
        {"record_id": "1234", "type": "A", "praefix": "", "content": "192.0.2.10", "ttl": "60"}
      ]
    }
  },
  "info": "success", "status": "200 OK"
}

add_domain (POST)

Creates a domain, e.g. add_domain=yourdomain.ipv64.net. If the name ends in one of the IPv64.net domain suffixes, a DynDNS domain is created; otherwise it is created as your own domain (DNS only) – which requires an own-domain quota in your account class.

curl -X POST "https://ipv64.net/api.php" -H "Authorization: Bearer YOUR_API_KEY" \
  -d "add_domain=yourdomain.ipv64.net"

Errors (403, field add_domain): domainname not available (taken), domainname rules (name not allowed), domain limit reached.

del_domain (DELETE)

Deletes a domain immediately with all its records.

curl -X DELETE "https://ipv64.net/api.php" -H "Authorization: Bearer YOUR_API_KEY" \
  -d "del_domain=yourdomain.ipv64.net"

Success: 202; no permission: 403.

Create and delete DNS records

add_record (POST)

FieldContent
add_recordDomain, e.g. yourdomain.ipv64.net
praefixPrefix (subdomain), empty for the domain itself
typeA, AAAA, TXT, CNAME, MX, NS, SRV
contentContent of the record
curl -X POST "https://ipv64.net/api.php" -H "Authorization: Bearer YOUR_API_KEY" \
  -d "add_record=yourdomain.ipv64.net" -d "praefix=nas" -d "type=A" -d "content=192.0.2.20"

If you add ?gettoken to the URL (https://ipv64.net/api.php?gettoken), the response also contains record_token – the record token for the update URL.

Errors: 400 with dns record already there, invalid record informations, domain not found or record rejected by nameserver.

Let's Encrypt DNS-01: ACME clients create _acme-challenge TXT records. If they guess the zone wrong (e.g. add_record=_acme-challenge.example.de for your own domain example.de), the API puts domain and prefix back together based on your existing domains. The longest matching domain of your account is always used.

del_record (DELETE)

Deletes a record either by its ID (from get_domains) or by domain, prefix, type and content:

curl -X DELETE "https://ipv64.net/api.php" -H "Authorization: Bearer YOUR_API_KEY" \
  -d "del_record=1234"

curl -X DELETE "https://ipv64.net/api.php" -H "Authorization: Bearer YOUR_API_KEY" \
  -d "del_record=yourdomain.ipv64.net" -d "praefix=_acme-challenge" -d "type=TXT" -d "content=TOKEN_FROM_ACME_CLIENT"

Success: 202; not found or no permission: 403.

Health checks and notifications

You manage the health checks together with notification channels, maintenance windows and nodes through API v2 under /api/v2/hc2/… – create, change, pause and delete checks, query measurements and incidents. All endpoints with curl examples are listed under Health checks API.

A cron job that only needs to report in does not need the API: a push check has its own push URL with its token (see Push checks).

In addition, API v1 returns your blocker nodes for the v64 blocklist with get_blockers (GET).

Cloud Router and VPN

ActionMethodParameters and effect
get_cr_allGETAll Cloud Routers with gateways and peers in one nested list (including the peers’ WireGuard keys).
get_cloudroutersGETCloud Routers with server and location.
get_gatewaysGETAll gateways with status, addresses, WireGuard port and traffic.
get_peersGETAll peers with addresses, keys, traffic and last handshake.
get_cr_serverGETPublic Cloud Router servers with location and status.
add_routerPOSTvr=0 (or without vr) creates a new Cloud Router; vr=ROUTER_ID adds a gateway to that router. Limit reached: 403.
add_gateway_peerPOSTToken of the gateway; creates a peer there.
del_peerDELETEDelete a peer
del_vpn_gwDELETEToken of the gateway; deletes the gateway with all peers.

What Cloud Routers, gateways and peers are is explained on the Cloud Router page.

API v2

Besides API v1 there is API v2: a RESTful JSON API at https://ipv64.net/api/v2 for DynDNS, DNS records, health checks, DNS failover, status pages, offline pages, CDN64, Cloud Router and DNS64. The main differences:

  • real resource paths and HTTP methods (GET, POST, PATCH, DELETE), JSON bodies,
  • authentication with the same API keys, but only via header (Authorization: Bearer … or X-API-Key: …),
  • uniform errors according to RFC 9457 with an error code, cursor-based paging,
  • its own limits against overload, independent of your account class’s API limit, with the headers RateLimit-Limit and RateLimit-Remaining,
  • a complete OpenAPI 3.1 description for import into Postman, Insomnia or code generators.
curl "https://ipv64.net/api/v2/me" -H "Authorization: Bearer YOUR_API_KEY"

The full documentation with all endpoints is at ipv64.net/api_v2_docs. API v1 and the update URL stay unchanged.

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