encrypt_stream / decrypt_stream)でバイトを暗号化し、/2/chat/media/upload ルート(サイドバー API リファレンス → Media)経由でアップロードし、encrypt_message で media_hash_key を添付します。
アップロード時は、DM スコープに media.write を含めてください。パスにはハイフン付きの会話 ID を使います(: → -)。MIME や寸法は復号済みのバイトから取得することが望ましいです。
このパスは Posts メディアモデル(expansions=attachments.media_keys、media.fields=variants など)ではありません。それらのパラメータは Posts に適用されます;E2EE X Chat の blob は media_hash_key と X Chat メディアダウンロードでアドレス指定されます。
暗号化
- Python
- TypeScript
- Rust
- Go
- C#
- Java
encrypt_stream / decrypt_stream はペイロード全体をメモリ内で処理します。大きなファイルの場合、stream_encryptor() / stream_decryptor() はインクリメンタルなオブジェクト(StreamEncryptor / StreamDecryptor)を返します: push でチャンクを供給し、最後に finish を 1 回呼び出します — ストリームが切り詰められた場合、finish はエラーを返します。
アップロード
API リファレンス → Media の下にある OpenAPI ページのリクエストボディを使用してください。サイズが必要な場合は、暗号化済みの blob サイズを優先してください。Finalize は添付とダウンロード用の
media_hash_key を返します。一時的な 5xx はバックオフで再試行してください。Python/TypeScript ではメディアヘルパーが存在する場合は XDK を使用できます;それ以外は任意の言語で Bearer トークンを使って POST します。
添付ファイル付きで送信する
メディア添付付きで暗号化し、その後メッセージ送信ボディを POST します(フィールドマッピングは Getting Started と同じ)。- Python
- TypeScript
- Rust
- Go
- C#
- Java
ダウンロードして復号する
パス:GET /2/chat/media/{conversation_id}/{media_hash_key}。レスポンスボディは暗号文です。受信メッセージでは、復号された添付ファイル / media_hashes から media_hash_key を読み取ります。
イベントの鍵バージョンで鍵を選択します。 各復号済みメッセージイベントは、そのコンテンツが暗号化された keyVersion(JS;他のバインディングでは key_version)を保持しています。添付ファイルはそのバージョンの会話鍵で復号してください — conversationKeys.keys[event.keyVersion] — 最新のものではありません。鍵ローテーション(たとえばメンバー追加)の後、最新の鍵では古いメッセージに添付されたメディアを復号できません。
- Python
- TypeScript
- Python
- TypeScript
- Rust
- Go
- C#
- Java
ヒント
- メディアが暗号化されたときと同じ会話鍵バージョンを使用する
- 平文メディアや未加工の鍵をログに出力しない
- MIME は復号後に検出する
- Web クライアント: 可能な場合はクライアント側で暗号化・復号する;OAuth トークンはサーバー側に保持する