Skip to main content
Las imágenes y otros archivos usan la misma clave de conversación que el texto. Cifra los bytes con el Chat XDK (encrypt_stream / decrypt_stream), sube mediante las rutas /2/chat/media/upload (barra lateral API reference → Media) y luego adjunta media_hash_key en encrypt_message. Incluye media.write con tus scopes de DM al subir. Usa ids de conversación con guión en las rutas (:-). Prefiere el MIME/dimensiones desde los bytes descifrados. Este camino no es el modelo de multimedia de Posts (expansions=attachments.media_keys, media.fields=variants, etc.). Esos parámetros aplican a Posts; los blobs E2EE de X Chat se direccionan por media_hash_key y por la descarga de multimedia de X Chat.

Cifrar

encrypt_stream / decrypt_stream procesan la carga completa en memoria. Para archivos grandes, stream_encryptor() / stream_decryptor() devuelven objetos incrementales (StreamEncryptor / StreamDecryptor): aliméntalos por fragmentos con push y luego llama a finish una vez—finish arroja error si el stream se truncó.

Subir

Usa los cuerpos de solicitud en las páginas de OpenAPI bajo API reference → Media. Prefiere el tamaño del blob cifrado donde se requiera el tamaño. Finalizar produce media_hash_key para adjuntos y descarga. Reintenta 5xx transitorios con backoff. Python/TypeScript pueden usar el XDK cuando existan helpers de multimedia; en caso contrario, haz POST con un Bearer token en cualquier lenguaje.

Enviar con un adjunto

Cifra con un adjunto de multimedia y luego haz POST del cuerpo send-message (mismo mapeo de campos que en Primeros pasos).

Descargar y descifrar

Ruta: GET /2/chat/media/{conversation_id}/{media_hash_key}. El cuerpo de la respuesta es texto cifrado. En los mensajes entrantes, lee media_hash_key desde los adjuntos descifrados / media_hashes. Elige la clave por la versión de clave del evento. Cada evento de mensaje descifrado lleva la keyVersion (JS; key_version en los demás bindings) con la que se cifró su contenido. Descifra un adjunto con la clave de conversación de esa versión—conversationKeys.keys[event.keyVersion]—no la más reciente. Después de una rotación de clave (por ejemplo al agregar un miembro), la clave más reciente no puede descifrar multimedia adjunta a mensajes anteriores.

Consejos

  • Usa la misma versión de clave de conversación que cuando se cifró la multimedia
  • No registres multimedia en texto plano ni claves en bruto
  • Detecta el MIME después de descifrar
  • Clientes web: cifra/descifra en el cliente cuando sea posible; mantén los tokens de OAuth en tu servidor
Los esquemas completos de solicitud y respuesta para cada ruta de multimedia están bajo API reference → Media en la barra lateral (inicializar subida, añadir chunk, finalizar subida y descargar multimedia).