AnonShot

API REST v1

AnonShot の画像をアプリに組み込む

サーバーから画像をアップロードしてコードを受け取り、LLM・画像タグ・任意の HTTP クライアントで直リンクを使えます。すべてのファイルは向きを補正し、EXIF メタデータを削除したうえで WebP で配信されます。

30 秒でわかる仕組み

  1. アカウント設定でトークンを作成します。
  2. そのトークンを付けて POST /api/v1/photos にファイルを送ります。
  3. shortUrl、またはもっと手軽にレスポンス内の完成済み URL を保存します。
  4. 画像が公開なら publicImageUrl を LLM に渡し、非公開にしておくならトークン付きで fileUrl をダウンロードします。

1. トークンの作成と保護

トークン全体は一度しか表示されません。バックエンドの環境変数に保存し、Git、URL、ブラウザに送る JavaScript、配布するモバイルアプリには絶対に含めないでください。

ANONSHOT_TOKEN=anon_live_…
Authorization: Bearer $ANONSHOT_TOKEN
  • photos:write はアップロード・変更・削除を許可します。
  • photos:read は一覧・詳細・認証付きダウンロードを許可します。
  • デフォルトの上限は 1 分あたり 60 リクエスト、1 か月あたり 10,000 リクエストです。
  • トークンは無効化でき、有効期限を設定することもできます。

2. 写真をアップロードする

multipart/form-data のフォームを送信します。files フィールドは複数指定でき、JPEG・PNG・WebP・GIF に対応、1 ファイル 50MB・1 リクエスト 20 ファイルまでです。

curl の例

curl -X POST https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  -F "files=@photo.jpg"

オプション:ページを保護するには -F "password=別のシークレット"、1 回限りの画像にするには -F "burnAfterRead=true" を追加します。外部サービスが公開 URL を自由に読む必要がある場合は使わないでください。

サーバー側 JavaScript の例

import { readFile } from "node:fs/promises"

const bytes = await readFile("photo.jpg")
const form = new FormData()
form.append("files", new Blob([bytes], { type: "image/jpeg" }), "photo.jpg")

const response = await fetch("https://anonshot.com/api/v1/photos", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}`,
  },
  body: form,
})

const payload = await response.json()
if (!response.ok) throw new Error(payload.error?.message ?? "アップロードに失敗しました")

const photo = payload.data[0]
console.log(photo.shortUrl, photo.publicImageUrl)

Content-Type ヘッダーは自分で設定しないでください。FormData が正しい multipart の boundary を自動で付けます。

3. レスポンスと 3 つの URL

{
  "data": [{
    "id": "…",
    "shortUrl": "Ab3dE7xK",
    "shareUrl": "https://anonshot.com/p/Ab3dE7xK",
    "publicImageUrl": "https://anonshot.com/p/Ab3dE7xK/image",
    "fileUrl": "https://anonshot.com/api/v1/photos/Ab3dE7xK/file",
    "mime": "image/webp",
    "size": 183421,
    "width": 2048,
    "height": 1365,
    "burnAfterRead": false,
    "passwordProtected": false
  }]
}
値用途アクセス
shareUrlインターフェース付きの AnonShot ページを開く公開
publicImageUrlLLM、<img>、直接ダウンロード公開・HTML なし
fileUrl同じ画像を公開せずにダウンロードBearer + photos:read

直リンクは常に /p/{code}/image です。HTML ページではなく、処理済みサイズの WebP 画像データを返します。アカウントのトークンで作成した写真は、削除するか 1 回限りの共有として開かれない限り期限切れになりません。パスワード保護された写真は、ロック解除用 Cookie を持たない LLM には使えません。

4. 画像を LLM に渡す

プロバイダーが画像 URL を受け付けるなら photo.publicImageUrl をそのまま渡します。画像を公開したくない場合は、サーバー側で fileUrl からバイトを取得し、プロバイダーの API に従って送信します。

const imageResponse = await fetch(photo.fileUrl, {
  headers: { Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}` },
})

if (!imageResponse.ok) throw new Error("画像を取得できません")
const imageBytes = await imageResponse.arrayBuffer()
// その後 imageBytes を LLM の SDK に渡します。

AnonShot のトークンは LLM に渡さず、クエリパラメーターにも付けないでください。トークンはバックエンドと anonshot.com の間でのみ使います。

5. 取得・一覧・削除

# 写真の一覧を取得
curl https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# 写真の詳細を取得
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# クリーンな WebP をダウンロード
curl https://anonshot.com/api/v1/photos/Ab3dE7xK/file \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  --output Ab3dE7xK.webp

# 共有を完全に削除
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

EXIF メタデータだけを削除する

このルートは画像を受け取り、共有リンクを作らずにクリーンな WebP を直接返します。

curl -X POST https://anonshot.com/api/v1/exif/clean \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  -F "files=@photo.jpg" \
  --output photo-no-metadata.webp

X-AnonShot-Photo-Id ヘッダーに処理の ID が入ります。このルートでは JPEG・PNG・WebP に対応しています。

すべてのルート

ルート機能
GET /api/v1API の概要(認証不要)
GET · POST /api/v1/photos写真の一覧、または最大 20 枚のアップロード
GET · PATCH · DELETE /api/v1/photos/{code}共有の取得・変更・削除
GET /api/v1/photos/{code}/fileトークン付きでクリーンな WebP を取得
GET /p/{code}/image公開画像を HTML ページなしで直接表示
POST /api/v1/exif/clean画像をクリーンにして WebP を取得
POST /api/v1/uploads/presignストレージへの直接アップロードを準備
GET · POST /api/v1/albumsアルバムの一覧・作成
GET · PATCH · DELETE /api/v1/albums/{code}アルバムの取得・変更・削除
POST · DELETE /api/v1/albums/{code}/photos写真の追加・削除

レスポンス・エラー・利用上限

成功時の JSON は {"data": …}、エラーは {"error":{"code":"…","message":"…"}} の形式です。特に 400(リクエストまたは画像)、401(トークン)、403(scope)、429(上限)を処理してください。X-RateLimit-Remaining と X-Monthly-Remaining ヘッダーで残りの上限がわかります。

API トークンを作成・無効化
画像ホスティング&EXIF 削除 API — AnonShot