Anon.Cat API

Adres

Doe een POST met het bestand naar https://up.anon.cat/upload; standaard krijg je een json-antwoord.

Wil je iets anders dan json, zet er dan een parameter achter die aangeeft welk formaat je wilt, bijvoorbeeld https://up.anon.cat/upload?output=csv.

Geldige antwoordtypes zijn: json, csv, text, html en gyazo.

Eén bestand per verzoek, tot 1 GB.

curl-voorbeeld

curl -i -F files[]=@yourfile.jpeg https://up.anon.cat/upload

Uploaden in de body

Je kunt het bestand ook rechtstreeks in de body van het verzoek sturen in plaats van als multipart-formulier, met de naam in de query. Voor grote bestanden is dat de betere route: de lengte staat meteen vast, er is geen multipart-envelop omheen, en de site zelf doet het ook zo.

curl -i -T yourfile.iso "https://up.anon.cat/upload?filename=yourfile.iso"

Beide routes streamen direct door naar het CDN, dus geen van beide wordt begrensd door de schijfruimte op de server.

Metadata verwijderen

Met scrub=1 wordt het bestand onderweg naar de CDN van zijn metadata ontdaan: Exif en GPS uit een JPEG, tekst- en eXIf-blokken uit een PNG, Exif en XMP uit een WebP. De pixels blijven onaangeroerd, en alles wat niet een van die drie formaten is wordt precies zo opgeslagen als het verzonden werd.

curl -i -T photo.jpg "https://up.anon.cat/upload?filename=photo.jpg&scrub=1"

De website stuurt het bij elke upload mee. Bij een hervatbare upload hoort de parameter bij de aanroep /upload/finish, niet bij elk blok.

Notities-API

Anon.Notes heeft een eigen API, en die is iets anders dan het upload-adres hierboven: hij schrijft in één notitie, niet in de openbare bestandsopslag. Een sleutel maak je binnen een notitie, op haar instellingenpagina, en hij kan niets met welke andere notitie dan ook.

Waar het voor is: een notitie als ontvanger. Een deploy-script, een CI-taak, een cronjob of een bot duwt er regels in, en jij leest ze later op je telefoon. Niets om je voor aan te melden en niets om te pollen: de notitie is de brievenbus.

Het basisadres is https://anon.cat/api/notes/. Alles spreekt JSON en alles wordt op dezelfde manier geauthenticeerd.

Sleutels

Open je notitie, ga naar Instellingen en maak onder Ontwikkelaars-API een sleutel aan. Hij wordt één keer getoond - kopieer hem dan, want deze kant kan hem daarna niet meer voor je teruglezen.

Een sleutel heeft een bereik: append mag regels toevoegen en niets lezen, read mag lezen en niets schrijven, en rw mag allebei en beheert meldingen. Geef een machine het smalste bereik waarmee ze haar werk doet.

Stuur hem als bearer-token mee. In de querystring wordt hij nooit geaccepteerd, want de querystring komt in het toegangslogboek terecht.

curl -H "Authorization: Bearer $ANON_KEY" https://anon.cat/api/notes/ping

Een sleutel intrekken is één klik in hetzelfde paneel, werkt meteen, en raakt de notitie of een andere sleutel niet. Je wachtwoord komt hier nergens aan te pas, en een sleutel kan het niet lezen, niet wijzigen en de notitie niet verwijderen.

Een regel toevoegen

POST naar /api/notes/append met de tekst in een veld text, of als de hele body van het verzoek. Deze twee doen hetzelfde:

curl -H "Authorization: Bearer $ANON_KEY" -d "text=deploy 1.9.9 finished" https://anon.cat/api/notes/append

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"text":"deploy 1.9.9 finished"}' https://anon.cat/api/notes/append

tail -n 20 build.log | curl -H "Authorization: Bearer $ANON_KEY" --data-binary @- https://anon.cat/api/notes/append

Een logboek-notitie krijgt er één regel bij. Een pagina-notitie groeit: de tekst wordt achteraan het document gezet, nooit eroverheen, zodat een script met een verouderde kopie niet kan wissen wat jij er ondertussen in typte.

Het antwoord is 201, met de staat van de notitie erin. Zet notify=false erbij om de meldingen voor één aanroep over te slaan - wat een script wil dat oude regels opnieuw doorloopt.

Een notitie lezen

Met een read- of rw-sleutel geeft /api/notes/entries de regels ontsleuteld terug, oudste eerst. Met limit en offset blader je erdoorheen, en order=desc begint bij de nieuwste, wat is wat een poller wil.

curl -H "Authorization: Bearer $ANON_KEY" "https://anon.cat/api/notes/entries?limit=10&order=desc"

/api/notes/note geeft de notitie zonder inhoud terug: hoeveel regels ze heeft, wanneer er voor het laatst in geschreven werd, en hoe lang ze nog heeft voordat de opruiming haar zou weghalen. Elke keer dat de API haar aanraakt gaat die klok ook weer op nul, dus een notitie waar dagelijks een bot in schrijft verloopt nooit.

Meldingen

Een notitie kan je laten weten wanneer een sleutel erin schrijft, via Discord of Telegram. Zelf schrijven stuurt nooit een melding - het gaat erom dat je van de machine hoort, niet van jezelf.

Stel er een in bij Instellingen, of via de API met een rw-sleutel. Er wordt meteen een test verstuurd, zodat een verkeerd gekopieerde webhook-URL een statuscode is die je direct ziet.

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"discord","url":"https://discord.com/api/webhooks/…","label":"deploys"}' https://anon.cat/api/notes/hooks

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"telegram","bot":"123456789:AA…","chat":"-1001234567890"}' https://anon.cat/api/notes/hooks

Standaard bevat een melding geen tekst uit de notitie: ze zegt dat er iets binnenkwam, hoeveel, welke sleutel het stuurde, en linkt terug hierheen - en de notitie zit nog steeds achter haar wachtwoord. Geef preview=true mee en de regel zelf gaat mee, wat betekent dat je je tekst aan Discord of Telegram geeft. Dat is een echte afweging en daarom staat het uit tenzij je erom vraagt.

Alleen Discord-webhook-adressen en Telegram-bots worden geaccepteerd. Een willekeurige URL wordt met opzet niet aangeboden: deze server zou degene zijn die hem ophaalt.