API do Anon.Cat

Endereço

Faz POST do ficheiro para https://up.anon.cat/upload; por omissão recebes uma resposta em json.

Se quiseres outro formato que não json, acrescenta um parâmetro a dizer qual, por exemplo https://up.anon.cat/upload?output=csv.

Os tipos de resposta válidos são: json, csv, text, html e gyazo.

Um ficheiro por pedido, até 1 GB.

Exemplo com curl

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

Carregamento no corpo do pedido

Também podes mandar o ficheiro diretamente no corpo do pedido em vez de um formulário multipart, passando o nome na query. Para ficheiros grandes é a melhor opção: o tamanho é conhecido logo à partida, não há envelope multipart, e é o que o próprio site usa.

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

As duas formas passam o ficheiro diretamente para a CDN, por isso nenhuma delas fica limitada pelo espaço em disco do servidor.

Remover metadados

Com scrub=1 o ficheiro perde os seus metadados a caminho da CDN: Exif e GPS de um JPEG, blocos de texto e eXIf de um PNG, Exif e XMP de um WebP. Os píxeis não são tocados, e tudo o que não seja um destes três formatos é guardado exatamente como foi enviado.

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

O site envia-o em cada carregamento. Num carregamento retomável o parâmetro vai na chamada /upload/finish, não em cada bloco.

API de notas

O Anon.Notes tem a sua própria API, e é coisa diferente do endpoint de envio acima: escreve dentro de uma única nota, não no alojamento público de ficheiros. A chave cria-se dentro da nota, na página de definições dela, e não pode fazer nada a nenhuma outra nota.

Para que serve: uma nota como recetor. Um script de deploy, um trabalho de CI, um cron ou um bot empurra linhas para lá, e tu lês mais tarde no telemóvel. Nada para registar e nada para andar a sondar: a nota é a caixa de correio.

O endereço base é https://anon.cat/api/notes/. Tudo fala JSON e tudo se autentica da mesma maneira.

Chaves

Abre a nota, vai a Definições e cria uma chave em API para programadores. É mostrada uma única vez - copia-a nesse momento, porque deste lado nada consegue voltar a lê-la para ti.

Cada chave tem um âmbito: append pode acrescentar entradas e não ler nada, read pode ler e não escrever nada, e rw pode as duas coisas e gere as notificações. Dá a cada máquina o âmbito mais estreito que faça o trabalho dela.

Envia-a como token bearer. Na query string nunca é aceite, porque a query string acaba no registo de acessos.

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

Revogar uma chave é um clique no mesmo painel, tem efeito imediato e não mexe na nota nem em nenhuma outra chave. A tua palavra-passe não entra aqui em lado nenhum, e uma chave não a consegue ler, alterar, nem apagar a nota.

Enviar uma entrada

POST para /api/notes/append, com o texto num campo text ou como corpo inteiro do pedido. As duas formas fazem o mesmo:

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

Uma nota em registo ganha mais uma entrada. Uma nota em página cresce: o texto é acrescentado ao fim do documento, nunca por cima, para que um script com uma cópia velha não apague aquilo que escreveste entretanto.

A resposta é um 201 com o estado da nota. Junta notify=false para saltar as notificações numa chamada - é o que quer um ciclo que está a repor linhas antigas.

Ler uma nota

Com uma chave read ou rw, /api/notes/entries devolve as entradas decifradas, da mais antiga para a mais recente. limit e offset paginam, e order=desc começa pela mais nova, que é o que serve a um programa que anda a sondar.

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

/api/notes/note devolve a nota sem o conteúdo: quantas entradas tem, quando foi escrita pela última vez, e quanto lhe falta antes de a limpeza por inatividade a levar. Cada acesso pela API também põe esse relógio a zero, por isso uma nota onde um bot escreve todos os dias nunca expira.

Notificações

Uma nota pode avisar-te quando uma chave escreve nela, por Discord ou por Telegram. Escreveres tu próprio nunca envia nada - a ideia é saberes da máquina, não de ti.

Configura uma nas Definições, ou pela API com uma chave rw. É disparado um teste no momento em que a crias, para que uma URL de webhook mal copiada seja um código de estado que vês logo.

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

Por omissão uma notificação não leva nenhum texto da nota: diz que chegou alguma coisa, quanta, que chave a enviou, e liga de volta para aqui - e a nota continua atrás da palavra-passe dela. Passa preview=true e vai também a própria entrada, o que significa entregar o teu texto ao Discord ou ao Telegram. É uma troca a sério, e é por isso que está desligado a não ser que peças.

Só são aceites endereços de webhook do Discord e bots do Telegram. Uma URL qualquer não é oferecida de propósito: seria este servidor a ir buscá-la.