Febas-API

DynDNS, DNS-Einträge und Domains per URL steuern

Übersicht

Mit der Febas-API steuern Sie Ihre Domains per Aufruf einer URL, zum Beispiel mit curl oder wget, aus einem Skript oder direkt aus Ihrem Router. Die API kann derzeit:

  • DynDNS: A- und AAAA-Einträge einer Domain oder Subdomain auf Ihre aktuelle IP-Adresse setzen
  • DNS-Einträge (A, AAAA, CNAME, MX, TXT) auflisten, hinzufügen und löschen, zum Beispiel für Let's-Encrypt-Zertifikate per DNS-Challenge
  • TXT-Einträge in der einfachen Variante setzen und löschen
  • Domains prüfen, registrieren und transferieren
  • Domainpreise als JSON abrufen

Alle Aufrufe laufen über HTTPS. Die Antwort ist ein kurzer Text, bei der DNS-API und den Domainpreisen JSON. DynDNS, DNS- und TXT-Einträge funktionieren für Ihre Domains bei Febas, solange sie die Febas-Nameserver nutzen. Bei DynDNS und TXT-Einträgen werden die Parameter in der URL übergeben (GET), bei der DNS-API wahlweise per GET oder POST. Domains mit Umlauten können Sie in Unicode (müller.de) oder Punycode (xn--mller-kva.de) angeben.

Kunden-ID und API-Token

Für jeden Aufruf (außer den Domainpreisen) benötigen Sie Ihre Kunden-ID (Parameter kundenid) und Ihren persönlichen API-Token (Parameter token). Beides finden Sie im Kundenbereich unter "Kundendaten" im Bereich "API-Token". Die fertige DynDNS-URL mit beiden Werten steht außerdem unter "Domains" → "DynDNS".

Behandeln Sie den Token wie ein Passwort. Falls er in falsche Hände geraten ist, erzeugen Sie unter "Kundendaten" mit "Neuen Token erzeugen" einen neuen. Der bisherige Token funktioniert danach sofort nicht mehr. Tragen Sie den neuen Token dann überall ein, wo Sie die API nutzen (Router, Skripte).

Für Domainbestellungen per API (Registrierung und Transfer) gibt es einen eigenen Bestell-Token. So kann ein Token, der etwa im Router steht, keine kostenpflichtigen Bestellungen auslösen. Bestellungen per API schalten wir auf Anfrage frei, schreiben Sie dazu einfach an unseren Support. Nach der Freigabe erzeugen Sie den Bestell-Token selbst unter "Kundendaten".

Nach 10 falschen Tokens für eine Kunden-ID, 10 unbekannten Kunden-IDs oder 30 Fehlversuchen insgesamt innerhalb von 15 Minuten sperrt die API weitere Anmeldungen von derselben IP-Adresse vorübergehend. Warten Sie dann 15 Minuten und prüfen Sie Kunden-ID und Token.

1) DynDNS

Setzt die IP-Adresse einer Domain oder Subdomain, zum Beispiel für einen Server oder eine Kamera hinter einem Heimanschluss mit wechselnder IP-Adresse. Vorhandene A- bzw. AAAA-Einträge des Namens werden dabei ersetzt.

https://www.febas.de/api/dyndns.php?kundenid=KUNDENID&token=TOKEN&type=dyndns&domain=home.ihredomain.de&myip=203.0.113.10
ParameterBedeutung
kundenid, tokenIhre Kunden-ID und Ihr API-Token (Pflicht)
typeimmer dyndns (Pflicht)
domain oder hostnameDomain oder Subdomain, z. B. ihredomain.de oder home.ihredomain.de (Pflicht)
myipneue IPv4-Adresse (A-Eintrag, optional)
myip6neue IPv6-Adresse (AAAA-Eintrag, optional)
ttlGültigkeit neuer Einträge in Sekunden, Standard 300, möglich sind 60 bis 86400 (optional)
wildcard1 setzt zusätzlich alle Namen darunter (z. B. *.home.ihredomain.de) auf dieselbe Adresse (optional)

Ein leerer Parameter myip oder myip6 wird übergangen. Fehlen beide oder sind beide leer, setzt die API die Adresse, von der der Aufruf kommt: als A-Eintrag bei IPv4, als AAAA-Eintrag bei IPv6. Eine IPv6-Adresse in myip wird als AAAA-Eintrag gesetzt, wenn myip6 leer ist. Die Antwort good kommt, sobald die Änderung bei Febas eingetragen ist oder die Adresse schon stimmt. Bei dnserr wurde die Änderung nicht oder nicht vollständig übernommen. Versuchen Sie es dann später erneut, außer bei einem CNAME-Hinweis (siehe Fehlermeldungen).

FRITZ!Box: Tragen Sie unter "Internet" → "Freigaben" → "DynDNS" als Update-URL die Adresse aus dem Kundenbereich (Domains → DynDNS) ein. Die FRITZ!Box setzt <domain>, <ipaddr> und <ip6addr> selbst ein. Benutzername und Passwort werden nicht ausgewertet, dort kann ein beliebiger Wert stehen.

Beispiel mit curl, etwa als Cronjob auf einem Linux-Rechner. Ohne myip setzt die API die Adresse, mit der der Rechner ins Internet geht. Mit -4 bzw. -6 wählen Sie, ob der A- oder der AAAA-Eintrag aktualisiert wird:

curl -s -4 -G "https://www.febas.de/api/dyndns.php" \
  -d kundenid=KUNDENID -d token=TOKEN -d type=dyndns \
  -d domain=home.ihredomain.de

2) DNS-Einträge verwalten (DNS-API)

Mit der DNS-API listen Sie die Einträge einer Domain auf und fügen einzelne Einträge hinzu oder löschen sie. Möglich sind die Typen A, AAAA, CNAME, MX und TXT, auch mehrere Werte unter einem Namen. Die Antwort ist JSON. Wir empfehlen POST, dann stehen Token und Werte nicht in Server-Logs.

ParameterBedeutung
kundenid, tokenIhre Kunden-ID und Ihr API-Token (Pflicht)
actionlist (auflisten), add (hinzufügen) oder delete (löschen) (Pflicht)
domainName des Eintrags inkl. Domain, z. B. ihredomain.de, shop.ihredomain.de oder *.ihredomain.de. Bei list genügt die Domain, aufgelistet wird immer die ganze Domain (Pflicht)
typeA, AAAA, CNAME, MX oder TXT (Pflicht bei add und delete, bei list optional als Filter)
valueInhalt: IP-Adresse, Ziel-Hostname (bei CNAME und MX vollständig, z. B. shop.anbieter.de) oder Text (Pflicht bei add). Bei delete optional: Ohne value werden alle Einträge mit diesem Namen und Typ gelöscht.
prioPriorität eines MX-Eintrags, Standard 10 (optional)
ttlGültigkeit in Sekunden, Standard 300, möglich sind 60 bis 86400 (optional)

Einträge auflisten:

curl -s "https://www.febas.de/api/dns.php" \
  --data-urlencode "kundenid=KUNDENID" --data-urlencode "token=TOKEN" \
  --data-urlencode "action=list" --data-urlencode "domain=ihredomain.de"
{"ok":true,"domain":"ihredomain.de","records":[
 {"name":"@","host":"ihredomain.de","type":"A","value":"203.0.113.10","ttl":86400},
 {"name":"@","host":"ihredomain.de","type":"MX","value":"mail.febas.net","ttl":86400,"prio":10}, ...]}

Eintrag hinzufügen, z. B. eine Subdomain per CNAME zu einem anderen Anbieter:

curl -s "https://www.febas.de/api/dns.php" \
  --data-urlencode "kundenid=KUNDENID" --data-urlencode "token=TOKEN" \
  --data-urlencode "action=add" --data-urlencode "domain=shop.ihredomain.de" \
  --data-urlencode "type=CNAME" --data-urlencode "value=shops.anbieter.de"

Eintrag löschen:

curl -s "https://www.febas.de/api/dns.php" \
  --data-urlencode "kundenid=KUNDENID" --data-urlencode "token=TOKEN" \
  --data-urlencode "action=delete" --data-urlencode "domain=shop.ihredomain.de" \
  --data-urlencode "type=CNAME"

Bei Erfolg lautet die Antwort {"ok":true,"changes":[...]} mit den vorgenommenen Änderungen. Ist ein Eintrag schon vorhanden bzw. nicht vorhanden, bleibt die Liste leer. Ein CNAME kann nicht auf der Domain selbst und nicht neben anderen Einträgen gleichen Namens stehen. Löschen Sie die anderen Einträge dann zuerst. Um die Priorität eines MX-Eintrags zu ändern, löschen Sie ihn und legen ihn neu an. Pro Stunde sind höchstens 60 Aufrufe mit add oder delete und 100 mit list möglich.

Fehler ("error")Bedeutung
FEHLENDE PARAMETEREin Pflichtparameter fehlt oder action ist falsch (HTTP 400)
TYP NICHT UNTERSTUETZT (A, AAAA, CNAME, MX, TXT)Der Typ kann über die API nicht bearbeitet werden (HTTP 400)
UNGUELTIGER WERT / UNGUELTIGE PRIORITAETDer Wert passt nicht zum Typ, oder die MX-Priorität ist keine Zahl von 0 bis 65535 (HTTP 400)
TOKEN FALSCH, KEIN KUNDE GEFUNDENsiehe Fehlermeldungen (HTTP 403)
Domain nicht im Bestand.Die Domain gehört nicht zu Ihrem Kundenkonto oder der Name ist ungültig (HTTP 404)
ZONE NICHT BEI FEBAS (NAMESERVER PRUEFEN)Die Domain nutzt nicht die Febas-Nameserver (HTTP 404)
CNAME vorhanden: ... / CNAME auf der Domain selbst ist nicht moeglichKonflikt mit einem CNAME, siehe oben (HTTP 409)
www folgt automatisch dem A-Eintrag der Domain ...Der A-Eintrag von www wird bei Ihrer Domain automatisch aus dem A-Eintrag der Domain gesetzt und lässt sich nicht einzeln löschen (HTTP 409)
ZU VIELE ANFRAGEN, ... / ZU VIELE FEHLVERSUCHE, ...Limit erreicht bzw. Sperre nach falschen Anmeldungen (HTTP 429)
Eintrag konnte nicht geaendert werden. ...Der Nameserver hat die Änderung nicht übernommen. Versuchen Sie es später erneut (HTTP 502)

Let's Encrypt mit certbot (DNS-Challenge): Legen Sie zwei kleine Skripte als Hooks an und machen Sie sie ausführbar (chmod 700, sie enthalten Ihren Token):

#!/bin/sh
# /etc/letsencrypt/febas-auth.sh: TXT-Eintrag hinzufügen und kurz warten
curl -s "https://www.febas.de/api/dns.php" \
  --data-urlencode "kundenid=KUNDENID" --data-urlencode "token=TOKEN" \
  --data-urlencode "action=add" --data-urlencode "type=TXT" \
  --data-urlencode "domain=_acme-challenge.$CERTBOT_DOMAIN" \
  --data-urlencode "value=$CERTBOT_VALIDATION"
sleep 120
#!/bin/sh
# /etc/letsencrypt/febas-cleanup.sh: genau diesen TXT-Eintrag wieder löschen
curl -s "https://www.febas.de/api/dns.php" \
  --data-urlencode "kundenid=KUNDENID" --data-urlencode "token=TOKEN" \
  --data-urlencode "action=delete" --data-urlencode "type=TXT" \
  --data-urlencode "domain=_acme-challenge.$CERTBOT_DOMAIN" \
  --data-urlencode "value=$CERTBOT_VALIDATION"
certbot certonly --manual --preferred-challenges dns \
  --manual-auth-hook /etc/letsencrypt/febas-auth.sh \
  --manual-cleanup-hook /etc/letsencrypt/febas-cleanup.sh \
  -d ihredomain.de -d '*.ihredomain.de'

So erhalten Sie ein Zertifikat für die Domain und alle Subdomains (*.ihredomain.de) in einem Schritt. Beide Prüfwerte stehen dabei gleichzeitig unter _acme-challenge.ihredomain.de.

3) TXT-Einträge (einfache Variante)

Der einfachste Weg, genau einen TXT-Eintrag zu setzen. Für mehrere Werte unter einem Namen und andere Eintragstypen nutzen Sie die DNS-API. Setzt einen TXT-Eintrag für eine Domain oder Subdomain. Vorhandene TXT-Einträge mit demselben Namen werden dabei ersetzt, pro Name ist derzeit ein TXT-Wert möglich. Ein leerer Wert (txt=) löscht die TXT-Einträge des Namens. Direkt auf der Domain (ohne Subdomain) gilt eine Ausnahme für SPF: Ein SPF-Eintrag (v=spf1 …) bleibt erhalten und wird nur ersetzt, wenn Sie selbst einen SPF-Wert übergeben. Andere TXT-Einträge der Domain (z. B. Verifizierungen) werden durch einen Nicht-SPF-Wert ersetzt und bleiben stehen, wenn Sie einen SPF-Wert übergeben. Ein leerer Wert löscht dort nur die Einträge ohne SPF.

https://www.febas.de/api/txtdns.php?kundenid=KUNDENID&token=TOKEN&type=txt&domain=_acme-challenge.ihredomain.de&txt=WERT
ParameterBedeutung
kundenid, tokenIhre Kunden-ID und Ihr API-Token (Pflicht)
typeimmer txt (Pflicht)
domain oder hostnameName des Eintrags inkl. Domain, z. B. _acme-challenge.ihredomain.de (Pflicht)
txtInhalt des TXT-Eintrags, leer = löschen (Pflicht)
ttlGültigkeit neuer Einträge in Sekunden, Standard 300, möglich sind 60 bis 86400 (optional)

Sonderzeichen im Wert (Leerzeichen, =, ; usw.) müssen URL-kodiert übergeben werden. Mit curl geht das am einfachsten so:

curl -s -G "https://www.febas.de/api/txtdns.php" \
  --data-urlencode "kundenid=KUNDENID" \
  --data-urlencode "token=TOKEN" \
  --data-urlencode "type=txt" \
  --data-urlencode "domain=_acme-challenge.ihredomain.de" \
  --data-urlencode "txt=WERT"

Die Antwort good kommt, sobald die Änderung bei Febas eingetragen ist oder der Wert schon stimmt. Bei dnserr versuchen Sie es später erneut, außer bei einem CNAME-Hinweis (siehe Fehlermeldungen).

Für Let's-Encrypt-Zertifikate nehmen Sie besser die DNS-API, dort sind mehrere TXT-Werte unter einem Namen möglich (siehe Let's Encrypt mit certbot).

4) Domains prüfen, registrieren und transferieren

Mit diesen Aufrufen prüfen Sie, ob eine Domain frei ist, und bestellen Domains direkt. Für Registrierung und Transfer brauchen Sie eine aktive Lastschrift oder ausreichendes Guthaben für die Domain, für die Prüfung ist das nicht nötig. Angegeben wird nur die Domain selbst, z. B. wunschdomain.de oder wunschdomain.com.de, ohne www. Die Domain wird zum Preis laut Preisliste als eigener Vertrag angelegt. Sie erhalten eine Bestellbestätigung per E-Mail.

Für die Prüfung genügt der normale API-Token (höchstens 100 Prüfungen pro Stunde). Registrierung und Transfer funktionieren nur mit dem Bestell-Token und nach Freigabe durch Febas (siehe Kunden-ID und API-Token).

Verfügbarkeit prüfen:

https://www.febas.de/api/?kundenid=KUNDENID&token=TOKEN&type=check&domain=wunschdomain.de

Neu registrieren:

https://www.febas.de/api/?kundenid=KUNDENID&token=BESTELLTOKEN&type=domreg&domain=wunschdomain.de

Transfer zu Febas: Übergeben Sie zusätzlich den Auth-Code des bisherigen Anbieters im Parameter authcode, als POST-Parameter oder in der URL:

curl -s "https://www.febas.de/api/?kundenid=KUNDENID&token=BESTELLTOKEN&type=domtran&domain=wunschdomain.de" \
  --data-urlencode "authcode=AUTHCODE"

Optional: Mit dem Parameter ns (POST oder URL) geben Sie eigene Nameserver an, getrennt durch Semikolon, z. B. ns=ns1.example.net;ns2.example.net (in der URL das Semikolon am besten als %3B schreiben). Bei .de-Domains muss die Domain in diesen Nameservern schon vor der Bestellung korrekt eingerichtet sein.

AntwortBedeutung
Domain ist frei / Domain ist bereits registriertErgebnis der Prüfung (type=check)
PRUEFUNG DERZEIT NICHT MOEGLICHDie Verfügbarkeit konnte gerade nicht abgefragt werden. Versuchen Sie es später erneut.
Bestellung erfolgreich übermittelt.Die Bestellung ist eingegangen. Registrierung bzw. Transfer starten in der Regel innerhalb weniger Minuten.
Domain ist nicht frei.Registrierung nicht möglich, die Domain ist vergeben. Für eigene Domains nutzen Sie den Transfer.
Domain bereits im Febas-System vorhanden. Bitte an Support wenden.Die Domain ist schon bei Febas, auch gekündigte Domains bis zum Löschdatum. Diese Antwort kommt auch bei der Prüfung.
LASTSCHRIFT NICHT AKTIV / GUTHABEN NICHT AUSREICHENDAktivieren Sie die Lastschrift im Kundenbereich oder laden Sie Guthaben auf.
BESTELLUNG PER API NICHT FREIGESCHALTETRegistrierung und Transfer sind für Ihr Kundenkonto nicht freigeschaltet, oder Sie haben den API-Token statt des Bestell-Tokens verwendet.
ZU VIELE ANFRAGEN, BITTE SPAETER ERNEUT VERSUCHENMehr als 100 Prüfungen in der letzten Stunde
DOMAIN UNGUELTIG ODER ENDUNG NICHT IM ANGEBOTDer Domainname ist ungültig, enthält eine Subdomain oder die Endung steht nicht in der Preisliste.

Den Stand eines Transfers sehen Sie im Kundenbereich unter "Domains". Bei einem falschen Auth-Code oder einer Transfersperre erhalten Sie eine E-Mail.

5) Domainpreise

Liefert alle Domainendungen mit Jahrespreis (brutto, in Euro) als JSON. Für diesen Aufruf ist kein Token nötig.

https://www.febas.de/api/domainlist.php
[{"domain":"de","preis":"..."},{"domain":"com","preis":"..."}, ...]

Fehlermeldungen

AntwortBedeutung
FEHLENDE PARAMATEREin Pflichtparameter fehlt oder type ist falsch
KEIN KUNDE GEFUNDENDie Kunden-ID ist falsch
TOKEN FALSCHDer Token passt nicht, zum Beispiel nach dem Erzeugen eines neuen Tokens. DynDNS, die DNS-API und TXT-Einträge funktionieren nur mit dem API-Token, nicht mit dem Bestell-Token.
ZU VIELE FEHLVERSUCHE, BITTE SPAETER ERNEUT VERSUCHENVon Ihrer IP-Adresse kamen in den letzten 15 Minuten zu viele falsche Anmeldungen. Warten Sie 15 Minuten und prüfen Sie Kunden-ID und Token.
Domain nicht im Bestand.Die Domain gehört nicht zu Ihrem Kundenkonto oder der Name ist ungültig (nur DynDNS und TXT)
KEINE IP-ADRESSE / UNGUELTIGE IP-ADRESSEmyip oder myip6 enthält keine gültige IPv4- bzw. IPv6-Adresse (nur DynDNS)
UNGUELTIGER TXT-WERTDer TXT-Wert enthält Steuerzeichen (z. B. Zeilenumbrüche), ist kein gültiges UTF-8 oder ist länger als 2000 Byte (nur TXT)

Bei DynDNS und TXT-Einträgen steht vor den Fehlermeldungen jeweils badauth, wie bei DynDNS-Diensten üblich. Wurde eine Änderung nicht übernommen, lautet die Antwort dnserr mit einem kurzen Hinweis. Steht unter dem Namen ein CNAME-Eintrag, kann dort kein A-, AAAA- oder TXT-Eintrag gesetzt werden. Entfernen Sie den CNAME dann in der DNS-Verwaltung im Kundenbereich. Fragen zur API beantwortet gerne unser Support.