Anon.Cat API

端點

把檔案 POST 到 https://up.anon.cat/upload,預設會回 json。

如果想要 json 以外的格式,加個參數指定要哪一種,例如 https://up.anon.cat/upload?output=csv。

可用的回應格式有:json、csv、text、html 和 gyazo。

每次請求一個檔案,最大 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 與 GPS、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 工作、排程或機器人往裡推入一行行內容,你稍後在手機上讀。沒有要註冊的東西,也沒有要輪詢的東西:筆記本身就是信箱。

基礎位址是 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 位址會立刻變成你看得見的狀態碼。

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 是刻意不提供的:去存取它的會是這台伺服器。