ドキュメント

何がどこで動くか、そして次に来るもの。

swapfile.ioの仕組み

コンバーターとメタデータクリーナーは、File APIとcanvasを使ってすべてブラウザ内で動作します。ファイルはお使いの端末のメモリに読み込まれ、そこで処理され、そこからダウンロードされます。ブラウザがデコードできない形式(Safari以外でのHEICなど)については、サーバー側のパイプラインを提供予定です。それらのジョブは1時間以内にストレージから削除されます。

データの流れ

ローカルツールファイル → ブラウザ → ダウンロードフォルダ
サーバーツール(近日)ファイル → 署名付きアップロード → ワーカー → ダウンロードリンク → 1時間以内に自動削除

API

REST APIで自分のコードからファイルを変換できます。サイトと同じサーバーパイプラインで動作します:アップロードを登録し、バイトを送信し、変換ジョブを開始し、結果をダウンロードする — すべてAPIキーで認証されます。

アカウントでAPIキーを作成

認証

すべてのリクエストはAuthorizationヘッダー(Bearer)またはX-API-Keyヘッダーでキーを送ります。パスワードのように扱ってください — アカウントの変換クォータを消費します。

https://api.swapfile.ioLive
curl https://api.swapfile.io/v1/jobs/{id} \
    -H "Authorization: Bearer sf_live_..."

ファイルの変換

heic → jpeg
# 1 · register the upload → presigned URL
curl -X POST https://api.swapfile.io/v1/uploads \
    -H "Authorization: Bearer sf_live_..." \
    -H "Content-Type: application/json" \
    -d '{"size": 48213}'
{"file_id":"9f2c…","upload_url":"https://…"}

# 2 · send the raw bytes to that URL
curl -X PUT --upload-file photo.heic "$UPLOAD_URL"

# 3 · start the conversion
curl -X POST https://api.swapfile.io/v1/jobs \
    -H "Authorization: Bearer sf_live_..." \
    -H "Content-Type: application/json" \
    -d '{"file_id":"9f2c…","operation":"convert:jpeg","params":{"quality":"82"}}'
→ 202 {"id":"7ab1…","status":"queued"}

# 4 · poll until done, then download
curl https://api.swapfile.io/v1/jobs/7ab1… \
    -H "Authorization: Bearer sf_live_..."
{"status":"done","download_url":"https://…"}

エンドポイント

POST/v1/uploadsRegister an upload; returns a presigned PUT URL.
PUT{upload_url}Send the raw file bytes (max 100 MB).
POST/v1/jobsStart a conversion job for an uploaded file.
GET/v1/jobs/{id}Job status; includes download_url once done.
DELETE/v1/jobs/{id}Delete the file and job immediately.

操作

これらのいずれかをoperationとして渡します。受け付ける入力にはJPEG・PNG・WebP・GIF・BMP・HEIC・AVIF・TIFFが含まれます。

convert:jpeg→ JPEG · params: quality (1–100)
convert:png→ PNG (lossless)
convert:webp→ WebP · params: quality (1–100)

制限

  • 100 MB max upload
  • 30 conversions / day (free)
  • 60 requests / minute per key
  • Files auto-deleted within 1 hour

エラー

失敗時は安定したcodeフィールドを含むRFC 9457のproblem+jsonを返します — 例:unauthorized、unsupported_format、file_too_large、quota_exceeded、rate_limited。

自分で確認する

ブラウザの開発者ツールを開き、ネットワークタブを見ながらファイルを変換してください。ファイルを運ぶリクエストは見当たらないはずです。