ファイルのアップロードと参照
一度アップロードしたファイルを InOneAPI の file_id で参照できます。ゲートウェイは所有権を確認し、選択した上流のプロトコルに応じて非公開 COS の署名付き URL またはファイル内容に変換した後、マッピング DSL を適用します。プロバイダーの対応能力は事前判定せず、未対応の入力に対するエラーは上流が返します。
API とアクセス権
Authorization: Bearer $INONEAPI_API_KEY を指定します。ファイルはアップロードした API キーに限定されます。同じユーザーやプロジェクトの別キーからも取得・参照・削除できません。上流のファイル ID や Playground の添付 ID とは別物です。
| API | 動作 |
|---|---|
| POST /v1/files | multipart で単一ファイルをアップロード |
| GET /v1/files | 新しい順。limit は 1–100、after は前ページの last_id |
| GET /v1/files/{file_id} | メタデータを取得。内容や署名 URL は返しません |
| DELETE /v1/files/{file_id} | オブジェクトとメタデータを削除 |
ファイル操作にモデル推論料金やウォレット残高は不要です。キーのレート・同時実行制限とプロジェクトの状態は適用されます。ファインチューニング、Batch、ベクトル検索、上流 Files API の透過転送は提供しません。
アップロード
必須フォーム項目はファイル本体の file と、固定値 user_data の purpose です。multipart boundary は HTTP クライアントに設定させてください。
curl https://api.inoneapi.com/v1/files \
-H "Authorization: Bearer $INONEAPI_API_KEY" \
-F purpose=user_data \
-F file=@./sample.mp4
{
"id": "file_ioa_0123456789abcdef0123456789abcdef",
"object": "file",
"filename": "sample.mp4",
"mime_type": "video/mp4",
"media_type": "video",
"bytes": 1048576,
"status": "ready",
"created_at": 1789430400,
"purpose": "user_data"
}
画像・音声・文書は各 10 MiB、動画は 32 MiB までです。キーごとの直近 24 時間に作成したファイル記録の合計は 1 GiB・1000 件で、未完了のアップロードも含みます。MIME とメディア種別は内容から検出します。対応形式は PNG/JPEG/WebP/GIF、MP4/WebM/MOV、MP3/WAV/OGG/AAC/FLAC/M4A、PDF、プレーンテキスト、CSV、JSON。コンテナやテキストの細分類は返却メタデータを確認してください。変換エンコード、OCR、文書解析、サムネイル生成は行いません。
モデルリクエストは最大 32 回のファイル参照、参照ごとの元サイズ合計 64 MiB までです。同じファイルの繰り返しも加算します。展開後の JSON はゲートウェイのリクエストサイズ制限にも従います。アップロード成功は上流の対応を保証しません。
Chat Completions
同じメッセージ内にテキストとファイルを並べます。
{
"model": "YOUR_MODEL_ID",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "この動画を説明してください"},
{"type": "file", "file": {"file_id": "file_ioa_0123456789abcdef0123456789abcdef"}}
]
}]
}
| 種別 | 展開後の Chat コンテンツ |
|---|---|
| 画像 | {"type":"image_url","image_url":{"url":"COS signed URL"}} |
| 動画 | {"type":"video_url","video_url":{"url":"COS signed URL"}} |
| 音声 | {"type":"input_audio","input_audio":{"data":"Base64","format":"mp3"}} |
| 文書 | {"type":"file","file":{"filename":"sample.pdf","file_data":"data:application/pdf;base64,..."}} |
すべての素材を type: file で参照する動作と video_url は InOneAPI の拡張であり、OpenAI 標準の動画プロトコルではありません。既存のテキストと URL、その順序は維持されます。
Responses と Messages
Responses の input[].content に {"type":"input_file","file_id":"..."} を指定します。文書は input_file.file_url、画像は input_image.image_url に展開します。明示的な {"type":"input_image","file_id":"..."} は画像専用です。
input_file による動画・音声参照は拡張です。動画は {"type":"input_video","video_url":"COS signed URL"}、音声は上表の input_audio になります。
Messages の messages[].content には {"type":"document","source":{"type":"file","file_id":"..."}} を指定します。ブロック種別は実ファイルの document、image、audio、video に一致する必要があります。PDF と画像は URL source、プレーンテキスト・CSV・JSON は type: text、media_type: text/plain、テキストの data を持つ source に変換します。音声・動画は URL source を使う InOneAPI 拡張です。/v1/messages/count_tokens も同じルールです。
Responses または Messages が Chat 上流にルーティングされる場合、ファイルは直接 Chat 形式に展開してから外側のリクエストを変換します。プラットフォームの ID を上流のファイル ID として転送しません。
動画・画像・音声生成
メディアの source.type は file の別名として file_id も受け付けます。どちらも InOneAPI のファイル ID 専用です。
POST /v1/videos、POST /v1/images/generations、POST /v1/audio/speech の素材参照例です。
{
"input_references": [{
"type": "image",
"role": "first_frame",
"source": {"type": "file", "file_id": "file_ioa_0123456789abcdef0123456789abcdef"}
}]
}
元のリクエストに追加してください。model、prompt、音声の input と voice など既存の必須項目は引き続き必要です。参照種別は実ファイルの image/audio/video に一致させます。source のみ {"type":"url","url":"COS signed URL"} に置き換え、role を保持して DSL に渡します。Images と Speech の input_references は InOneAPI 拡張で、OpenAI の標準パラメータではありません。画像編集・音声文字起こし・音声翻訳 API は追加されません。
一覧・削除・保存期間
一覧は object: list、data、has_more、first_id、last_id を返します。次ページの after に last_id を指定します。カーソルは同じキーに属する必要があります。
curl https://api.inoneapi.com/v1/files \
-H "Authorization: Bearer $INONEAPI_API_KEY"
curl -X DELETE https://api.inoneapi.com/v1/files/file_ioa_0123456789abcdef0123456789abcdef \
-H "Authorization: Bearer $INONEAPI_API_KEY"
削除成功時は {"id":"file_ioa_...","object":"file","deleted":true} を返します。公開 API ファイルは COS ライフサイクルで 1 日保存します。アプリは独自の expires_at を設定・返却せず、定期削除処理も実行しません。COS の削除は非同期で、アップロードから正確に 24 時間後とは限りません。署名 URL は 5 分間有効で、上流への試行ごとに再発行します。URL の認可期限は保存期間とは別です。非同期プロバイダーは URL とオブジェクトが利用可能な間に取得してください。
内容は非公開 COS、DB はオブジェクト key とメタデータのみを保存します。ファイルアップロードは推論のゼロデータモード対象外です。COS の 1 日ライフサイクル規則は api-files/ のみに設定し、playground/ には適用しないでください。Playground 添付にはライフサイクル期限を設けません。キー削除後は ID が無効になり、残ったオブジェクトは COS が回収します。COS の削除は DB メタデータと連動しません。ready はアップロード完了を示し、現在のファイル存在を保証しません。削除後は再アップロードしてください。古いメタデータは直近 24 時間の制限に加算せず、DELETE で削除できます。
中断したアップロードは uploading のまま残る場合があります。一覧から ID を確認し、作成から 5 分経過後に削除できます。参照可能なのは ready のみです。削除しても、上流へ送信済みの内容は撤回できません。
エラー
| HTTP | code | 意味 |
|---|---|---|
| 400 | INVALID_FILE_REQUEST | 不正なフォーム・参照、種別不一致、ID と内容/URL の併記 |
| 400 | UNSUPPORTED_FILE_TYPE | 検出不能または未対応のアップロード形式 |
| 404 | FILE_NOT_FOUND | メタデータが存在しない、または別キーのファイル |
| 409 | FILE_NOT_READY | 未完了、または削除可能時刻前 |
| 413 | FILE_TOO_LARGE | ファイル・参照回数・合計サイズ・展開後リクエストの上限超過 |
| 429 | FILE_QUOTA_EXCEEDED | ストレージ上限に到達 |
| 503 | FILE_STORAGE_UNAVAILABLE | COS 未設定、またはストレージ/メタデータ処理失敗 |
既存の認証、キーレート制限、ルーティング、上流エラー規則も適用されます。