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.
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.
| Feld | Typ | Was er tut |
|---|---|---|
id | integer | Numerische ID des Links, von den übrigen Aufrufen verwendet. |
short | string | Die Kurzadresse zum Teilen. |
url | string | null | Das Ziel, null bei einem reinen Notizlink. |
status | string | active | expired | exhausted (Besuchslimit erreicht) | flagged (Ziel auf einer Sicherheitsliste) | banned. |
password | boolean | Besucher müssen ein Passwort eingeben. |
created_at | string | ISO 8601, UTC. |
expires_at | string | null | Wann der Link abläuft, null = kein Ablauf. |
max_hits | integer | null | Besuchslimit, null = kein Limit. |
self_destruct | boolean | Der Link löscht sich endgültig selbst, wenn Limit oder Lebensdauer erreicht ist. |
delay | integer | null | Sekunden auf der Weiterleitungsseite, null = Tarifstandard, 0 = sofort. |
no_countdown | boolean | Die Weiterleitungsseite zeigt keinen Countdown und wartet auf einen Klick auf die Adresse. |
adult | boolean | Besucher bestätigen vor der Weiterleitungsseite, dass sie 18 oder älter sind. |
note | string | null | Die Notiz auf der Weiterleitungsseite. |
tags | string[] | Tags, in Kleinbuchstaben. |
clicks | integer | Besuche über die gesamte Lebensdauer des Links. |
uniques | integer | Eindeutige 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
| Token | Woher | Wofür |
|---|---|---|
| Kontotoken | Im Konto | Alle Links des Kontos mit den Rechten des Tarifs |
| Link-Token | Wird beim Anlegen eines Links zurückgegeben | Ein 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"
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.
| Methode | Pfad | Token | Kosten | Was er tut |
|---|---|---|---|---|
GET | /api/v1 | optional | 1 | Über diese API: Version, Adressen der Dokumentation und des Schemas. |
POST | /api/v1/links | optional | 5 + 1/url | Einen 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/check | optional | 2 | Ist dieser eigene Name frei? Vorschläge, wenn er vergeben ist. |
GET | /api/v1/links | Konto | 2 | Die Links des Kontos, neueste zuerst. |
GET | /api/v1/links/lookup | Link oder Konto | 1 | Einen eigenen Link über seine Kurzadresse finden. |
GET | /api/v1/links/{id} | Link oder Konto | 1 | Ein 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 Konto | 3 | Einstellungen ä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 Konto | 2 | Den Link löschen. Der Name wird wieder frei. |
GET | /api/v1/links/{id}/qr | Link oder Konto | 3 | Der QR-Code der Kurzadresse als Bild (PNG oder SVG). Braucht ein Token und eignet sich daher für Servercode. |
GET | /api/v1/qr | optional | 3 | Der QR-Code einer Kurzadresse als Bild ohne Token: Die Adresse selbst ist der Schlüssel. Gemacht für <img>-Tags. |
GET | /api/v1/me | Konto | 1 | Das Konto: Tarif, Limits, verbleibende Quote, weitere Domains, erlaubte Einstellungen. |
GET | /api/v1/openapi.json | optional | 1 | Diese API als OpenAPI-3.1-Dokument. |
Temporäre E-Mail
| Methode | Pfad | Token | Kosten | Was er tut |
|---|---|---|---|---|
GET | /api/v1/mail/domains | Konto | 1 | Temporäre E-Mail: die Domains, auf denen der Tarif Adressen anlegen darf, und welche davon eine angeheftete Adresse annehmen (pinnable). |
GET | /api/v1/mail/limits | Konto | 1 | Temporäre E-Mail: wie viele Adressen der Tarif gleichzeitig und pro Stunde erlaubt und was übrig ist. |
GET | /api/v1/mail/addresses | Konto | 2 | Temporäre E-Mail: die aktiven Adressen des Kontos mit ihrer Restzeit. |
POST | /api/v1/mail/addresses | Konto | 5 | Temporä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} | Konto | 1 | Temporäre E-Mail: eine Adresse mit Restzeit, Verlängerungen und dem heutigen Sendekontingent. |
POST | /api/v1/mail/addresses/{id}/key | Konto | 3 | Temporä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}/pin | Konto | 3 | Temporä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}/unpin | Konto | 3 | Temporä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}/extend | Konto | 3 | Temporäre E-Mail: die Uhr der Adresse auf die volle Tariflaufzeit zurücksetzen (zählt als Verlängerung). |
DELETE | /api/v1/mail/addresses/{id} | Konto | 2 | Temporäre E-Mail: die Adresse mit allem Inhalt löschen. |
GET | /api/v1/mail/addresses/{id}/messages | Konto | 2 | Temporä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} | Konto | 1 | Temporä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} | Konto | 3 | Temporäre E-Mail: eine Nachricht als gelesen oder ungelesen markieren. |
DELETE | /api/v1/mail/addresses/{id}/messages/{mid} | Konto | 2 | Temporäre E-Mail: eine Nachricht löschen. |
GET | /api/v1/mail/addresses/{id}/messages/{mid}/attachments/{n} | Konto | 1 | Temporäre E-Mail: ein Anhang als Dateidownload. Benötigt X-Mail-Key. |
POST | /api/v1/mail/addresses/{id}/messages/{mid}/reply | Konto | 5 | Temporä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}/send | Konto | 5 | Temporäre E-Mail: eine Nachricht an eine beliebige Adresse senden (freie Sendungen des Tarifs). |
GET | /api/v1/mail/addresses/{id}/sent | Konto | 2 | Temporä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:
| Feld | Typ | Was er tut |
|---|---|---|
link | object | Der angelegte Link. |
token | string | Das Link-Token (32 Zeichen), verwaltet diesen Link. |
left | integer | null | Im aktuellen Quotenzeitraum verbleibende Links, null bei einem Tarif ohne Limit. |
qr | object | Der QR-Code, vorhanden, wenn qr=true gesendet wurde. |
batch | boolean | true, wenn mehrere Adressen gesendet wurden. |
results | array | Ein 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:
- Lateinische Buchstaben, Ziffern, Bindestrich und Unterstrich. Ab 5 Zeichen im Free-Tarif und ab 3 in bezahlten Tarifen, höchstens 32. Groß- und Kleinschreibung spielt keine Rolle: Promo und promo sind derselbe Link.
- Seitennamen, Sprachcodes und Dienstwörter sind reserviert.
- Markennamen und anstößige Wörter werden abgelehnt. Namen durchlaufen eine Wortliste und eine automatische Prüfung. Die Zahl eigener Namen pro Stunde ist je Tarif begrenzt.
- Ein vergebener Name liefert Status 409 mit freien Alternativen in suggest.
- Ein Subdomain-Name (sub: true, Tarif Max) ist ein DNS-Label: Buchstaben, Ziffern und Bindestriche, kein Bindestrich am Rand, kein Unterstrich. Namen wie www, mail oder ns1 sind reserviert.
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:
| Feld | Typ | Was er tut |
|---|---|---|
available | boolean | true, wenn der Name verwendet werden kann. |
name | string | Der geprüfte Name. |
error | string | Warum der Name nicht verfügbar ist: taken, reserved, too_short und die übrigen Namensfehler. |
message | string | Der Grund in Worten. |
field | string | Immer name. |
suggest | array | Freie 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.
| Feld | Typ | Was er tut |
|---|---|---|
url | string, erforderlich | Die Zieladresse. Oder urls: mehrere Adressen, eine pro Zeile oder als JSON-Array (bis 50), jede wird ein eigener Link. |
name | string | Eigener Name für einen einzelnen Link (geprüft gegen die Regeln und den Namensfilter). |
domain | string | One 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. |
sub | boolean | name.alias statt alias/name. Tarif Max, nur auf den weiteren Domains. |
expires_days | integer | Lebensdauer in Tagen. Bezahlte Tarife. |
max_hits | integer | Besuchslimit. Bezahlte Tarife. |
self_destruct | boolean | Den Link endgültig löschen, wenn das Besuchslimit oder die Lebensdauer erreicht ist (braucht max_hits oder expires_days). |
password | string | Passwort, das Besucher eingeben müssen. Bezahlte Tarife. |
note | string | Text auf der Weiterleitungsseite. Bezahlte Tarife, Länge je Tarif. |
note_only | boolean | Der Link öffnet die Notiz selbst, kein Ziel. Ab Pro+. |
delay | integer | Sekunden auf der Weiterleitungsseite, 0 = sofort. Bezahlte Tarife. |
no_countdown | boolean | Kein Countdown auf der Weiterleitungsseite: kein Timer, keine automatische Weiterleitung, der Besucher klickt die Adresse an. Bezahlte Tarife. |
adult | boolean | Inhalte für Erwachsene (18+): Besucher bestätigen ihr Alter auf einer eigenen Seite, bevor etwas anderes gezeigt wird. In jedem Tarif. |
tags | string | Tags durch Komma getrennt (bis 5, je 24 Zeichen). Kontotoken in bezahlten Tarifen. |
qr | boolean | Den QR-Code der Kurzadresse (base64) in die Antwort aufnehmen. |
qr_size | integer | Seite des QR-Bilds in Pixeln, 100–1000 (Standard 300, PNG rundet auf ganze Module ab). |
qr_format | string | png (Standard) oder svg. |
qr_logo | boolean | false = 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"
| Feld | Typ | Was er tut |
|---|---|---|
page | integer | Seitennummer (Standard 1). |
per | integer | Links pro Seite, 1–100 (Standard 50). |
q | string | Suche in Kurzname, Domain und Ziel (eine flache Liste, bis 50). |
tag | string | Nur 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:
| Feld | Typ | Was er tut |
|---|---|---|
page | integer | Aktuelle Seite. |
per | integer | Links pro Seite. |
total | integer | Zahl der gefundenen Links. |
pages | integer | Zahl der Seiten. |
links | array | Link-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"
| Wert | Berichtszeitraum |
|---|---|
day | Letzte 30 Tage, nach Tagen |
week | Letzte 26 Wochen, nach ISO-Wochen |
month | Letzte 24 Monate, nach Monaten |
Felder der Antwort: stats
| Feld | Typ | Was er tut |
|---|---|---|
mode | string | day, week oder month. |
from | string | Erster Tag des Berichts, JJJJ-MM-TT. |
to | string | Letzter Tag des Berichts. |
series | array | Ein Eintrag pro Zeitraum, älteste zuerst: [from, to, visits, uniques]. |
summary | object | cur (aktueller Zeitraum), prev (der vorherige), avg (Durchschnitt der Zeiträume vor dem aktuellen), jeweils mit hits und uniq. |
dims | object | Aufschlü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.
| Feld | Typ | Was er tut |
|---|---|---|
url | string | Neues Ziel. Ab Pro+. |
name | string | Neuer Name (gleiche Regeln wie ein eigener Name). |
expires_days | integer | Neue Lebensdauer in Tagen, leer = kein Ablauf. |
max_hits | integer | Neues Besuchslimit, leer = kein Limit. |
self_destruct | boolean | Endgültig löschen, wenn Limit oder Lebensdauer erreicht ist, false schaltet es ab. |
password | string | Neues Passwort, ein leerer String entfernt das Passwort. |
note | string | Neue Notiz, leer entfernt sie (ein reiner Notizlink braucht weiterhin eine). |
delay | integer | Sekunden auf der Weiterleitungsseite, leer = Tarifstandard. |
no_countdown | boolean | true = kein Countdown auf der Weiterleitungsseite, false schaltet den Countdown wieder ein. |
adult | boolean | true = Altersbestätigung (18+) vor der Weiterleitungsseite, false entfernt sie. |
tags | string | Neue Tagliste durch Komma getrennt, leer entfernt alle Tags. |
Einen Wert löschen
- password, note und tags: ein leerer String entfernt den Wert.
- expires_days und max_hits: null, ein leerer String oder 0 hebt das Limit auf. self_destruct erlischt, wenn weder Limit noch Lebensdauer bleibt.
- delay: null oder ein leerer String stellt den Tarifstandard wieder her. 0 bedeutet sofortige Weiterleitung.
- url kann nicht geleert werden, und ein reiner Notizlink braucht weiterhin eine Notiz.
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:
| Feld | Typ | Was er tut |
|---|---|---|
deleted | integer | Die 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:
| Feld | Typ | Was er tut |
|---|---|---|
short | string, erforderlich | Die Kurzadresse, zum Beispiel https://anonym.es/abc12. |
qr_size | integer | Seite des QR-Bilds in Pixeln, 100–1000 (Standard 300, PNG rundet auf ganze Module ab). |
qr_format | string | png (Standard) oder svg. |
qr_logo | boolean | false = Code ohne Logo. Nur bezahlte Tarife, sonst ignoriert. |
Das Feld qr in JSON-Antworten:
| Feld | Typ | Was er tut |
|---|---|---|
format | string | png oder svg. |
mime | string | image/png oder image/svg+xml. |
size | integer | Angeforderte Seitenlänge in Pixeln. |
logo | boolean | Ob das Logo in der Mitte gezeichnet ist. |
base64 | string | Das 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"
| Feld | Typ | Was er tut |
|---|---|---|
login | string | Der Login des Kontos. |
plan | string | Tarifschlüssel: free, pro, pro_plus, max oder enterprise. |
plan_label | string | Der Tarifname, wie auf der Website gezeigt. |
until | string | null | Wann der bezahlte Tarif endet, ISO 8601. null bei Free oder ohne Enddatum. |
limits | object | links (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). |
left | integer | null | Im aktuellen Quotenzeitraum verbleibende Links, null ohne Limit. |
aliases | array | Die weiteren Domains, die der Tarif nutzen darf. |
can | object | Ein 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"}'
| Feld | Typ | Was er tut |
|---|---|---|
name | string | Lokaler Teil, 3-30 Buchstaben, Ziffern, Punkte oder Bindestriche. Leer = ein zufälliger Name. |
domain | string | Eine der Domains des Tarifs (siehe /mail/domains). Standard ist die erste. |
Felder der Antwort: address
| Feld | Typ | Was er tut |
|---|---|---|
id | integer | Numerische Id der Adresse für die übrigen Aufrufe. |
address | string | Die vollständige Adresse. |
domain | string | Ihre Domain. |
created_at | string | ISO 8601, UTC. |
expires_at | string | null | Wann die Adresse erlischt, null bei einer angehefteten Adresse. |
seconds_left | integer | null | Sekunden bis zum Erlöschen, null = nie. |
extends | integer | Bisher genutzte Verlängerungen. |
extends_left | integer | null | Verbleibende Verlängerungen, null = unbegrenzt. |
pinned | boolean | true, wenn die Adresse angeheftet ist: keine Uhr, sie lebt, solange der Tarif aktiv ist. |
reserved | boolean | true, 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_left | integer | null | Sekunden, bis eine reservierte Adresse samt Mails gelöscht wird, null, wenn sie nicht in Reserve ist. |
mails | integer | Messages in the inbox of the address. Only in the list of GET /mail/addresses. |
unread | integer | Unread messages among them. Only in the list of GET /mail/addresses. |
quota | object | Heutiges Sendekontingent: replies, replies_left, sends, sends_left (UTC-Tag). |
encrypted | boolean | true, wenn die Post der Adresse verschlüsselt gespeichert wird. |
key | string | Der 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
| Feld | Typ | Was er tut |
|---|---|---|
addresses.limit | integer | null | Adressen, die der Tarif gleichzeitig erlaubt, null = unbegrenzt. |
addresses.used | integer | Aktive Adressen des Kontos. |
new_per_hour.limit | integer | null | Neue Adressen, die der Tarif pro Stunde erlaubt, null = unbegrenzt. |
new_per_hour.left | integer | null | Neue Adressen, die in der laufenden Stunde übrig sind, null = unbegrenzt. |
new_per_hour.wait_min | integer | Minuten, bis eine neue Adresse möglich ist, 0 = sofort. |
pinned.limit | integer | null | Wie viele Adressen der Tarif anheften lässt, null = unbegrenzt, 0 = keine. |
pinned.used | integer | Angeheftete Adressen des Kontos, die reservierten eingeschlossen. |
pinned.reserved | integer | Wie 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[]
| Feld | Typ | Was er tut |
|---|---|---|
id | integer | Numerische Id der Nachricht. |
from | string | Absenderadresse. |
from_name | string | Anzeigename des Absenders. |
subject | string | Betreff. |
preview | string | Die ersten 140 Zeichen des Textes. |
received_at | string | ISO 8601, UTC. |
read | boolean | true, sobald die Nachricht geöffnet (oder als gelesen markiert) wurde. |
verified | boolean | true, 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_domain | string | null | Die authentifizierte Domain oder null. |
attachments | integer | Anzahl der Anhänge. |
encrypted | boolean | Vorhanden 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:
| Feld | Typ | Was er tut |
|---|---|---|
text | string | Textkörper. |
html | string | HTML-Körper, falls vorhanden (in einer Sandbox darstellen). |
attachments | array | Anhänge mit n, name, type, size und url. Die url ist die Download-Adresse und braucht denselben Token. |
auth | object | Authentifizierungsergebnisse 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."}'
| Feld | Typ | Was er tut |
|---|---|---|
to | string, erforderlich | Empfängeradresse. |
subject | string, erforderlich | Betreff. |
text | string, erforderlich | Nachrichtentext (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"
| Feld | Typ | Was er tut |
|---|---|---|
id | integer | Numerische Id der gesendeten Nachricht. |
kind | string | reply oder free. |
to | string | Empfänger. |
subject | string | Betreff. |
text | string | Der gesendete Text. |
created_at | string | ISO 8601, UTC. |
reply_to | integer | null | Id der beantworteten Nachricht; null bei einer freien Sendung. |
Temporäre E-Mail nach Tarif
| Tarif | Adressen gleichzeitig | Neue Adressen pro Stunde | Lebensdauer | Verlängerungen | Antworten / Tag | Freie Sendungen / Tag | Domains |
|---|---|---|---|---|---|---|---|
| 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.
| HTTP | Bedeutung |
|---|---|
400 | Fehler in den Anfrageparametern |
401 | Token fehlt oder ist ungültig |
403 | Tarif oder Tokentyp erlauben diesen Aufruf nicht |
404 | Der Link existiert nicht oder gehört jemand anderem |
405 | Methode für diesen Pfad nicht erlaubt |
409 | Der eigene Name ist vergeben |
429 | Ratenlimit oder Quote erschöpft, siehe Retry-After |
501 | PNG ist auf diesem Server nicht verfügbar, fordern Sie svg an |
Alle Fehlercodes
| Code | HTTP | Feld | Was er tut |
|---|---|---|---|
bad_request | 400 | Fehlerhafte Anfrage. | |
bad_url | 400 | url | Die Adresse fehlt oder ist keine gültige http(s)-URL. |
blocked | 400 | url | Auf dieses Ziel kann nicht verlinkt werden. |
bad_name | 400 | name | Dieser Name ist nicht erlaubt. |
dirty | 400 | name | Dieser Name ist nicht erlaubt. |
brand | 400 | name | Dieser Name sieht wie ein Markenname aus und kann nicht verwendet werden. |
reserved | 400 | name | Dieser Name ist reserviert. |
too_short | 400 | name | Der Name ist für Ihren Tarif zu kurz. |
sub_format | 400 | name | Ein Subdomain-Name besteht aus 3 bis 32 Buchstaben, Ziffern oder Bindestrichen. |
sub_main | 400 | domain | Subdomain-Links gibt es nur auf den weiteren Domains. |
name_batch | 400 | name | Ein eigener Name gilt für eine einzelne Adresse, nicht für einen Stapel. |
taken | 409 | name | Dieser Name ist bereits vergeben. |
note_long | 400 | note | Die Notiz ist länger, als Ihr Tarif erlaubt. |
note_required | 400 | note | Ein reiner Notizlink braucht eine Notiz. |
bad_tag | 400 | tags | Tags: bis zu 5, je bis zu 24 Zeichen. |
pro_only | 403 | Diese Option erfordert einen bezahlten Tarif. | |
max_only | 403 | Subdomain-Links erfordern den Tarif Max. | |
account_only | 403 | Dieser Aufruf erfordert ein Kontotoken. | |
limit | 429 | Die Linkquote für diesen Zeitraum ist aufgebraucht. | |
domain_limit | 429 | url | Das Tageslimit für Links zu dieser Website ohne Konto ist aufgebraucht. |
ai_limit | 429 | name | Zu viele eigene Namen in dieser Stunde, versuchen Sie es später erneut. |
rate_limited | 429 | Zu viele Anfragen, bitte langsamer. | |
busy | 429 | Zu viele Links werden gleichzeitig angelegt, versuchen Sie es gleich erneut. | |
auth | 401 | Token fehlt oder ist ungültig. | |
not_found | 404 | Kein solcher Link. | |
no_route | 404 | Kein solcher Endpunkt. | |
method | 405 | Methode nicht erlaubt. | |
fetch | 500 | Der Link konnte nicht angelegt werden, versuchen Sie es erneut. | |
qr_unavailable | 501 | qr_format | PNG-QR-Codes sind auf diesem Server nicht verfügbar, fordern Sie svg an. |
no_address | 404 | Diese Adresse gibt es nicht. | |
no_message | 404 | Diese Nachricht gibt es nicht. | |
bad_domain | 400 | domain | Diese Domain gehört nicht zu Ihrem Tarif. |
addr_limit | 429 | Das Adresslimit des Tarifs ist erreicht. Löschen Sie zuerst eine. | |
new_rate | 429 | Das stündliche Limit neuer Adressen des Tarifs ist erreicht. Versuchen Sie es später erneut. | |
extend_limit | 429 | Für diese Adresse sind keine Verlängerungen mehr übrig. | |
no_expiry | 400 | Diese Adresse läuft nie ab. | |
address_reserved | 409 | Die Adresse ist in Reserve: Der Tarif deckt sie nicht mehr ab. Verlängern Sie den Tarif oder machen Sie die Adresse temporär. | |
pin_plan | 403 | Angeheftete Adressen gibt es in bezahlten Tarifen. | |
pin_limit | 429 | Der Tarif lässt keine weiteren angehefteten Adressen zu. | |
pin_domain | 400 | Adressen auf dieser Domain lassen sich nicht anheften. | |
temp_no_room | 429 | Im Tarif ist kein Platz für diese Adresse frei. Löschen Sie zuerst eine Adresse. | |
unverified | 403 | Der Absender dieser Nachricht hat die Authentifizierung nicht bestanden, eine Antwort darauf ist nicht erlaubt. | |
reply_limit | 429 | Für diese Adresse sind heute keine Antworten mehr übrig. | |
send_limit | 429 | Für diese Adresse sind heute keine freien Sendungen mehr übrig. | |
send_off | 403 | Senden gehört nicht zu diesem Tarif. | |
bad_to | 400 | to | Geben Sie eine gültige Empfängeradresse an. |
bad_subject | 400 | subject | Ein Betreff ist erforderlich. |
empty | 400 | text | Der Nachrichtentext ist leer. |
send_unavailable | 503 | Das Senden ist für diese Adresse noch nicht eingeschaltet. | |
send_rejected | 422 | to | Der Maildienst hat diese Nachricht abgelehnt. Prüfen Sie die Empfängeradresse oder versuchen Sie es später erneut. |
send_failed | 502 | Die Nachricht konnte nicht gesendet werden. Versuchen Sie es in einer Minute erneut. | |
key_required | 403 | Die Post dieser Adresse ist verschlüsselt. Senden Sie den Adressschlüssel im Header X-Mail-Key. | |
bad_key | 403 | Der Header X-Mail-Key enthält nicht den Schlüssel dieser Adresse. | |
site_address | 403 | Diese Adresse wurde auf der Website angelegt. Ihr Schlüssel liegt im Browser, die API kann ihn nicht ersetzen. | |
worker | 502 | Der 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:
| Header | Wert |
|---|---|
X-RateLimit-Limit | Budget an Einheiten pro Minute |
X-RateLimit-Remaining | Verbleibende Einheiten in der aktuellen Minute |
X-RateLimit-Reset | Sekunden bis zur Erneuerung des Budgets |
Retry-After | Bei 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.
| Tarif | Links | Eigene Namen pro Stunde | Kürzester Name | Notizlänge | Einheiten pro Minute | Einstellungen |
|---|---|---|---|---|---|---|
| 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.