CDN64-API: Namen, Tunnel und Portmapper per API v2 verwalten
Mit der CDN64-API (Teil der API v2 von IPv64.net) schaltest du Namen in CDN64 ein und aus, setzt Ziel, Zugriffsliste und Portmapper, pausierst Namen und fragst Kontingent, Traffic und Ereignisse ab. Dieselben Endpunkte nutzen auch die Seite ipv64.net/cdn64 und Node64.
Grundlagen: Adresse, Anmeldung, Format
Alle Endpunkte liegen unter der Basis-URL der API v2; die CDN64-Pfade beginnen mit /cdn64o:
https://ipv64.net/api/v2/cdn64o
Authentifizierung mit API-Key
Du meldest dich mit einem API-Key aus Account → API oder dem API-Key deines Kontos an – per Header, nicht als Parameter:
Authorization: Bearer DEIN_API_KEY
X-API-Key: DEIN_API_KEY
Einer der beiden Header genügt. Fehlt der Key, antwortet die API mit 401 und unauthenticated; ist er falsch, abgelaufen oder das Konto nicht aktiv, mit 401 und invalid_token. Mit dem Header X-IPv64-Act-As (Konto-ID oder E-Mail) handelst du für ein Konto, das dir per Account-Freigabe die Verwaltung erlaubt hat.
Anfragen und Antworten
- Anfragen mit Body schickst du als JSON (
Content-Type: application/json); form-urlencoded geht auch. Der Body darf höchstens 1 MB groß sein. - Erfolg:
200bzw.201(angelegt) mit dem Ergebnis unterdata, z. B.{"data": {…}}. Löschen antwortet mit204ohne Inhalt. - Fehler: JSON nach RFC 9457 (
application/problem+json) mittype,title,status,detailundcode, bei Eingabefehlern zusätzlichfield. Alle Codes stehen unter Fehlercodes. - Zeiten sind ISO 8601 mit Zeitzone, z. B.
2026-10-26T14:05:00+01:00. - {id} eines Namens ist die numerische ID oder der vollständige Name, z. B.
/cdn64o/hosts/www.deinedomain.ipv64.net.
Rate-Limit
Die API v2 begrenzt die Anfragen unabhängig vom API-Limit deiner Kontoklasse: je Konto 300 Anfragen auf einmal, danach 10 pro Sekunde; je IP-Adresse 600 auf einmal, danach 20 pro Sekunde. Fehlgeschlagene Anmeldungen sind je IP auf 20 auf einmal und danach 12 pro Minute begrenzt. Jede Antwort trägt RateLimit-Limit und RateLimit-Remaining; darüber kommt 429 mit Retry-After (Sekunden).
Alle Endpunkte
| Methode | Pfad | Zweck |
|---|---|---|
| GET | /cdn64o | Übersicht: Kontingent, Edge-Server, Tunnel, Namen |
| POST | /cdn64o/hosts | Namen einschalten |
| GET | /cdn64o/hosts/{id} | Namen abfragen |
| PATCH | /cdn64o/hosts/{id} | Modus, Tunnel, Pause, WAF/JA4 ändern |
| DELETE | /cdn64o/hosts/{id} | Namen ausschalten |
| PUT | /cdn64o/hosts/{id}/target | Ziel setzen (nur Modus 3) |
| GET, PUT | /cdn64o/hosts/{id}/acl | Zugriffsliste |
| GET, POST | /cdn64o/hosts/{id}/mappings | Portmapper abfragen, anlegen |
| DELETE | /cdn64o/hosts/{id}/mappings/{mid} | Portmapper löschen |
| GET | /cdn64o/hosts/{id}/events | Ereignisse eines Namens |
| GET, PUT | /cdn64o/hosts/{id}/servers | Edge-Server des Namens, Anzahl und Verbindungen wählen (Business, Company) |
| GET | /cdn64o/stats | Statistik je Name und Tag |
| GET | /cdn64o/protection | Schutz-Statistik des Kontos |
| POST | /cdn64o/tunnels | Tunnel anmelden (macht Node64) |
| POST | /cdn64o/tunnels/{id}/token | neuen Tunnel-Token ausstellen |
| DELETE | /cdn64o/tunnels/{id} | Tunnel entfernen |
| GET, PUT | /cdn64o/tunnels/{id}/servers | für alle Namen eines Tunnels (ältere Node64) |
| GET, PUT | /cdn64o/tunnels/{id}/lists | Sperr- und Freigabeliste des Tunnels (macht Node64) |
| GET | /plans | Limits der Kontoklassen (ohne Anmeldung) |
Die OpenAPI-Beschreibung der API v2 (https://ipv64.net/api/v2/openapi.json) und die Seite ipv64.net/api_v2_docs beschreiben die übrigen Bereiche der API v2.
Übersicht abrufen: GET /cdn64o
Liefert in einem Aufruf dein Kontingent, die Edge-Server, deine Tunnel und alle Namen deines Kontos in CDN64. Eine eigene Liste GET /cdn64o/hosts gibt es nicht – die Namen stehen hier unter hosts.
curl "https://ipv64.net/api/v2/cdn64o" -H "Authorization: Bearer DEIN_API_KEY"
{
"data": {
"quota": {
"domains": {"used": 2, "old_cdn": 0, "limit": 5},
"mappings": {"used": 1, "old_cdn": 0, "limit": 10},
"traffic_mb": {"used": 1834.2, "old_cdn": 0, "limit": 102400},
"bandwidth_mbit": 1000
},
"edges": [
{"name": "…", "host": "…", "port": 7844, "ips": ["2001:db8::7", "192.0.2.7"]}
],
"tunnels": [ … ],
"hosts": [ … ]
}
}
| Feld | Bedeutung |
|---|---|
quota.domains | belegte CDN-Domains (used), davon im früheren IPv64-CDN (old_cdn), Grenze der Kontoklasse (limit) |
quota.mappings | Portmapper, gleiche Felder |
quota.traffic_mb | Traffic dieses Monats in MB (ein + aus) und Grenze in MB |
quota.bandwidth_mbit | Bandbreite der Klasse in Mbit/s, 0 = unbegrenzt |
edges | die Edge-Server, zu denen der Tunnel der fragenden Node verbindet (Kopfzeile X-Node64-Node; ohne sie alle Server der Tunnel des Kontos): Name, Hostname, Tunnel-Port, IP-Adressen, bei einem gerade ausgefallenen Server standby (true; die Node verbindet weiter, um seine Rückkehr zu bemerken), im Failover replaced_by (Ersatz) bzw. beim Ersatz stands_in (der ausgefallene), beim Lastausgleich am neuen Server balance_from (der alte, fällt weg, sobald der Tunnel auf dem neuen steht). Die Server je Tunnel stehen in tunnels, die je Name in hosts (Server je Name). |
tunnels | deine Tunnel (siehe Tunnel) |
hosts | deine Namen, je als Namens-Objekt |
Edge-Server eines Namens: GET und PUT /cdn64o/hosts/{id}/servers
Wie viele Edge-Server ein Name nutzt, legt die Kontoklasse fest (Server je Name). GET zeigt die Zuteilung, mit PUT wählen Business (1 oder 2 Server, 1 oder 2 Verbindungen) und Company (1 bis alle Server, 1 bis 4 Verbindungen) für diesen Namen die Anzahl der Server (count) und die Verbindungen je Server (sessions; in Modus 3 ohne Wirkung). Ein fehlendes Feld bleibt. Node64 bietet dafür einen Knopf in der Zeile des Proxy-Hosts (Spalte CDN64). Dieselbe Auswahl steht im Namens-Objekt unter servers.
curl -X PUT "https://ipv64.net/api/v2/cdn64o/hosts/www.deinedomain.ipv64.net/servers" -H "Authorization: Bearer DEIN_API_KEY" \
-H "Content-Type: application/json" -d '{"count": 3, "sessions": 2}'
{
"data": {
"count": 3, "choice": 3, "max": 4, "all": true, "total": 4, "selectable": true,
"assigned": ["…", "…", "…"],
"active": ["…", "…", "…"],
"sessions": 2, "sessions_max": 4
}
}
| Feld | Bedeutung |
|---|---|
count | Anzahl der Server des Namens; im PUT die gewünschte Anzahl, bei Company 0 = alle (auch künftige Server). Eine Zahl bleibt fest, auch wenn Server dazukommen. |
choice | die gewählte Anzahl (0 = Höchstwert der Klasse bzw. bei Company alle) |
sessions, sessions_max | Verbindungen je Server (im PUT die gewünschte Zahl) und höchstens wählbar laut Klasse |
max, total | höchstens wählbar bzw. Zahl der Edge-Server insgesamt |
all | true: die Klasse darf alle Server nutzen (Company) |
selectable | true: die Anzahl ist wählbar (Business, Company) |
assigned | die zugeteilten Server (Namen) |
active | die Server, die gerade im DNS des Namens stehen – fällt ein zugeteilter länger als 3 Minuten aus, steht hier sein Ersatz |
replaced | Failover: ausgefallener Server → Ersatz (leer ohne Failover; dasselbe Feld hat auch jeder Name) |
Fehler: Klasse ohne Wahl 403 (plan_not_allowed), Anzahl außerhalb der Grenzen 422 (out_of_range), fremder Name 404. Nach einem PUT stellt IPv64.net das DNS des Namens um (Ereignis servers_changed); der Tunnel seiner Node verbindet binnen einer Minute zu den neuen Servern.
GET und PUT /cdn64o/tunnels/{id}/servers (gleiche Felder) gibt es weiter für ältere Node64: Das PUT setzt die Auswahl für alle Namen des Tunnels (und für den Tunnel selbst, solange er keine Namen hat), das GET zeigt die seines ersten Namens.
Namen einschalten, ändern und ausschalten
Namen einschalten: POST /cdn64o/hosts
| Feld | Pflicht | Bedeutung |
|---|---|---|
fqdn | ja | Name, z. B. www.deinedomain.ipv64.net; muss in einer aktiven Domain deines Kontos liegen |
mode | nein | 1 (Standard), 2 oder 3 – siehe Modi |
tunnel_id | bei Modus 1 und 2 | ID eines Tunnels deines Kontos, z. B. tn_… |
source, target, scheme, port, … | nein (nur Modus 3) | das Ziel, Felder wie bei PUT …/target |
Vor dem Einschalten prüft IPv64.net: Kontoklasse mit CDN-Domains, freies Kontingent und Traffic, Name in deinem Konto, Name noch nicht in CDN64, Domain nicht im früheren CDN, kein CNAME und kein aktives DNS Failover auf dem Namen, bei Modus 3 mit source=records mindestens eine öffentliche A/AAAA-Adresse. Danach stellt IPv64.net das DNS um (siehe DNS). Scheitert das, wird nichts geändert (502, dns_update_failed). Lässt sich auch das Zurücknehmen nicht schreiben, bleibt der Name angelegt (ebenfalls 502, die ID steht in detail); entferne ihn dann später mit DELETE /cdn64o/hosts/{id}. Antwort: 201 mit dem Namens-Objekt.
curl -X POST "https://ipv64.net/api/v2/cdn64o/hosts" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"fqdn":"www.deinedomain.ipv64.net","mode":3,"source":"fixed","target":"server.example.org","scheme":"https","port":443}'
Ein Name in Modus 1 an einem bestehenden Tunnel:
curl -X POST "https://ipv64.net/api/v2/cdn64o/hosts" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"fqdn":"cloud.deinedomain.ipv64.net","mode":1,"tunnel_id":"tn_DEINE_TUNNEL_ID"}'
Namen in Modus 1 und 2 legt normalerweise Node64 an und hält sie mit seinen Proxy-Hosts abgeglichen. Ohne Node64, die den Tunnel tatsächlich aufbaut, ist ein solcher Name nicht erreichbar. Richte Modus 1 und 2 deshalb am besten in Node64 ein.
Namen abfragen: GET /cdn64o/hosts/{id}
curl "https://ipv64.net/api/v2/cdn64o/hosts/www.deinedomain.ipv64.net" -H "Authorization: Bearer DEIN_API_KEY"
{
"data": {
"id": 42, "fqdn": "www.deinedomain.ipv64.net", "mode": 3, "wildcard": false,
"status": "active", "blocked_reason": null, "paused": false, "paused_at": null, "error": null,
"tunnels": [], "domain_id": 1234, "edges": [ … ], "servers": { … },
"traffic_month": {"bytes_in": 1048576, "bytes_out": 52428800, "conns": 310, "requests": 2048, "rejected": 3},
"created_via": "web", "created_at": "2026-10-20T09:12:00+02:00", "updated_at": "2026-10-20T09:12:01+02:00",
"target": {"source": "fixed", "target": "server.example.org", "addrs": null, "port": 443, "scheme": "https",
"verify_tls": false, "prefer_ipv6": true, "frontend": 2, "websockets": true, "cache_mb": 0, "cache_minutes": 10},
"acl": {"default": "off", "list": []},
"mappings": [],
"waf": true, "ja4": "block",
"protection": {"blocked_list": 120, "blocked_acl": 0, "blocked_flood": 4, "blocked_limit": 2, "blocked_waf": 37,
"blocked_ja4": 0, "ja4_hits": 15, "blocked_ips": 61, "conns": 310, "conns_v4": 88}
}
}
| Feld | Bedeutung |
|---|---|
id, fqdn | ID und Name |
mode | 1, 2 oder 3 |
wildcard | Wildcard der Domain ist eingeschaltet |
status | active, blocked (gesperrt, Grund in blocked_reason, z. B. traffic) oder kurz beim Anlegen pending |
paused, paused_at | Name pausiert, seit wann |
error | letzter Fehler oder null |
tunnels | IDs der zugeordneten Tunnel in Reihenfolge der Priorität (Modus 1 und 2) |
domain_id | ID der Domain, in der der Name liegt |
traffic_month | Zahlen dieses Monats: Bytes ein/aus, Verbindungen, Anfragen, Abweisungen |
created_via | web (ipv64.net/cdn64) oder node (API, Node64) |
target | Ziel bei Modus 3 (sonst null); bei source=records stehen die aktuellen Adressen in addrs |
acl | Zugriffsliste |
mappings | Portmapper |
waf, ja4 | WAF-Muster und JA4-Stufe des Namens |
protection | Schutz-Zahlen der letzten 30 Tage, Felder wie bei GET /cdn64o/protection |
Modus und Tunnel ändern: PATCH /cdn64o/hosts/{id}
Alle Felder sind optional; geändert wird nur, was du mitschickst.
mode– zwischen1und2wechseln. Ein Wechsel von oder zu Modus 3 geht nicht (422,mode_change_not_possible); dafür den Namen aus- und neu einschalten.tunnels– Liste von Tunnel-IDs deines Kontos, nicht leer. Die Reihenfolge ist die Priorität: Es bedient der erste verbundene Tunnel. Die Liste ersetzt die bisherige Zuordnung.paused–trueoderfalse(siehe unten).waf,ja4– Schutz auf den Edge-Servern (siehe unten).
curl -X PATCH "https://ipv64.net/api/v2/cdn64o/hosts/42" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"tunnels":["tn_ERSTE_NODE","tn_ZWEITE_NODE"]}'
Pausieren und fortsetzen
Mit paused: true nehmen die Edge-Server für den Namen nichts mehr an und trennen offene Verbindungen; das DNS bleibt auf den Servern. Mit paused: false geht es weiter. Antwort: das Namens-Objekt.
curl -X PATCH "https://ipv64.net/api/v2/cdn64o/hosts/www.deinedomain.ipv64.net" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"paused":true}'
WAF-Muster und JA4 schalten
waf (true/false) schaltet die WAF-Muster (wirken in Modus 2 und 3). ja4 setzt die Stufe für Angriffs-Werkzeuge: off, count (nur zählen) oder block (alle Modi); andere Werte ergeben 422 (invalid_field). Steht ja4_global in GET /cdn64o/protection auf count, zählen die Server auch bei block nur. Jede Änderung steht in den Ereignissen (waf).
curl -X PATCH "https://ipv64.net/api/v2/cdn64o/hosts/42" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"waf":true,"ja4":"block"}'
Namen ausschalten: DELETE /cdn64o/hosts/{id}
Schaltet den Namen aus: Die Records der Edge-Server werden gelöscht, deine ursprünglichen A/AAAA-Records wieder aktiviert, Ziel, Zugriffsliste, Portmapper und Zertifikat entfernt. Antwort: 204. Lehnt der DNS-Server die Änderung ab, kommt 502 (dns_update_failed) – dann später erneut versuchen.
curl -X DELETE "https://ipv64.net/api/v2/cdn64o/hosts/42" -H "Authorization: Bearer DEIN_API_KEY"
Ziel setzen (Modus 3): PUT /cdn64o/hosts/{id}/target
Nur für Namen in Modus 3 (sonst 409, not_mode_3). Felder, die du weglässt, behalten ihren bisherigen Wert. Dieselben Felder nimmt POST /cdn64o/hosts beim Einschalten an; dort gelten die Standardwerte.
| Feld | Werte | Standard | Bedeutung |
|---|---|---|---|
source | records, fixed | records | records = die aktuellen A/AAAA-Records des Namens, fixed = festes Ziel aus target |
target | öffentliche IP oder Hostname, bis 253 Zeichen | – | nur bei fixed; private, CGNAT-, Dokumentations- und Server-eigene Adressen sind nicht erlaubt |
scheme | https, http | https | Protokoll zum Ziel; ein Wechsel setzt port auf 443 bzw. 80, wenn du keinen Port mitschickst |
port | 1–65535 | 443 | Port am Ziel |
verify_tls | bool | false | Zertifikat des Ziels prüfen |
prefer_ipv6 | bool | true | zuerst per IPv6 verbinden |
frontend | 0–3 | 2 | 0 = keine Webseite (nur Portmapper), 1 = nur HTTP, 2 = HTTPS mit Umleitung von Port 80, 3 = nur HTTPS |
cache_mb | 0 bis Cache-Größe der Klasse | 0 | Cache je Name in MB, 0 = aus; darüber 422, cache_limit |
cache_minutes | 1–1440 | 10 | ungenutzte Cache-Einträge fallen nach dieser Zeit weg |
curl -X PUT "https://ipv64.net/api/v2/cdn64o/hosts/42/target" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"source":"records","scheme":"http","port":8080,"frontend":2,"cache_mb":256}'
Antwort: das Namens-Objekt. Die Edge-Server übernehmen das neue Ziel innerhalb weniger Sekunden.
Zugriffsliste: GET und PUT /cdn64o/hosts/{id}/acl
Die Erlauben-/Sperrliste wirkt auf den Edge-Servern, in allen Modi und auch für die Portmapper des Namens (in Modus 1 nach der IP aus dem Verbindungsaufbau). PUT ersetzt die ganze Liste.
| Feld | Werte | Bedeutung |
|---|---|---|
default (Pflicht) | off, allow, deny | off = Liste aus; allow = alle außer der Liste; deny = nur die Liste |
list | Liste oder kommagetrennter Text | IP-Adressen und Netze (IPv4/IPv6, CIDR), höchstens 200; doppelte Einträge fallen weg. Gespeichert wird einheitlich (::ffff:203.0.113.0/120 als 203.0.113.0/24); Adressen mit Zone (fe80::1%eth0) sind ungültig |
curl -X PUT "https://ipv64.net/api/v2/cdn64o/hosts/42/acl" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"default":"deny","list":["192.0.2.0/24","2001:db8:1234::/48"]}'
{"data": {"default": "deny", "list": ["192.0.2.0/24", "2001:db8:1234::/48"]}}
Portmapper: /cdn64o/hosts/{id}/mappings
Ein Portmapper öffnet auf allen Edge-Servern einen Port zwischen 50000 und 62000 und reicht TCP oder UDP weiter: in Modus 3 an den Port deines Ziels, in Modus 1 und 2 durch den Tunnel an einen Stream in Node64 (target_port = Port des Streams in der Node).
Anlegen: POST
| Feld | Pflicht | Bedeutung |
|---|---|---|
target_port | ja | Port am Ziel bzw. Stream, 1–65535 |
transport | nein | tcp (Standard) oder udp |
listen_port | nein | Wunschport der Server, 50000–62000; belegt = 409, port_in_use |
name | nein | Bezeichnung, bis 64 Zeichen, z. B. WireGuard |
Ohne listen_port nimmt IPv64.net den Port, den ein anderer Portmapper des Namens für denselben Ziel-Port schon nutzt, sonst den Ziel-Port selbst, wenn er im Bereich frei ist, sonst einen freien Port. Antwort: 201 mit allen Portmappern des Namens.
curl -X POST "https://ipv64.net/api/v2/cdn64o/hosts/42/mappings" \
-H "Authorization: Bearer DEIN_API_KEY" -H "Content-Type: application/json" \
-d '{"name":"WireGuard","transport":"udp","target_port":51820}'
{"data": [{"id": 7, "name": "WireGuard", "listen_port": 55349, "transport": "udp", "target_port": 51820}]}
Der Dienst ist danach unter www.deinedomain.ipv64.net:55349 (UDP) erreichbar. Je Name und Transport darf jeder Ziel-Port nur einmal vorkommen (409, mapping_exists).
Abfragen und löschen
curl "https://ipv64.net/api/v2/cdn64o/hosts/42/mappings" -H "Authorization: Bearer DEIN_API_KEY"
curl -X DELETE "https://ipv64.net/api/v2/cdn64o/hosts/42/mappings/7" -H "Authorization: Bearer DEIN_API_KEY"
Löschen antwortet mit 204.
Statistik und Ereignisse
GET /cdn64o/stats
Zahlen der Edge-Server je Name und Tag für alle Namen deines Kontos. Parameter days: 1–400, Standard 30.
curl "https://ipv64.net/api/v2/cdn64o/stats?days=7" -H "Authorization: Bearer DEIN_API_KEY"
{"data": [
{"host_id": 42, "fqdn": "www.deinedomain.ipv64.net", "day": "2026-10-25",
"bytes_in": 1048576, "bytes_out": 52428800, "conns": 310, "requests": 2048, "rejected": 3}
]}
rejected zählt Abweisungen durch die Edge-Server, z. B. durch Zugriffsliste oder Sperre. Ausgeschaltete Namen erscheinen hier nicht mehr.
GET /cdn64o/protection
Was die Edge-Server für die Namen deines Kontos abgewehrt haben. Parameter days: 1 (heute), 7 oder 30 (Standard); andere Werte ergeben 422.
curl "https://ipv64.net/api/v2/cdn64o/protection?days=7" -H "Authorization: Bearer DEIN_API_KEY"
{"data": {
"days": 7, "ja4_global": "block",
"totals": {"blocked_list": 120, "blocked_acl": 0, "blocked_flood": 4, "blocked_limit": 2, "blocked_waf": 37,
"blocked_ja4": 0, "ja4_hits": 15, "blocked_ips": 61, "conns": 310, "conns_v4": 88},
"daily": [{"day": "2026-10-21", "blocked_list": 18, …}, …],
"hosts": [{"id": 42, "fqdn": "www.deinedomain.ipv64.net", "mode": 2, "blocked_list": 120, …}],
"ja4_top": [{"ja4": "t13d1516h2_8daaf6152771_02713d6af862", "hits": 15}]
}}
| Feld | Bedeutung |
|---|---|
ja4_global | block = JA4 wirkt wie beim Namen eingestellt; count = vorübergehend nur zählen, auch bei block |
totals, daily, hosts | Summe des Zeitraums, je Tag (auch Tage ohne Zahlen) und je Name |
blocked_list | abgewiesen durch Blocklisten |
blocked_acl | abgewiesen durch die Zugriffsliste |
blocked_flood, blocked_limit | Überlast: Grenzen für Verbindungen bzw. für Anfragen je IP |
blocked_waf | abgewiesen durch WAF-Muster (403) |
blocked_ja4, ja4_hits | wegen JA4 getrennt bzw. JA4-Treffer insgesamt (auch nur gezählte) |
blocked_ips | gesperrte IP-Adressen (IPv6 je /64) |
conns, conns_v4 | Verbindungen über CDN64, davon über IPv4 |
ja4_top | die 10 häufigsten JA4-Fingerabdrücke im Zeitraum |
GET /cdn64o/hosts/{id}/events
Die letzten 100 Ereignisse eines Namens, neueste zuerst, je mit time, kind und message. Mögliche Werte von kind:
kind | Bedeutung |
|---|---|
enabled, disabled | Name ein- bzw. ausgeschaltet |
changed | Modus oder Tunnel geändert |
waf | WAF-Muster oder JA4-Stufe geändert |
paused, resumed | pausiert bzw. fortgesetzt |
target, acl, mapping | Ziel, Zugriffsliste bzw. Portmapper geändert |
blocked, unblocked | wegen Traffic gesperrt bzw. wieder frei |
edge_down, edge_back | ein Edge-Server wurde aus dem DNS genommen bzw. wieder eingetragen (message z. B. „srv08 nicht erreichbar“ bzw. „zurück auf srv08“) |
edge_replaced | ein zugeteilter Edge-Server ist länger als 3 Minuten weg, ein anderer springt ein (message z. B. „Ersatz srv09 für srv08“) |
servers_changed | die Edge-Server des Kontos haben sich geändert (Anzahl gewählt, Klasse gewechselt, Server in Wartung); message nennt die Server im DNS |
balance | Lastausgleich: neuer Server kommt dazu, Umzug fertig („Lastausgleich: srv08 → srv10“) bzw. abgebrochen |
acme | TXT-Record für ein Zertifikat gesetzt |
Tunnel: /cdn64o/tunnels
Ein Tunnel steht für eine Node64-Instanz. Node64 meldet ihn beim Einschalten von CDN64 selbst an; selbst brauchst du diese Endpunkte vor allem, um einen nicht mehr genutzten Tunnel zu entfernen.
POST /cdn64o/tunnelsmitname(bis 100 Zeichen) undnode_id(bis 64 Zeichen) legt einen Tunnel an. Die Antwort (201) enthält das Tunnel-Objekt, die Edge-Server und untertokenden Tunnel-Token – nur dieses eine Mal. IPv64.net speichert nur einen Hash davon. Höchstens 10 Tunnel je Konto (403,limit_reached); ohne CDN-Domains in der Klasse403,plan_not_allowed.POST /cdn64o/tunnels/{id}/tokenstellt einen neuen Token aus; der alte ist sofort ungültig.DELETE /cdn64o/tunnels/{id}entfernt den Tunnel (204). Namen, die an keinem anderen Tunnel mehr hängen, werden dabei ausgeschaltet – mit DNS zurück, Ziel, Zugriffsliste und Portmapper. Lehnt der DNS-Server das ab, kommt502(dns_update_failed); Tunnel und Name bleiben, damit du es später erneut versuchen kannst.
GET und PUT /cdn64o/tunnels/{id}/lists lesen bzw. setzen die Sperrliste (deny) und die Freigabeliste (allow) des Tunnels: IP-Adressen und Netze (IPv4/IPv6, CIDR), je Liste höchstens 1000 (sonst 422, list_too_long). Einträge werden einheitlich gespeichert, IPv4-gemappte Netze als IPv4; Adressen mit Zone ergeben 422. Die Edge-Server weisen Adressen der Sperrliste für alle Namen des Tunnels schon beim Verbindungsaufbau ab, die Freigabeliste geht vor. PUT ersetzt die gesendeten Listen, ein fehlendes Feld bleibt. Node64 hält beide Listen mit den Listen unter PROXY64 → Zugriffslisten gleich.
Das Tunnel-Objekt (auch in GET /cdn64o) enthält id (z. B. tn_…), name, node_id, status, created_at, last_seen (letzte Verbindung zu einem Edge-Server), last_edge, node_version, sessions (Höchstwert der Verbindungen je Server), edges (die Server, zu denen der Tunnel verbindet – die aller seiner Namen –, je Server mit sessions: Höchstwert der Namen dort) und servers (Auswahl seines ersten Namens, siehe Edge-Server eines Namens).
curl -X DELETE "https://ipv64.net/api/v2/cdn64o/tunnels/tn_DEINE_TUNNEL_ID" -H "Authorization: Bearer DEIN_API_KEY"
Mit dem Tunnel-Token kann sich eine Node als dein Tunnel bei den Edge-Servern anmelden. Gib ihn nicht weiter. Ist er bekannt geworden, stelle einen neuen aus.
Limits der Kontoklassen: GET /plans
Öffentlich, ohne API-Key. Liefert je Kontoklasse Name, Preis und unter limits die aktuellen Grenzen, für CDN64: cdn_domains, cdn_traffic_gb, cdn_bandwidth_mbit (fehlt bei unbegrenzt), cdn_mappings, cdn_tunnel_sessions, cdn_edges (Edge-Server je Konto, 0 = alle) und cdn_edges_selectable (Anzahl wählbar).
curl "https://ipv64.net/api/v2/plans"
Die Antwort darf 10 Minuten zwischengespeichert werden. Die Werte erklärt Kontingent und Traffic.
Endpunkte der Edge-Server
Die Pfade unter /cdn64o/edge/ (Konfiguration, Traffic-Meldung, Zertifikate, ACME-TXT) nutzen nur die Edge-Server von IPv64.net mit einem eigenen Server-Geheimnis. Mit einem API-Key antworten sie mit 401.
Fehlercodes
| HTTP | code | Bedeutung |
|---|---|---|
| 401 | unauthenticated, invalid_token | API-Key fehlt bzw. ungültig, abgelaufen oder Konto nicht aktiv |
| 403 | plan_not_allowed | Kontoklasse ohne CDN-Domains |
| 403 | limit_reached | CDN-Domains, Portmapper oder Tunnel ausgeschöpft |
| 403 | traffic_limit_reached | Traffic des Monats aufgebraucht |
| 403 | act_as_denied | keine aktive Account-Freigabe für X-IPv64-Act-As |
| 404 | cdn64o_host_not_found, cdn64o_tunnel_not_found, not_found | Name, Tunnel bzw. Portmapper nicht gefunden (oder nicht in deinem Konto) |
| 409 | cdn64o_exists | Name ist schon in CDN64 |
| 409 | old_cdn_active | Domain ist noch im früheren IPv64-CDN |
| 409 | cname_exists, failover_active | CNAME bzw. DNS Failover auf dem Namen |
| 409 | tunnel_blocked | Tunnel ist gesperrt |
| 409 | not_mode_3 | Ziel gibt es nur in Modus 3 |
| 409 | mapping_exists, port_in_use | Ziel-Port schon gemappt bzw. Port der Server belegt oder keiner frei |
| 422 | missing_field, invalid_field, out_of_range | Feld fehlt, hat ein falsches Format oder liegt außerhalb des Bereichs (Name in field) |
| 422 | domain_not_in_account | Name liegt in keiner aktiven Domain deines Kontos |
| 422 | mode_not_available, mode_change_not_possible | Modus unbekannt bzw. Wechsel zwischen Modus 3 und 1/2 |
| 422 | no_target_records, target_not_public | keine öffentliche A/AAAA-Adresse als Ziel bzw. Ziel-IP nicht öffentlich |
| 422 | cache_limit, acl_too_long | Cache größer als die Klasse erlaubt bzw. mehr als 200 Listeneinträge |
| 429 | rate_limited | zu viele Anfragen, siehe Retry-After |
| 502 | dns_update_failed | DNS-Server hat die Änderung abgelehnt; der Name bleibt, später erneut versuchen |
Ein Beispiel für eine Fehlerantwort:
{"type": "https://ipv64.net/api/v2/errors#cname_exists", "title": "Conflict", "status": 409,
"detail": "The name has a CNAME record. Remove it first.", "code": "cname_exists"}
Was die Meldungen praktisch bedeuten, steht unter CDN64 → Fehlersuche. Die übrigen Bereiche der API beschreibt die Seite API.
Fehler gefunden oder etwas fehlt? Schreibt uns im v64.tech-Forum. · Stand: 2026-11-03