Skip to main content
Imagens e outros arquivos usam a mesma chave de conversa que o texto. Criptografe os bytes com o Chat XDK (encrypt_stream / decrypt_stream), envie via rotas /2/chat/media/upload (barra lateral Referência da API → Mídia) e depois anexe media_hash_key em encrypt_message. Inclua media.write entre seus escopos de DM ao fazer upload. Use IDs de conversa com hífen nos paths (:-). Prefira MIME/dimensões dos bytes descriptografados. Este caminho não é o modelo de mídia de Posts (expansions=attachments.media_keys, media.fields=variants, etc.). Esses parâmetros se aplicam a Posts; blobs E2EE do X Chat são endereçados por media_hash_key e o download de mídia do X Chat.

Criptografar

encrypt_stream / decrypt_stream processam o payload inteiro em memória. Para arquivos grandes, stream_encryptor() / stream_decryptor() retornam objetos incrementais (StreamEncryptor / StreamDecryptor): alimente chunks com push e depois chame finish uma vez — finish retorna erro se o stream foi truncado.

Upload

Use os corpos de requisição nas páginas OpenAPI em Referência da API → Mídia. Prefira o tamanho do blob criptografado onde o tamanho é requerido. A finalização retorna media_hash_key para anexos e download. Repita 5xx transitórios com backoff. Python/TypeScript podem usar o XDK quando existirem helpers de mídia; caso contrário, faça POST com um token Bearer em qualquer linguagem.

Enviar com um anexo

Criptografe com um anexo de mídia e depois faça POST do corpo de envio de mensagem (mesmo mapeamento de campos do Guia de introdução).

Baixar e descriptografar

Path: GET /2/chat/media/{conversation_id}/{media_hash_key}. O corpo da resposta é texto cifrado. Em mensagens de entrada, leia media_hash_key dos anexos descriptografados / media_hashes. Escolha a chave pela versão de chave do evento. Cada evento de mensagem descriptografado carrega o keyVersion (JS; key_version nos outros bindings) sob o qual seu conteúdo foi criptografado. Descriptografe um anexo com a chave de conversa para essa versão — conversationKeys.keys[event.keyVersion] — e não com a mais recente. Após uma rotação de chave (por exemplo, uma adição de membro), a chave mais recente não consegue descriptografar mídia anexada a mensagens mais antigas.

Dicas

  • Use a mesma versão da chave de conversa que foi usada quando a mídia foi criptografada
  • Não registre mídia em texto simples nem chaves em bruto
  • Detecte MIME após descriptografar
  • Clientes web: criptografe/descriptografe no cliente quando possível; mantenha tokens OAuth no seu servidor
Os esquemas completos de requisição e resposta para cada rota de mídia estão em Referência da API → Mídia na barra lateral (inicializar upload, anexar chunk, finalizar upload e baixar mídia).