anonym.es

Link-API

De API maakt anonieme korte links, geeft hun klikstatistieken terug, wijzigt hun instellingen en verwijdert ze. Verzoeken en antwoorden gebruiken JSON. CORS is ingeschakeld, dus aanroepen werken ook vanuit browsercode.

Basisadres:

http://anonym.es/api/v1

Snel beginnen

Stuur het bestemmingsadres om een korte link te maken:

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

Voor deze aanroep is geen token vereist. Zonder token wordt de link als gastlink gemaakt binnen de Free-quota van je IP-adres.

Met een accounttoken zet dezelfde aanroep de link in je dashboard en telt hij mee voor je abonnement:

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

Het antwoord bevat het korte adres, de id van de link en het token dat deze link beheert. Bewaar het token: het is nodig om de link later te lezen of te verwijderen.

{
  "ok": true,
  "link": {
    "id": 4821,
    "short": "http://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
}

Velden van het linkobject

Alle endpoints die een link teruggeven gebruiken deze structuur. Tijdstempels zijn ISO 8601 in UTC. De tellers clicks en uniques beslaan de volledige levensduur van de link.

VeldTypeWat het doet
idintegerNumerieke id van de link, gebruikt door de andere aanroepen.
shortstringHet korte adres om te delen.
urlstring | nullDe bestemming, null bij een link met alleen een notitie.
statusstringactive | expired | exhausted (bezoeklimiet bereikt) | flagged (bestemming op een veiligheidslijst) | banned.
passwordbooleanBezoekers moeten een wachtwoord invoeren.
created_atstringISO 8601, UTC.
expires_atstring | nullWanneer de link vervalt, null = geen vervaldatum.
max_hitsinteger | nullBezoeklimiet, null = geen limiet.
self_destructbooleanDe link verwijdert zichzelf definitief als de limiet of de levensduur is bereikt.
delayinteger | nullSeconden op de doorstuurpagina, null = standaard van het plan, 0 = direct.
no_countdownbooleanDe doorstuurpagina toont geen aftelling en wacht op een klik op het adres.
adultbooleanVisitors confirm being 18 or older before the forwarding page.
notestring | nullDe notitie op de doorstuurpagina.
tagsstring[]Tags, in kleine letters.
clicksintegerBezoeken over de hele levensduur van de link.
uniquesintegerUnieke bezoekers (één per adres per dag) over de hele levensduur van de link.

Autorisatie

Geautoriseerde verzoeken dragen het token in de Authorization-header. Als alternatief wordt de header X-API-Key geaccepteerd. Tokens worden nooit in de query string doorgegeven.

Authorization: Bearer YOUR_TOKEN
TokenWaar te krijgenWaarvoor
AccounttokenIn het dashboardAlle links van het account, met de rechten van het plan
LinktokenWordt teruggegeven bij het maken van een linkEén specifieke link, met de rechten van het Free-plan

Een accounttoken begint met anon_. Een linktoken bestaat uit 32 tekens. Het aanmaken van een nieuw accounttoken maakt het vorige ongeldig.

Voorbeeld:

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

Een accounttoken aanmaken in het dashboard

Endpoints

De body van een verzoek kan als application/json of als application/x-www-form-urlencoded worden verzonden. Parameternamen en foutcodes zijn voor alle endpoints gelijk.

MethodePadTokenKostenWat het doet
GET/api/v1optioneel 1Over deze API: versie, adressen van de documentatie en het schema.
POST/api/v1/linksoptioneel 5 + 1/urlEen link maken, of tot 50 tegelijk. Zonder token: als gast, op de Free-quota. Geeft de link met zijn token terug.
GET/api/v1/names/checkoptioneel 2Is deze eigen naam beschikbaar? Suggesties als hij bezet is.
GET/api/v1/linksaccount 2De links van het account, nieuwste eerst.
GET/api/v1/links/lookuplink of account 1Een van je links vinden via het korte adres.
GET/api/v1/links/{id}link of account 1Eén link: instellingen, status, klikken en unieke bezoekers over de hele levensduur. Accounttokens kunnen een statistiekrapport toevoegen.
PATCH/api/v1/links/{id}link of account 3Instellingen wijzigen. Alleen verzonden velden veranderen. Betaalde plannen (een linktoken heeft Free-rechten en kan niet bewerken).
DELETE/api/v1/links/{id}link of account 2De link verwijderen. De naam komt weer vrij.
GET/api/v1/links/{id}/qrlink of account 3De QR-code van het korte adres als afbeelding (PNG of SVG). Vereist een token en past dus bij servercode.
GET/api/v1/qroptioneel 3De QR-code van een kort adres als afbeelding zonder token: het adres zelf is de sleutel. Gemaakt voor <img>-tags.
GET/api/v1/meaccount 1Het account: plan, limieten, resterende quota, extra domeinen, wat het plan toestaat.
GET/api/v1/openapi.jsonoptioneel 1Deze API als OpenAPI 3.1-document.

De kosten zijn in eenheden van de snelheidslimiet, zie Snelheidslimieten.

Een link maken

POST /api/v1/links

Het minimale verzoek bevat alleen het veld url:

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

Met een accounttoken hoort de link bij het account en telt hij mee voor het abonnement. Zonder token is het een gastlink op de IP-quota:

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

Een geslaagd verzoek geeft status 201 terug met de link, het token en het aantal links dat in de huidige quotaperiode overblijft.

Velden van het antwoord:

VeldTypeWat het doet
linkobjectDe gemaakte link.
tokenstringHet linktoken (32 tekens), beheert deze link.
leftinteger | nullLinks die in de huidige quotaperiode overblijven, null bij een plan zonder limiet.
qrobjectDe QR-code, aanwezig wanneer qr=true is verzonden.
batchbooleantrue wanneer meerdere adressen zijn verzonden.
resultsarrayEén item per adres, in de verzonden volgorde: {ok: true, link, token, qr} of {ok: false, url, error, message, field}.

Link met een eigen naam

Het korte adres krijgt de naam my-article als die vrij is en aan de regels hieronder voldoet.

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

Naamregels:

Een naam kan worden gecontroleerd voordat de link wordt gemaakt:

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

Velden van het controleantwoord:

VeldTypeWat het doet
availablebooleantrue wanneer de naam gebruikt kan worden.
namestringDe gecontroleerde naam.
errorstringWaarom de naam niet beschikbaar is: taken, reserved, too_short en de andere naamfouten.
messagestringDe reden in woorden.
fieldstringAltijd name.
suggestarrayVrije alternatieven als de naam bezet is.

Meerdere links tegelijk

Het veld urls accepteert tot 50 adressen, als JSON-array of als tekst met één adres per regel. Elk adres wordt een eigen link met een eigen token, en de overige velden gelden voor alle links. Een eigen naam is in een batch niet beschikbaar.

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

Het antwoord bevat batch: true en een array results met één item per adres, in de verzonden volgorde. Een fout adres levert een item met ok: false en de foutcode op zonder de rest te stoppen.

Extra instellingen

curl -X POST http://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"
  }'

Opties die als betaald zijn gemarkeerd worden voor gasten en in het Free-plan genegeerd. Het antwoord geeft de instellingen weer die de link daadwerkelijk heeft gekregen.

VeldTypeWat het doet
urlstring, verplichtDe bestemming. Of urls: meerdere adressen, één per regel of als JSON-array (tot 50), elk krijgt een eigen link.
namestringEigen naam voor één link (gecontroleerd op de regels en het naamfilter).
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.
subbooleanVorm name.alias in plaats van alias/name. Plan Max, alleen op de extra domeinen.
expires_daysintegerLevensduur in dagen. Betaalde plannen.
max_hitsintegerBezoeklimiet. Betaalde plannen.
self_destructbooleanDe link definitief verwijderen als de bezoeklimiet of de levensduur is bereikt (vereist max_hits of expires_days).
passwordstringWachtwoord dat bezoekers moeten invoeren. Betaalde plannen.
notestringTekst op de doorstuurpagina. Betaalde plannen, lengte per plan.
note_onlybooleanDe link opent de notitie zelf, geen bestemming. Pro+ en hoger.
delayintegerSeconden op de doorstuurpagina, 0 = direct. Betaalde plannen.
no_countdownbooleanGeen aftellen op de doorstuurpagina: geen timer, geen automatisch doorsturen, de bezoeker klikt op het adres. Betaalde plannen.
adultbooleanAdult content (18+): visitors confirm their age on a page of its own before anything else is shown. Every plan.
tagsstringTags gescheiden door komma's (tot 5, elk 24 tekens). Accounttokens op betaalde plannen.
qrbooleanDe QR-code van het korte adres (base64) in het antwoord opnemen.
qr_sizeintegerZijde van de QR-afbeelding in pixels, 100–1000 (standaard 300, PNG rondt af naar hele modules).
qr_formatstringpng (standaard) of svg.
qr_logobooleanfalse = code zonder logo. Alleen betaalde plannen, anders genegeerd.

Links weergeven

GET /api/v1/links

Vereist een accounttoken.

Vereist een accounttoken. Links worden van nieuw naar oud teruggegeven.

curl "http://anonym.es/api/v1/links?page=1&per=50" \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
VeldTypeWat het doet
pageintegerPaginanummer (standaard 1).
perintegerLinks per pagina, 1–100 (standaard 50).
qstringZoeken in de korte naam, het domein en de bestemming (één platte lijst, tot 50).
tagstringAlleen links met deze tag.

Zoeken en het tagfilter kunnen worden gecombineerd:

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

Velden van het antwoord:

VeldTypeWat het doet
pageintegerHuidige pagina.
perintegerLinks per pagina.
totalintegerAantal gevonden links.
pagesintegerAantal pagina's.
linksarrayLinkobjecten, nieuwste eerst.

Een link vinden via het korte adres

Een link wordt aangesproken met zijn numerieke id (het veld id, bijvoorbeeld 4821), niet met de naam in het korte adres. Als alleen het korte adres bekend is, kan de id worden opgezocht met elk token dat die link beheert:

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

Linkgegevens en statistiek

GET /api/v1/links/{id}

Geeft de instellingen van de link, de status, het aantal bezoeken en het aantal unieke bezoekers over de hele levensduur terug:

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

Met een accounttoken voegt de parameter stats een bezoekrapport toe:

curl "http://anonym.es/api/v1/links/4821?stats=day" \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
WaardeRapportperiode
dayLaatste 30 dagen, per dag
weekLaatste 26 weken, per ISO-week
monthLaatste 24 maanden, per maand

Velden van het antwoord: stats

VeldTypeWat het doet
modestringday, week of month.
fromstringEerste dag van het rapport, JJJJ-MM-DD.
tostringLaatste dag van het rapport.
seriesarrayEén item per periode, oudste eerst: [from, to, visits, uniques].
summaryobjectcur (de huidige periode), prev (de vorige), avg (het gemiddelde van de periodes vóór de huidige), elk met hits en uniq.
dimsobjectUitsplitsing voor het bereik: ref, country, device, os, browser, hour, elk een lijst van [waarde, bezoeken].

Een link bewerken

PATCH /api/v1/links/{id}

Alleen de verzonden velden veranderen:

curl -X PATCH http://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"}'

Bewerken vereist een betaald plan. Een linktoken heeft de rechten van het Free-plan en kan geen instellingen wijzigen.

VeldTypeWat het doet
urlstringNieuwe bestemming. Pro+ en hoger.
namestringNieuwe naam (dezelfde regels als een eigen naam).
expires_daysintegerNieuwe levensduur in dagen, leeg = geen vervaldatum.
max_hitsintegerNieuwe bezoeklimiet, leeg = geen limiet.
self_destructbooleanDefinitief verwijderen als de limiet of de levensduur is bereikt, false zet het uit.
passwordstringNieuw wachtwoord, een lege string verwijdert het wachtwoord.
notestringNieuwe notitie, leeg verwijdert haar (een link met alleen een notitie blijft er een nodig hebben).
delayintegerSeconden op de doorstuurpagina, leeg = standaard van het plan.
no_countdownbooleantrue = geen aftellen op de doorstuurpagina, false zet het aftellen weer aan.
adultbooleantrue = age confirmation (18+) before the forwarding page; false removes it.
tagsstringNieuwe taglijst gescheiden door komma's, leeg verwijdert alle tags.

Een waarde wissen

curl -X PATCH http://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}'

Een link verwijderen

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

Na het verwijderen is de eigen naam weer vrij. De statistiek wordt samen met de link verwijderd.

Velden van het antwoord:

VeldTypeWat het doet
deletedintegerDe id van de verwijderde link.

QR-code

Vraag voor een HTML-img-tag de code op via het korte adres. Dit endpoint heeft geen token nodig: het korte adres zelf is de sleutel, en iedereen die het heeft kan dezelfde code maken.

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

Servercode kan de afbeelding ook per id met een token opvragen, of base64-gecodeerd in JSON ontvangen door qr=true aan de aanroep voor maken of details toe te voegen:

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

Parameters van beide afbeeldingsendpoints:

VeldTypeWat het doet
shortstring, verplichtHet korte adres, bijvoorbeeld https://anonym.es/abc12.
qr_sizeintegerZijde van de QR-afbeelding in pixels, 100–1000 (standaard 300, PNG rondt af naar hele modules).
qr_formatstringpng (standaard) of svg.
qr_logobooleanfalse = code zonder logo. Alleen betaalde plannen, anders genegeerd.

Het veld qr in JSON-antwoorden:

VeldTypeWat het doet
formatstringpng of svg.
mimestringimage/png of image/svg+xml.
sizeintegerGevraagde zijde in pixels.
logobooleanOf het logo in het midden is getekend.
base64stringDe afbeelding, base64-gecodeerd.

Accountgegevens

GET /api/v1/me

Vereist een accounttoken. Geeft het plan, de limieten en de resterende quota terug:

curl http://anonym.es/api/v1/me \
  -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
VeldTypeWat het doet
loginstringDe login van het account.
planstringPlansleutel: free, pro, pro_plus, max of enterprise.
plan_labelstringDe plannaam zoals op de site getoond.
untilstring | nullWanneer het betaalde plan eindigt, ISO 8601. null bij Free of zonder einddatum.
limitsobjectlinks (per periode), per (day of month), ai_hourly (eigen namen per uur), name_min (kortste eigen naam), note_max (notitielengte), api_units (API-budget per minuut).
leftinteger | nullLinks die in de huidige quotaperiode overblijven, null zonder limiet.
aliasesarrayDe extra domeinen die het plan mag gebruiken.
canobjectEén booleaanse waarde per optie: password, ttl, edit, edit_url, tags, note, note_only, alias, sub, instant, qr_no_logo.

Fouten

Fouten worden in één JSON-formaat teruggegeven:

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

field bevat de naam van de foutieve parameter, of null wanneer de fout geen specifiek veld betreft. Een bezette naam voegt suggest toe, een betaalde optie upgrade, quota en snelheidslimieten de header Retry-After.

HTTPBetekenis
400Fout in de verzoekparameters
401Token ontbreekt of is ongeldig
403Het plan of het tokentype staat deze aanroep niet toe
404De link bestaat niet of is van iemand anders
405Methode niet toegestaan voor dit pad
409De eigen naam is bezet
429Snelheidslimiet of quota opgebruikt, zie Retry-After
501PNG is op deze server niet beschikbaar, vraag svg op
Alle foutcodes
CodeHTTPVeldWat het doet
bad_request400Ongeldig verzoek.
bad_url400urlHet adres ontbreekt of is geen geldige http(s)-URL.
blocked400urlNaar deze bestemming kan niet worden gelinkt.
bad_name400nameDeze naam is niet toegestaan.
dirty400nameDeze naam is niet toegestaan.
brand400nameDeze naam lijkt op een merknaam en kan niet worden gebruikt.
reserved400nameDeze naam is gereserveerd.
too_short400nameDe naam is te kort voor je plan.
sub_format400nameEen subdomeinnaam bestaat uit 3 tot 32 letters, cijfers of koppeltekens.
sub_main400domainSubdomeinlinks bestaan alleen op de extra domeinen.
name_batch400nameEen eigen naam werkt voor één adres, niet voor een batch.
taken409nameDeze naam is al bezet.
note_long400noteDe notitie is langer dan je plan toestaat.
note_required400noteEen link met alleen een notitie heeft een notitie nodig.
bad_tag400tagsTags: maximaal 5, elk maximaal 24 tekens.
pro_only403Deze optie vereist een betaald plan.
max_only403Subdomeinlinks vereisen het plan Max.
account_only403Deze aanroep vereist een accounttoken.
limit429De linkquota voor deze periode is opgebruikt.
domain_limit429urlDe daglimiet voor links naar deze site zonder account is op.
ai_limit429nameTe veel eigen namen dit uur, probeer het later opnieuw.
rate_limited429Te veel verzoeken, doe het rustiger aan.
busy429Er worden te veel links tegelijk gemaakt, probeer het zo opnieuw.
auth401Token ontbreekt of is ongeldig.
not_found404Die link bestaat niet.
no_route404Dat endpoint bestaat niet.
method405Methode niet toegestaan.
fetch500De link kon niet worden gemaakt, probeer het opnieuw.
qr_unavailable501qr_formatPNG-QR-codes zijn op deze server niet beschikbaar, vraag svg op.

Snelheidslimieten

Elke aanroep kost eenheden en elk plan heeft een budget aan eenheden per minuut (zie Plannen en limieten). Een leesactie kost 1 eenheid, een lijstpagina 2, een QR-code 3, een wijziging 3, een verwijdering 2, een aanmaak 5 plus 1 per adres. Elk antwoord draagt deze headers:

HeaderWaarde
X-RateLimit-LimitBudget aan eenheden per minuut
X-RateLimit-RemainingResterende eenheden in de huidige minuut
X-RateLimit-ResetSeconden tot het budget wordt vernieuwd
Retry-AfterBij 429: seconden wachten voor een nieuwe poging

Binnen elk venster van 10 seconden kan hoogstens een kwart van het minuutbudget worden besteed, met een minimum van 20 eenheden. Wanneer het budget op is, antwoordt de API met status 429.

Plannen en limieten

De exacte limieten van elk plan. Links tellen per dag en IP-adres in Free en per maand en account in betaalde plannen. De laatste kolom noemt de instellingen die een plan kan gebruiken.

PlanLinksEigen namen per uurKortste naamNotitielengteEenheden per minuutInstellingen
Free 5 per dag per IP-adres 5 5 0 60 geen
Pro 500 per maand 10 3 300 150 password, expires_days, max_hits, edit, tags, note, domain, delay, qr_logo
Pro+ 2,000 per maand 50 3 2,000 400 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, delay, qr_logo
Max 50,000 per maand 200 3 5,000 1,000 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo
Enterprise onbeperkt onbeperkt 3 5,000 2,500 password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo

Zonder accounttoken telt het maken mee voor de Free-quota van het IP-adres: 5 links per dag. Links naar een domein dat minder dan een jaar geleden is geregistreerd, delen een gastlimiet van 5 per dag, wie ze ook maakt. Per aanroeper kunnen hoogstens 2 links tegelijk in aanmaak zijn.

OpenAPI-specificatie

De volledige technische beschrijving als OpenAPI 3.1-document: http://anonym.es/api/v1/openapi.json

Het bevat schema's en voorbeelden van alle verzoeken en antwoorden, de planlimieten, de naamregels en de foutcodes. Het is geschikt voor Swagger UI, Postman, Insomnia en clientgeneratoren.