API リファレンス

ファイルアップロードポリシー

GET/v1/media/upload-policy
POST/v1/media/upload-policy

画像、動画、音声、一般ファイルをファイルストレージにアップロードし、返された公開 URL をモデルのリクエストに渡します。ゲートウェイは短期間有効なユーザー単位のアップロードポリシーを作成するだけで、ファイルのデータは API サーバーを経由しません。

GET /v1/media/upload-policy
{
  "image_max_bytes": 52428800,
  "video_max_bytes": 209715200,
  "audio_max_bytes": 104857600,
  "file_max_bytes": 52428800
}

#アップロードポリシーを作成

  • kindstring必須

    "image"、"video"、"audio"、または "file"。

  • content_typestring必須

    kind に一致する具体的な MIME タイプ。file には application/pdf や text/plain など、画像・動画・音声以外の MIME タイプを指定できます。

  • sizeinteger必須

    ファイルの正確なサイズ(バイト)。同じ API キーでこのエンドポイントに GET すると、ユーザーごとの 4 つの上限をすべて取得できます。

curl https://www.aisplice.store/v1/media/upload-policy \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "image",
    "content_type": "image/avif",
    "size": 1048576
  }'
policy.json
{
  "upload_url": "https://uploads.example.com/",
  "public_url": "https://media.example.com/media/user-upload/image/...",
  "fields": {
    "key": "media/user-upload/image/...",
    "policy": "...",
    "...": "Pass every returned field unchanged"
  },
  "expires_at": "2026-07-25T10:05:00Z"
}

#ファイルストレージにアップロード

返された fields のエントリをすべて、ファイルと一緒に 1 回の multipart POST で upload_url に送信します。ポリシーは 5 分で失効し、生成された 1 つのファイルパスにひも付けられ、既存のファイルを上書きすることはできません。

# Save the policy response as policy.json first.
upload_args=()
while IFS=$'\t' read -r key value; do
  upload_args+=(-F "$key=$value")
done < <(jq -r '.fields | to_entries[] | [.key, .value] | @tsv' policy.json)

# Keep the file field last for storage compatibility.
curl "$(jq -r .upload_url policy.json)" \
  "${upload_args[@]}" \
  -F "file=@reference.avif"

#公開 URL を使用

ファイルストレージが成功を返したら、選択したモデルが対応するメディアフィールドに public_url を指定します。アップロードが受け付けられても、すべてのモデルがすべてのメディア形式をデコードできるとは限りません。モデルのリクエスト仕様を確認してください。

image-task.json
{
  "model": "gpt-image-2",
  "prompt": "Turn this reference into a watercolor",
  "images": ["https://media.example.com/media/user-upload/image/..."]
}

#関連するエラー

このエンドポイントは error.code ではなく error.type で失敗を報告するため、ステータスとあわせて以下の値で判定してください。

  • 400 invalid_request_errorkind、content_type、size は 1 つのアップロードファイルを表している必要があります。
  • 401 unauthorizedBearer トークンが無効か、ありません。
  • 413 payload_too_large申告されたファイルサイズが、設定されたアップロード上限を超えています。
  • 415 unsupported_media_typecontent_type が、選択した画像、動画、音声、一般ファイルの分類と一致しません。

エラーコード一覧 →

まだ解決しませんか?

リクエスト ID かエラーメッセージを送っていただければ、こちらで調査します。