anonym.es

Link- und Temp-Mail-API

Die API legt anonyme Kurzlinks an, liefert ihre Klickstatistik, ändert ihre Einstellungen und löscht sie. Anfragen und Antworten verwenden JSON. CORS ist aktiviert, Aufrufe funktionieren daher auch aus Browser-Code. Ab Pro steuert sie auch temporäre Postfächer: eine Adresse anlegen, sie auf Mail abfragen, auf eingehende Mails antworten.

LinksTemporäre E-MailFehler

Basisadresse:

https://anonym.es/api/v1

Schnellstart

Um einen Kurzlink anzulegen, senden Sie die Zieladresse:

curl -X POST https://anonym.es/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/article"}'

Für diesen Aufruf ist kein Token nötig. Ohne Token wird der Link als Gastlink innerhalb der Free-Quote Ihrer IP-Adresse angelegt.

Mit einem Kontotoken legt derselbe Aufruf den Link in Ihrem Dashboard ab und zählt ihn auf Ihren Tarif:

curl -X POST https://anonym.es/api/v1/links \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/article"}'

Die Antwort enthält die Kurzadresse, die Link-ID und das Token, das diesen Link verwaltet. Bewahren Sie das Token auf: Es wird gebraucht, um den Link später zu lesen oder zu löschen.

{
  "ok": true,
  "link": {
    "id": 4821,
    "short": "https://anonym.es/k7m2q",
    "url": "https://example.com/article",
    "status": "active",
    "password": false,
    "created_at": "2026-09-05T14:02:11Z",
    "expires_at": null,
    "max_hits": null,
    "self_destruct": false,
    "delay": null,
    "no_countdown": false,
    "adult": false,
    "note": null,
    "tags": [],
    "clicks": 0,
    "uniques": 0
  },
  "token": "3f9c1b7e2d4a4c0e9b8f7a6d5c4b3a21",
  "left": 4
}

Felder des Link-Objekts

Alle Endpunkte, die einen Link zurückgeben, verwenden diese Struktur. Zeitstempel sind ISO 8601 in UTC. Die Zähler clicks und uniques umfassen die gesamte Lebensdauer des Links.

FeldTypWas er tut
idintegerNumerische ID des Links, von den übrigen Aufrufen verwendet.
shortstringDie Kurzadresse zum Teilen.
urlstring | nullDas Ziel, null bei einem reinen Notizlink.
statusstringactive | expired | exhausted (Besuchslimit erreicht) | flagged (Ziel auf einer Sicherheitsliste) | banned.
passwordbooleanBesucher müssen ein Passwort eingeben.
created_atstringISO 8601, UTC.
expires_atstring | nullWann der Link abläuft, null = kein Ablauf.
max_hitsinteger | nullBesuchslimit, null = kein Limit.
self_destructbooleanDer Link löscht sich endgültig selbst, wenn Limit oder Lebensdauer erreicht ist.
delayinteger | nullSekunden auf der Weiterleitungsseite, null = Tarifstandard, 0 = sofort.
no_countdownbooleanDie Weiterleitungsseite zeigt keinen Countdown und wartet auf einen Klick auf die Adresse.
adultbooleanBesucher bestätigen vor der Weiterleitungsseite, dass sie 18 oder älter sind.
notestring | nullDie Notiz auf der Weiterleitungsseite.
tagsstring[]Tags, in Kleinbuchstaben.
clicksintegerBesuche über die gesamte Lebensdauer des Links.
uniquesintegerEindeutige Besucher (einer pro Adresse und Tag) über die gesamte Lebensdauer des Links.

Autorisierung

Autorisierte Anfragen tragen das Token im Authorization-Header. Alternativ wird der Header X-API-Key akzeptiert. Tokens werden nie im Query-String übergeben.

Authorization: Bearer YOUR_TOKEN
TokenWoherWofür
KontotokenIm KontoAlle Links des Kontos mit den Rechten des Tarifs
Link-TokenWird beim Anlegen eines Links zurückgegebenEin bestimmter Link mit den Rechten des Free-Tarifs

Ein Kontotoken beginnt mit anon_. Ein Link-Token besteht aus 32 Zeichen. Ein neu erzeugtes Kontotoken macht das vorherige ungültig.

Beispiel:

curl https://anonym.es/api/v1/me \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"

Kontotoken im Konto erzeugen

Endpunkte

Der Request-Body kann als application/json oder als application/x-www-form-urlencoded gesendet werden. Parameternamen und Fehlercodes sind bei allen Endpunkten identisch.

MethodePfadTokenKostenWas er tut
GET/api/v1optional1Über diese API: Version, Adressen der Dokumentation und des Schemas.
POST/api/v1/linksoptional5 + 1/urlEinen Link anlegen, oder bis zu 50 auf einmal. Ohne Token: als Gast, auf die Free-Quote. Liefert den Link mit seinem Token.
GET/api/v1/names/checkoptional2Ist dieser eigene Name frei? Vorschläge, wenn er vergeben ist.
GET/api/v1/linksKonto2Die Links des Kontos, neueste zuerst.
GET/api/v1/links/lookupLink oder Konto1Einen eigenen Link über seine Kurzadresse finden.
GET/api/v1/links/{id}Link oder Konto1Ein Link: Einstellungen, Status, Klicks und eindeutige Besucher über die gesamte Lebensdauer. Kontotoken können einen Statistikbericht anfügen.
PATCH/api/v1/links/{id}Link oder Konto3Einstellungen ändern. Nur gesendete Felder ändern sich. Bezahlte Tarife (ein Link-Token hat Free-Rechte und kann nicht bearbeiten).
DELETE/api/v1/links/{id}Link oder Konto2Den Link löschen. Der Name wird wieder frei.
GET/api/v1/links/{id}/qrLink oder Konto3Der QR-Code der Kurzadresse als Bild (PNG oder SVG). Braucht ein Token und eignet sich daher für Servercode.
GET/api/v1/qroptional3Der QR-Code einer Kurzadresse als Bild ohne Token: Die Adresse selbst ist der Schlüssel. Gemacht für <img>-Tags.
GET/api/v1/meKonto1Das Konto: Tarif, Limits, verbleibende Quote, weitere Domains, erlaubte Einstellungen.
GET/api/v1/openapi.jsonoptional1Diese API als OpenAPI-3.1-Dokument.

Temporäre E-Mail

MethodePfadTokenKostenWas er tut
GET/api/v1/mail/domainsKonto1Temporäre E-Mail: die Domains, auf denen der Tarif Adressen anlegen darf, und welche davon eine angeheftete Adresse annehmen (pinnable).
GET/api/v1/mail/limitsKonto1Temporäre E-Mail: wie viele Adressen der Tarif gleichzeitig und pro Stunde erlaubt und was übrig ist.
GET/api/v1/mail/addressesKonto2Temporäre E-Mail: die aktiven Adressen des Kontos mit ihrer Restzeit.
POST/api/v1/mail/addressesKonto5Temporäre E-Mail: eine Wegwerfadresse auf einer Domain des Tarifs anlegen. Die Antwort enthält einmalig key, den geheimen Schlüssel der Adresse. Die Post wird verschlüsselt gespeichert, und nur dieser Schlüssel öffnet sie. Senden Sie ihn als X-Mail-Key.
GET/api/v1/mail/addresses/{id}Konto1Temporäre E-Mail: eine Adresse mit Restzeit, Verlängerungen und dem heutigen Sendekontingent.
POST/api/v1/mail/addresses/{id}/keyKonto3Temporäre E-Mail: einen neuen Schlüssel für eine über die API angelegte Adresse ausstellen, wenn ihr Schlüssel verloren ist. Post unter dem alten Schlüssel bleibt verschlossen und kommt weiter mit encrypted = true zurück.
POST/api/v1/mail/addresses/{id}/pinKonto3Temporäre E-Mail: Adresse anheften. Eine angeheftete Adresse hat keine Uhr, sie lebt für die Dauer des aktiven Tarifs oder solange die Domain verfügbar ist.
POST/api/v1/mail/addresses/{id}/unpinKonto3Temporäre E-Mail: eine angeheftete oder reservierte Adresse temporär machen. Die Uhr des Tarifs läuft sofort los.
POST/api/v1/mail/addresses/{id}/extendKonto3Temporäre E-Mail: die Uhr der Adresse auf die volle Tariflaufzeit zurücksetzen (zählt als Verlängerung).
DELETE/api/v1/mail/addresses/{id}Konto2Temporäre E-Mail: die Adresse mit allem Inhalt löschen.
GET/api/v1/mail/addresses/{id}/messagesKonto2Temporäre E-Mail: die Nachrichten einer Adresse, neueste zuerst, mit Lesestatus und Absenderurteil. Benötigt X-Mail-Key. Ohne ihn kommen die Zeilen mit encrypted = true und ohne Inhalt zurück.
GET/api/v1/mail/addresses/{id}/messages/{mid}Konto1Temporäre E-Mail: eine Nachricht vollständig, mit Text, HTML, Anhängen und Authentifizierungsergebnissen. Markiert sie als gelesen. Benötigt X-Mail-Key.
PATCH/api/v1/mail/addresses/{id}/messages/{mid}Konto3Temporäre E-Mail: eine Nachricht als gelesen oder ungelesen markieren.
DELETE/api/v1/mail/addresses/{id}/messages/{mid}Konto2Temporäre E-Mail: eine Nachricht löschen.
GET/api/v1/mail/addresses/{id}/messages/{mid}/attachments/{n}Konto1Temporäre E-Mail: ein Anhang als Dateidownload. Benötigt X-Mail-Key.
POST/api/v1/mail/addresses/{id}/messages/{mid}/replyKonto5Temporäre E-Mail: auf eine Nachricht antworten. Erlaubt nur, wenn der Absender die Authentifizierung bestanden hat, und nur an ihn. Benötigt X-Mail-Key.
POST/api/v1/mail/addresses/{id}/sendKonto5Temporäre E-Mail: eine Nachricht an eine beliebige Adresse senden (freie Sendungen des Tarifs).
GET/api/v1/mail/addresses/{id}/sentKonto2Temporäre E-Mail: von dieser Adresse gesendete Nachrichten. Für Empfänger, Betreff und Text wird X-Mail-Key benötigt.

Die Kosten sind in Einheiten des Ratenlimits angegeben, siehe Ratenlimits.

Einen Link anlegen

POST /api/v1/links

Die minimale Anfrage enthält nur das Feld url:

curl -X POST https://anonym.es/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/article"}'

Mit einem Kontotoken gehört der Link zum Konto und zählt auf dessen Tarif. Ohne Token ist er ein Gastlink auf die IP-Quote:

curl -X POST https://anonym.es/api/v1/links \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/article"}'

Eine erfolgreiche Anfrage liefert Status 201 mit dem Link, seinem Token und der Anzahl der im aktuellen Quotenzeitraum verbleibenden Links.

Felder der Antwort:

FeldTypWas er tut
linkobjectDer angelegte Link.
tokenstringDas Link-Token (32 Zeichen), verwaltet diesen Link.
leftinteger | nullIm aktuellen Quotenzeitraum verbleibende Links, null bei einem Tarif ohne Limit.
qrobjectDer QR-Code, vorhanden, wenn qr=true gesendet wurde.
batchbooleantrue, wenn mehrere Adressen gesendet wurden.
resultsarrayEin Eintrag pro Adresse in gesendeter Reihenfolge: {ok: true, link, token, qr} oder {ok: false, url, error, message, field}.

Link mit eigenem Namen

Die Kurzadresse erhält den Namen my-article, wenn er frei ist und den Regeln unten entspricht.

curl -X POST https://anonym.es/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/article","name":"my-article"}'

Namensregeln:

Ein Name lässt sich vor dem Anlegen prüfen:

curl "https://anonym.es/api/v1/names/check?name=my-article"

Felder der Prüfantwort:

FeldTypWas er tut
availablebooleantrue, wenn der Name verwendet werden kann.
namestringDer geprüfte Name.
errorstringWarum der Name nicht verfügbar ist: taken, reserved, too_short und die übrigen Namensfehler.
messagestringDer Grund in Worten.
fieldstringImmer name.
suggestarrayFreie Alternativen, wenn der Name vergeben ist.

Mehrere Links auf einmal

Das Feld urls nimmt bis zu 50 Adressen an, als JSON-Array oder als Text mit einer Adresse pro Zeile. Jede Adresse wird ein eigener Link mit eigenem Token, die übrigen Felder gelten für alle. Ein eigener Name ist im Stapel nicht verfügbar.

curl -X POST https://anonym.es/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/a","https://example.com/b","https://example.com/c"]}'

Die Antwort enthält batch: true und ein Array results mit einem Eintrag pro Adresse in der gesendeten Reihenfolge. Eine fehlerhafte Adresse ergibt einen Eintrag mit ok: false und dem Fehlercode, ohne die übrigen zu stoppen.

Weitere Einstellungen

curl -X POST https://anonym.es/api/v1/links \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article",
    "name": "my-article",
    "expires_days": 30,
    "max_hits": 1000,
    "self_destruct": true,
    "password": "secret",
    "note": "Available until the end of the month",
    "delay": 5,
    "tags": "blog,promo",
    "qr": true,
    "qr_size": 300,
    "qr_format": "png"
  }'

Als kostenpflichtig markierte Optionen werden für Gäste und im Free-Tarif ignoriert. Die Antwort gibt die Einstellungen wieder, die der Link tatsächlich erhalten hat.

FeldTypWas er tut
urlstring, erforderlichDie Zieladresse. Oder urls: mehrere Adressen, eine pro Zeile oder als JSON-Array (bis 50), jede wird ein eigener Link.
namestringEigener Name für einen einzelnen Link (geprüft gegen die Regeln und den Namensfilter).
domainstringOne of the alias domains, random, or random-alias (random among the alias domains only). Paid plans; default is random: links never sit on the main domain. Free and guests: anonymes.click.
subbooleanname.alias statt alias/name. Tarif Max, nur auf den weiteren Domains.
expires_daysintegerLebensdauer in Tagen. Bezahlte Tarife.
max_hitsintegerBesuchslimit. Bezahlte Tarife.
self_destructbooleanDen Link endgültig löschen, wenn das Besuchslimit oder die Lebensdauer erreicht ist (braucht max_hits oder expires_days).
passwordstringPasswort, das Besucher eingeben müssen. Bezahlte Tarife.
notestringText auf der Weiterleitungsseite. Bezahlte Tarife, Länge je Tarif.
note_onlybooleanDer Link öffnet die Notiz selbst, kein Ziel. Ab Pro+.
delayintegerSekunden auf der Weiterleitungsseite, 0 = sofort. Bezahlte Tarife.
no_countdownbooleanKein Countdown auf der Weiterleitungsseite: kein Timer, keine automatische Weiterleitung, der Besucher klickt die Adresse an. Bezahlte Tarife.
adultbooleanInhalte für Erwachsene (18+): Besucher bestätigen ihr Alter auf einer eigenen Seite, bevor etwas anderes gezeigt wird. In jedem Tarif.
tagsstringTags durch Komma getrennt (bis 5, je 24 Zeichen). Kontotoken in bezahlten Tarifen.
qrbooleanDen QR-Code der Kurzadresse (base64) in die Antwort aufnehmen.
qr_sizeintegerSeite des QR-Bilds in Pixeln, 100–1000 (Standard 300, PNG rundet auf ganze Module ab).
qr_formatstringpng (Standard) oder svg.
qr_logobooleanfalse = Code ohne Logo. Nur bezahlte Tarife, sonst ignoriert.

Links auflisten

GET /api/v1/links

Erfordert ein Kontotoken.

Erfordert ein Kontotoken. Links werden neueste zuerst zurückgegeben.

curl "https://anonym.es/api/v1/links?page=1&per=50" \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
FeldTypWas er tut
pageintegerSeitennummer (Standard 1).
perintegerLinks pro Seite, 1–100 (Standard 50).
qstringSuche in Kurzname, Domain und Ziel (eine flache Liste, bis 50).
tagstringNur Links mit diesem Tag.

Suche und Tag-Filter lassen sich kombinieren:

curl "https://anonym.es/api/v1/links?q=example&tag=promo" \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"

Felder der Antwort:

FeldTypWas er tut
pageintegerAktuelle Seite.
perintegerLinks pro Seite.
totalintegerZahl der gefundenen Links.
pagesintegerZahl der Seiten.
linksarrayLink-Objekte, neueste zuerst.

Einen Link über die Kurzadresse finden

Ein Link wird über seine numerische ID angesprochen (Feld id, zum Beispiel 4821), nicht über den Namen in der Kurzadresse. Ist nur die Kurzadresse bekannt, lässt sich die ID mit jedem Token ermitteln, das diesen Link verwaltet:

curl --get https://anonym.es/api/v1/links/lookup \
  -H "Authorization: Bearer YOUR_TOKEN" \
  --data-urlencode "short=https://anonym.es/k7m2q"

Linkdetails und Statistik

GET /api/v1/links/{id}

Liefert die Einstellungen des Links, seinen Status, die Zahl der Besuche und der eindeutigen Besucher über seine gesamte Lebensdauer:

curl https://anonym.es/api/v1/links/4821 \
  -H "Authorization: Bearer YOUR_TOKEN"

Mit einem Kontotoken fügt der Parameter stats einen Besuchsbericht hinzu:

curl "https://anonym.es/api/v1/links/4821?stats=day" \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
WertBerichtszeitraum
dayLetzte 30 Tage, nach Tagen
weekLetzte 26 Wochen, nach ISO-Wochen
monthLetzte 24 Monate, nach Monaten

Felder der Antwort: stats

FeldTypWas er tut
modestringday, week oder month.
fromstringErster Tag des Berichts, JJJJ-MM-TT.
tostringLetzter Tag des Berichts.
seriesarrayEin Eintrag pro Zeitraum, älteste zuerst: [from, to, visits, uniques].
summaryobjectcur (aktueller Zeitraum), prev (der vorherige), avg (Durchschnitt der Zeiträume vor dem aktuellen), jeweils mit hits und uniq.
dimsobjectAufschlüsselung für den Bereich: ref, country, device, os, browser, hour, jeweils eine Liste [Wert, Besuche].

Einen Link ändern

PATCH /api/v1/links/{id}

Nur die gesendeten Felder ändern sich:

curl -X PATCH https://anonym.es/api/v1/links/4821 \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"max_hits": 2000, "delay": 3, "tags": "blog,updated"}'

Änderungen erfordern einen bezahlten Tarif. Ein Link-Token hat die Rechte des Free-Tarifs und kann keine Einstellungen ändern.

FeldTypWas er tut
urlstringNeues Ziel. Ab Pro+.
namestringNeuer Name (gleiche Regeln wie ein eigener Name).
expires_daysintegerNeue Lebensdauer in Tagen, leer = kein Ablauf.
max_hitsintegerNeues Besuchslimit, leer = kein Limit.
self_destructbooleanEndgültig löschen, wenn Limit oder Lebensdauer erreicht ist, false schaltet es ab.
passwordstringNeues Passwort, ein leerer String entfernt das Passwort.
notestringNeue Notiz, leer entfernt sie (ein reiner Notizlink braucht weiterhin eine).
delayintegerSekunden auf der Weiterleitungsseite, leer = Tarifstandard.
no_countdownbooleantrue = kein Countdown auf der Weiterleitungsseite, false schaltet den Countdown wieder ein.
adultbooleantrue = Altersbestätigung (18+) vor der Weiterleitungsseite, false entfernt sie.
tagsstringNeue Tagliste durch Komma getrennt, leer entfernt alle Tags.

Einen Wert löschen

curl -X PATCH https://anonym.es/api/v1/links/4821 \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"password": "", "note": "", "expires_days": null, "max_hits": null, "delay": 0}'

Einen Link löschen

DELETE /api/v1/links/{id}
curl -X DELETE https://anonym.es/api/v1/links/4821 \
  -H "Authorization: Bearer YOUR_TOKEN"

Nach dem Löschen ist der eigene Name wieder frei. Die Statistik wird mit dem Link gelöscht.

Felder der Antwort:

FeldTypWas er tut
deletedintegerDie ID des gelöschten Links.

QR-Code

Für ein HTML-img-Tag fordern Sie den Code über die Kurzadresse an. Dieser Endpunkt braucht kein Token: Die Kurzadresse selbst ist der Schlüssel, und jeder, der sie kennt, kann denselben Code erzeugen.

<img
  src="https://anonym.es/api/v1/qr?short=https%3A%2F%2Fanonym.es%2Fk7m2q&qr_size=400"
  alt="QR code"
>

Serverseitiger Code kann das Bild auch per ID mit Token anfordern oder es base64-codiert in JSON erhalten, indem qr=true an den Aufruf zum Anlegen oder zu den Details angehängt wird:

curl "https://anonym.es/api/v1/links/4821/qr?qr_size=400&qr_format=svg" \
  -H "Authorization: Bearer YOUR_TOKEN" -o qr.svg

Parameter beider Bild-Endpunkte:

FeldTypWas er tut
shortstring, erforderlichDie Kurzadresse, zum Beispiel https://anonym.es/abc12.
qr_sizeintegerSeite des QR-Bilds in Pixeln, 100–1000 (Standard 300, PNG rundet auf ganze Module ab).
qr_formatstringpng (Standard) oder svg.
qr_logobooleanfalse = Code ohne Logo. Nur bezahlte Tarife, sonst ignoriert.

Das Feld qr in JSON-Antworten:

FeldTypWas er tut
formatstringpng oder svg.
mimestringimage/png oder image/svg+xml.
sizeintegerAngeforderte Seitenlänge in Pixeln.
logobooleanOb das Logo in der Mitte gezeichnet ist.
base64stringDas Bild, base64-codiert.

Kontodetails

GET /api/v1/me

Erfordert ein Kontotoken. Liefert den Tarif, seine Limits und die verbleibende Quote:

curl https://anonym.es/api/v1/me \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
FeldTypWas er tut
loginstringDer Login des Kontos.
planstringTarifschlüssel: free, pro, pro_plus, max oder enterprise.
plan_labelstringDer Tarifname, wie auf der Website gezeigt.
untilstring | nullWann der bezahlte Tarif endet, ISO 8601. null bei Free oder ohne Enddatum.
limitsobjectlinks (pro Zeitraum), per (day oder month), ai_hourly (eigene Namen pro Stunde), name_min (kürzester eigener Name), note_max (Notizlänge), api_units (API-Budget pro Minute).
leftinteger | nullIm aktuellen Quotenzeitraum verbleibende Links, null ohne Limit.
aliasesarrayDie weiteren Domains, die der Tarif nutzen darf.
canobjectEin Boolescher Wert pro Option: password, ttl, edit, edit_url, tags, note, note_only, alias, sub, instant, qr_no_logo.

API für temporäre E-Mail

Legen Sie eine Adresse auf einer Domain des Tarifs an, fragen Sie sie auf neue Mails ab, lesen Sie Nachrichten samt Authentifizierungsergebnis, antworten Sie auf eingehende Mails und löschen Sie die Adresse, wenn sie nicht mehr gebraucht wird. Nötig ist ein Konto-Token ab Pro. Es gelten die Grenzen des Tarifs.

Eine Adresse lebt so lange, wie der Tarif erlaubt. Die Zahlen stehen in der Tabelle unten. Der Aufruf extend setzt die Uhr zurück. Antworten und freie Sendungen werden pro Adresse und UTC-Tag gezählt.

Die Post einer Adresse wird verschlüsselt gespeichert. Der Schlüssel kommt ein einziges Mal, im Feld key der Antwort auf das Anlegen der Adresse. Der Server bewahrt ihn nicht auf, speichern Sie ihn also selbst. Senden Sie ihn im Header X-Mail-Key, wenn Sie die Liste abrufen, eine Nachricht lesen, einen Anhang laden, Gesendetes abrufen oder antworten. Der Server öffnet die Post nur im Speicher und nur für diese eine Antwort. Ohne den Header kommen die Zeilen mit encrypted = true und ohne Inhalt zurück.

Adresse anlegen

curl -X POST https://anonym.es/api/v1/mail/addresses \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"quiet-heron-41","domain":"anon.skin"}'
FeldTypWas er tut
namestringLokaler Teil, 3-30 Buchstaben, Ziffern, Punkte oder Bindestriche. Leer = ein zufälliger Name.
domainstringEine der Domains des Tarifs (siehe /mail/domains). Standard ist die erste.

Felder der Antwort: address

FeldTypWas er tut
idintegerNumerische Id der Adresse für die übrigen Aufrufe.
addressstringDie vollständige Adresse.
domainstringIhre Domain.
created_atstringISO 8601, UTC.
expires_atstring | nullWann die Adresse erlischt, null bei einer angehefteten Adresse.
seconds_leftinteger | nullSekunden bis zum Erlöschen, null = nie.
extendsintegerBisher genutzte Verlängerungen.
extends_leftinteger | nullVerbleibende Verlängerungen, null = unbegrenzt.
pinnedbooleantrue, wenn die Adresse angeheftet ist: keine Uhr, sie lebt, solange der Tarif aktiv ist.
reservedbooleantrue, wenn der Tarif diese angeheftete Adresse nicht mehr abdeckt. Sie behält ihren Namen und nimmt Mails an, jeder Aufruf zum Lesen oder Senden antwortet mit address_reserved.
reserved_leftinteger | nullSekunden, bis eine reservierte Adresse samt Mails gelöscht wird, null, wenn sie nicht in Reserve ist.
mailsintegerMessages in the inbox of the address. Only in the list of GET /mail/addresses.
unreadintegerUnread messages among them. Only in the list of GET /mail/addresses.
quotaobjectHeutiges Sendekontingent: replies, replies_left, sends, sends_left (UTC-Tag).
encryptedbooleantrue, wenn die Post der Adresse verschlüsselt gespeichert wird.
keystringDer geheime Schlüssel der Adresse, base64. Er kommt nur in der Antwort auf POST /mail/addresses und POST /mail/addresses/{id}/key. Er wird einmal gezeigt und nicht auf dem Server aufbewahrt. Senden Sie ihn als Header X-Mail-Key, um Post, Anhänge und Gesendetes zu lesen und zu antworten. In das Schlüsselfeld der Adresse auf der Website eingefügt, öffnet er die Post auch dort. Ein verlorener Schlüssel lässt sich nicht wiederherstellen.

Die Domains, auf denen Ihr Tarif Adressen anlegen kann:

curl https://anonym.es/api/v1/mail/domains \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"

Wie viele Adressen der Tarif gleichzeitig und pro Stunde erlaubt und was davon übrig ist:

curl https://anonym.es/api/v1/mail/limits \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"

Felder der Antwort: limits

FeldTypWas er tut
addresses.limitinteger | nullAdressen, die der Tarif gleichzeitig erlaubt, null = unbegrenzt.
addresses.usedintegerAktive Adressen des Kontos.
new_per_hour.limitinteger | nullNeue Adressen, die der Tarif pro Stunde erlaubt, null = unbegrenzt.
new_per_hour.leftinteger | nullNeue Adressen, die in der laufenden Stunde übrig sind, null = unbegrenzt.
new_per_hour.wait_minintegerMinuten, bis eine neue Adresse möglich ist, 0 = sofort.
pinned.limitinteger | nullWie viele Adressen der Tarif anheften lässt, null = unbegrenzt, 0 = keine.
pinned.usedintegerAngeheftete Adressen des Kontos, die reservierten eingeschlossen.
pinned.reservedintegerWie viele davon in Reserve warten.

Schlüssel verloren? Der Aufruf unten stellt einen neuen aus. Post unter dem alten Schlüssel bleibt verschlossen.

curl -X POST https://anonym.es/api/v1/mail/addresses/17/key \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"

Posteingang abfragen

curl https://anonym.es/api/v1/mail/addresses/17/messages \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "X-Mail-Key: ADDRESS_KEY"

Felder der Antwort: messages[]

FeldTypWas er tut
idintegerNumerische Id der Nachricht.
fromstringAbsenderadresse.
from_namestringAnzeigename des Absenders.
subjectstringBetreff.
previewstringDie ersten 140 Zeichen des Textes.
received_atstringISO 8601, UTC.
readbooleantrue, sobald die Nachricht geöffnet (oder als gelesen markiert) wurde.
verifiedbooleantrue, wenn die Absenderdomain die Authentifizierung bestanden hat (DMARC pass oder DKIM/SPF pass mit Ausrichtung auf die From-Domain); nur dann ist eine Antwort erlaubt.
verified_domainstring | nullDie authentifizierte Domain oder null.
attachmentsintegerAnzahl der Anhänge.
encryptedbooleanVorhanden und true, wenn die Anfrage keinen X-Mail-Key enthielt. Die Zeile kommt dann ohne Inhalt. Mit dem Schlüssel der Adresse öffnet der Server die Nachricht im Speicher für diese eine Antwort und bewahrt weder Schlüssel noch Text auf.

read bleibt false, bis die Nachricht vollständig abgerufen oder als gelesen markiert wurde. Mit keep_unread=true beim vollständigen Abruf lesen Sie, ohne zu markieren.

Nachricht lesen

curl https://anonym.es/api/v1/mail/addresses/17/messages/2 \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "X-Mail-Key: ADDRESS_KEY"

Die vollständige Nachricht ergänzt die Listenfelder um:

FeldTypWas er tut
textstringTextkörper.
htmlstringHTML-Körper, falls vorhanden (in einer Sandbox darstellen).
attachmentsarrayAnhänge mit n, name, type, size und url. Die url ist die Download-Adresse und braucht denselben Token.
authobjectAuthentifizierungsergebnisse von Cloudflare: spf, dkim, dkim_domain, dmarc.

Antworten sind nur bei verified = true erlaubt.

Eine Nachricht als gelesen oder ungelesen markieren:

curl -X PATCH https://anonym.es/api/v1/mail/addresses/17/messages/2 \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"read": false}'

Antworten

curl -X POST https://anonym.es/api/v1/mail/addresses/17/messages/2/reply \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "X-Mail-Key: ADDRESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Confirmed, thanks."}'

Die Antwort geht an die From-Adresse der Nachricht, im selben Thread (In-Reply-To und References), und zählt zu den Antworten des Tarifs pro Tag.

Nachricht senden

curl -X POST https://anonym.es/api/v1/mail/addresses/17/send \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"to":"[email protected]","subject":"Hello","text":"Sent from a temporary address."}'
FeldTypWas er tut
tostring, erforderlichEmpfängeradresse.
subjectstring, erforderlichBetreff.
textstring, erforderlichNachrichtentext (reiner Text, bis 4000 Zeichen).

Gesendet

curl https://anonym.es/api/v1/mail/addresses/17/sent \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
  -H "X-Mail-Key: ADDRESS_KEY"
FeldTypWas er tut
idintegerNumerische Id der gesendeten Nachricht.
kindstringreply oder free.
tostringEmpfänger.
subjectstringBetreff.
textstringDer gesendete Text.
created_atstringISO 8601, UTC.
reply_tointeger | nullId der beantworteten Nachricht; null bei einer freien Sendung.

Temporäre E-Mail nach Tarif

TarifAdressen gleichzeitigNeue Adressen pro StundeLebensdauerVerlängerungenAntworten / TagFreie Sendungen / TagDomains
Free 1 10 2 h 2 0 0 4
Pro 3 30 12 h 6 1 0 9
Pro+ 10 60 2 d 6 3 1 14
Max 30 150 7 d 7 10 2 23
Enterprise unbegrenzt unbegrenzt 30 d unbegrenzt unbegrenzt unbegrenzt 23

Fehler

Fehler werden in einem einheitlichen JSON-Format zurückgegeben:

{
  "ok": false,
  "error": "taken",
  "message": "This name is already taken.",
  "field": "name",
  "suggest": ["my-article-26", "my-my-article", "my-article-link"]
}

field enthält den Namen des fehlerhaften Parameters oder null, wenn der Fehler kein bestimmtes Feld betrifft. Ein vergebener Name ergänzt suggest, eine kostenpflichtige Option upgrade, Quoten und Ratenlimits den Header Retry-After.

HTTPBedeutung
400Fehler in den Anfrageparametern
401Token fehlt oder ist ungültig
403Tarif oder Tokentyp erlauben diesen Aufruf nicht
404Der Link existiert nicht oder gehört jemand anderem
405Methode für diesen Pfad nicht erlaubt
409Der eigene Name ist vergeben
429Ratenlimit oder Quote erschöpft, siehe Retry-After
501PNG ist auf diesem Server nicht verfügbar, fordern Sie svg an
Alle Fehlercodes
CodeHTTPFeldWas er tut
bad_request400Fehlerhafte Anfrage.
bad_url400urlDie Adresse fehlt oder ist keine gültige http(s)-URL.
blocked400urlAuf dieses Ziel kann nicht verlinkt werden.
bad_name400nameDieser Name ist nicht erlaubt.
dirty400nameDieser Name ist nicht erlaubt.
brand400nameDieser Name sieht wie ein Markenname aus und kann nicht verwendet werden.
reserved400nameDieser Name ist reserviert.
too_short400nameDer Name ist für Ihren Tarif zu kurz.
sub_format400nameEin Subdomain-Name besteht aus 3 bis 32 Buchstaben, Ziffern oder Bindestrichen.
sub_main400domainSubdomain-Links gibt es nur auf den weiteren Domains.
name_batch400nameEin eigener Name gilt für eine einzelne Adresse, nicht für einen Stapel.
taken409nameDieser Name ist bereits vergeben.
note_long400noteDie Notiz ist länger, als Ihr Tarif erlaubt.
note_required400noteEin reiner Notizlink braucht eine Notiz.
bad_tag400tagsTags: bis zu 5, je bis zu 24 Zeichen.
pro_only403Diese Option erfordert einen bezahlten Tarif.
max_only403Subdomain-Links erfordern den Tarif Max.
account_only403Dieser Aufruf erfordert ein Kontotoken.
limit429Die Linkquote für diesen Zeitraum ist aufgebraucht.
domain_limit429urlDas Tageslimit für Links zu dieser Website ohne Konto ist aufgebraucht.
ai_limit429nameZu viele eigene Namen in dieser Stunde, versuchen Sie es später erneut.
rate_limited429Zu viele Anfragen, bitte langsamer.
busy429Zu viele Links werden gleichzeitig angelegt, versuchen Sie es gleich erneut.
auth401Token fehlt oder ist ungültig.
not_found404Kein solcher Link.
no_route404Kein solcher Endpunkt.
method405Methode nicht erlaubt.
fetch500Der Link konnte nicht angelegt werden, versuchen Sie es erneut.
qr_unavailable501qr_formatPNG-QR-Codes sind auf diesem Server nicht verfügbar, fordern Sie svg an.
no_address404Diese Adresse gibt es nicht.
no_message404Diese Nachricht gibt es nicht.
bad_domain400domainDiese Domain gehört nicht zu Ihrem Tarif.
addr_limit429Das Adresslimit des Tarifs ist erreicht. Löschen Sie zuerst eine.
new_rate429Das stündliche Limit neuer Adressen des Tarifs ist erreicht. Versuchen Sie es später erneut.
extend_limit429Für diese Adresse sind keine Verlängerungen mehr übrig.
no_expiry400Diese Adresse läuft nie ab.
address_reserved409Die Adresse ist in Reserve: Der Tarif deckt sie nicht mehr ab. Verlängern Sie den Tarif oder machen Sie die Adresse temporär.
pin_plan403Angeheftete Adressen gibt es in bezahlten Tarifen.
pin_limit429Der Tarif lässt keine weiteren angehefteten Adressen zu.
pin_domain400Adressen auf dieser Domain lassen sich nicht anheften.
temp_no_room429Im Tarif ist kein Platz für diese Adresse frei. Löschen Sie zuerst eine Adresse.
unverified403Der Absender dieser Nachricht hat die Authentifizierung nicht bestanden, eine Antwort darauf ist nicht erlaubt.
reply_limit429Für diese Adresse sind heute keine Antworten mehr übrig.
send_limit429Für diese Adresse sind heute keine freien Sendungen mehr übrig.
send_off403Senden gehört nicht zu diesem Tarif.
bad_to400toGeben Sie eine gültige Empfängeradresse an.
bad_subject400subjectEin Betreff ist erforderlich.
empty400textDer Nachrichtentext ist leer.
send_unavailable503Das Senden ist für diese Adresse noch nicht eingeschaltet.
send_rejected422toDer Maildienst hat diese Nachricht abgelehnt. Prüfen Sie die Empfängeradresse oder versuchen Sie es später erneut.
send_failed502Die Nachricht konnte nicht gesendet werden. Versuchen Sie es in einer Minute erneut.
key_required403Die Post dieser Adresse ist verschlüsselt. Senden Sie den Adressschlüssel im Header X-Mail-Key.
bad_key403Der Header X-Mail-Key enthält nicht den Schlüssel dieser Adresse.
site_address403Diese Adresse wurde auf der Website angelegt. Ihr Schlüssel liegt im Browser, die API kann ihn nicht ersetzen.
worker502Der Maildienst hat nicht geantwortet. Versuchen Sie es gleich noch einmal.

Ratenlimits

Jeder Aufruf kostet Einheiten, und jeder Tarif hat ein Budget an Einheiten pro Minute (siehe Tarife und Limits). Ein Lesezugriff kostet 1 Einheit, eine Listenseite 2, ein QR-Code 3, eine Änderung 3, ein Löschen 2, ein Anlegen 5 plus 1 pro Adresse. Jede Antwort trägt diese Header:

HeaderWert
X-RateLimit-LimitBudget an Einheiten pro Minute
X-RateLimit-RemainingVerbleibende Einheiten in der aktuellen Minute
X-RateLimit-ResetSekunden bis zur Erneuerung des Budgets
Retry-AfterBei 429: Sekunden bis zum nächsten Versuch

Innerhalb eines beliebigen Zeitfensters von 10 Sekunden kann höchstens ein Viertel des Minutenbudgets ausgegeben werden, mindestens jedoch 20 Einheiten. Ist das Budget erschöpft, antwortet die API mit Status 429.

Tarife und Limits

Die genauen Limits jedes Tarifs. Links zählen im Free-Tarif pro Tag und IP-Adresse, in bezahlten Tarifen pro Monat und Konto. Die letzte Spalte nennt die Einstellungen, die ein Tarif nutzen kann.

TarifLinksEigene Namen pro StundeKürzester NameNotizlängeEinheiten pro MinuteEinstellungen
Free 5 pro Tag und IP-Adresse 5 5 0 60 keine
Pro 500 pro Monat 10 3 300 150 password, expires_days, max_hits, edit, tags, note, domain, delay, qr_logo
Pro+ 2,000 pro Monat 50 3 2,000 400 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, delay, qr_logo
Max 50,000 pro Monat 200 3 5,000 1,000 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo
Enterprise unbegrenzt unbegrenzt 3 5,000 2,500 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo

Ohne Kontotoken zählt das Anlegen auf die Free-Quote der IP-Adresse: 5 Links pro Tag. Links auf eine Zieldomain, die vor weniger als einem Jahr registriert wurde, teilen sich ein Gastlimit von 5 pro Tag, wer auch immer sie anlegt. Pro Aufrufer können höchstens 2 Links gleichzeitig angelegt werden.

OpenAPI-Spezifikation

Die vollständige technische Beschreibung als OpenAPI-3.1-Dokument: https://anonym.es/api/v1/openapi.json

Es enthält Schemata und Beispiele aller Anfragen und Antworten, die Tariflimits, die Namensregeln und die Fehlercodes. Es eignet sich für Swagger UI, Postman, Insomnia und Client-Generatoren.