ファイルを https://up.anon.cat/upload へPOSTしてください。既定ではjsonで返ります。
json以外の形式が欲しいときは、どの形式かを指定するパラメータを付けます。たとえば https://up.anon.cat/upload?output=csv。
使える応答形式は json、csv、text、html、gyazo です。
1リクエストにつき1ファイル、1 GBまで。
curl -i -F files[]=@yourfile.jpeg https://up.anon.cat/upload
multipartフォームではなく、リクエストのボディにファイルをそのまま載せ、名前をクエリで渡すこともできます。大きなファイルにはこちらが向いています。サイズが最初から分かり、multipartの包みがなく、このサイト自身もそうしているからです。
curl -i -T yourfile.iso "https://up.anon.cat/upload?filename=yourfile.iso"
どちらの方法もファイルをそのままCDNへ流すので、サーバーのディスク容量に縛られることはありません。
scrub=1 を付けると、CDNへ向かう途中でファイルのメタデータが取り除かれます。JPEGならExifと位置情報、PNGならテキストとeXIfのチャンク、WebPならExifとXMPです。画素そのものには手を触れず、この三つ以外の形式は送られたそのまま保存されます。
curl -i -T photo.jpg "https://up.anon.cat/upload?filename=photo.jpg&scrub=1"
サイト側は毎回これを送ります。分割アップロードでは、各チャンクではなく /upload/finish の呼び出しに付けます。
Anon.Notes には独自の API があります。上のアップロード用エンドポイントとは別物で、書き込む先はひとつのノートであって、公開ファイルホストではありません。キーはノートの設定ページで作り、ほかのどのノートにも一切手を出せません。
何のためにあるかというと、受信箱としてのノートです。デプロイスクリプト、CI ジョブ、cron、ボットが行を押し込み、それをあとからスマートフォンで読む。登録するものもポーリングするものもなく、ノートそのものが郵便受けになります。
ベースアドレスは https://anon.cat/api/notes/ です。すべて JSON で話し、認証はどこも同じ方法です。
ノートを開いて設定に進み、「開発者 API」からキーを作ります。表示は一度きりです。その場でコピーしてください。あとからこちら側がキーを読み返してあげることはできません。
キーには範囲があります。append は追記だけで読み取りはできず、read は読み取りだけで書き込みはできず、rw は両方に加えて通知の管理もできます。機械には仕事が回る一番狭い範囲を渡してください。
bearer トークンとして送ってください。クエリ文字列では決して受け付けません。クエリ文字列はアクセスログに書き出されるからです。
curl -H "Authorization: Bearer $ANON_KEY" https://anon.cat/api/notes/ping
キーの失効は同じパネルのクリックひとつで、すぐに効き、ノートにもほかのキーにも影響しません。ここにパスワードは一切登場せず、キーがパスワードを読むことも、変えることも、ノートを削除することもできません。
/api/notes/append に POST し、本文は text フィールドか、リクエストボディそのものとして渡します。どちらも同じ動作です:
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
ログ型のノートにはエントリがひとつ増えます。ページ型のノートは伸びます。本文は文書の末尾に足され、上書きは決してしません。古い写しを持ったスクリプトが、その間にあなたが書いたものを消してしまわないためです。
応答は 201 で、ノートの状態が入っています。notify=false を付けるとその呼び出しだけ通知を飛ばしません。古い行をまとめて流し込むループに必要なのはこれです。
read か rw のキーがあれば、/api/notes/entries がエントリを復号して古い順に返します。limit と offset でページ送りし、order=desc は新しいほうから始めます。定期的に見にくるプログラムが欲しいのはこちらです。
curl -H "Authorization: Bearer $ANON_KEY" "https://anon.cat/api/notes/entries?limit=10&order=desc"
/api/notes/note は中身なしでノートを返します。エントリ数、最後に書き込まれた時刻、放置による削除までの残り日数です。API 経由のアクセスもこの時計を戻すので、ボットが毎日書き込むノートは期限切れになりません。
ノートは、キーが書き込んだときに Discord か Telegram で知らせることができます。自分で書いたときは何も送られません。知りたいのは機械の動きであって、自分の動きではないからです。
設定から、または rw キーを使って API から追加します。追加した瞬間にテストが飛ぶので、コピーを間違えた Webhook URL はその場で見えるステータスコードになります。
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
既定では通知にノートの本文は一切入りません。何かが届いたこと、その量、どのキーが送ったこと、そしてここへのリンクだけで、ノートは変わらずパスワードの向こう側にあります。preview=true を渡すとエントリ本体も一緒に送られますが、それは自分の文章を Discord や Telegram に預けるということです。本物の取引なので、頼まないかぎり切ってあります。
受け付けるのは Discord の Webhook アドレスと Telegram のボットだけです。任意の URL を用意しないのは意図的で、取りに行くのはこのサーバーになるからです。