Anon.Cat API

エンドポイント

ファイルを 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の例

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 の呼び出しに付けます。

ノートAPI

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 がエントリを復号して古い順に返します。limitoffset でページ送りし、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 を用意しないのは意図的で、取りに行くのはこのサーバーになるからです。