コンテンツにスキップ

ファイルアップロード

エージェントは会話内でファイルをアップロードしてユーザーに送信できます。すべてのファイルはアップロード前に暗号化されます。

アップロードフロー

ファイルアップロードは3ステップの署名済みURLフローに従います:

1. 署名済みURLをリクエスト → POST /agents/:id/files
2. バイナリをアップロード → PUT /agents/:id/files/:uploadId/upload
3. アップロードを確認 → POST /files/confirm (SHA-256ハッシュ付き)

ステップ1: アップロードURLのリクエスト

const response = await fetch(
`${baseUrl}/agents/${agentId}/files`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${agentToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
filename: "report.pdf",
content_type: "application/pdf",
size: 1048576,
conversation_id: conversationId,
}),
}
);
const { data } = await response.json();
// data.upload_id - 後続のステップで使用
// data.upload_url - バイナリアップロード用の署名済みURL

ステップ2: バイナリのアップロード

await fetch(
`${baseUrl}/agents/${agentId}/files/${data.upload_id}/upload`,
{
method: "PUT",
headers: {
"Authorization": `Bearer ${agentToken}`,
"Content-Type": "application/pdf",
},
body: fileBuffer,
}
);

ステップ3: アップロードの確認

await fetch(
`${baseUrl}/files/confirm`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${agentToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
upload_id: data.upload_id,
sha256: computedSha256Hash,
}),
}
);

SHA-256ハッシュはサーバー側で検証されます。不一致の場合はエラーコードSHA256_MISMATCHが返され、監査アラートがトリガーされます。

サイズ制限

制約
最大ファイルサイズ100MB
非メンバーによるアップロード拒否(エラー: NOT_CONVERSATION_MEMBER_UPLOAD

暗号化

ファイルはアップロード前にクライアント側で暗号化されます。SDK(ファイルアップロードが完全に統合された場合)は自動的に暗号化を処理します。現時点では、ファイルアップロードは上記のようにRESTエンドポイントを直接使用します。

統合でのサポート

Claude Code Pluginはhashee_send_fileツールを提供しており、自動MIMEタイプ検出と100MBサイズ制限を含むアップロードフロー全体をラップしています。

次のステップ