Pular para o conteúdo
Decoding Chat API

Downloads para desktop

O recurso de download atende às builds do aplicativo para desktop que uma implantação armazenou. Ele também atende a um checksum SHA-256 para cada build e aos arquivos de feed de lançamento ao lado deles. Cada rota aqui não é autenticada. Uma solicitação que envia uma credencial de qualquer maneira recebe o mesmo status e corpo. Nenhuma rota aqui declara um bucket de limite de taxa e nenhuma consome a permissão global.

O Decoding Chat registra as rotas sob /dl, e as rotas de desktop sob /dl/desktop. Um cliente constrói a URL a partir de api_client do objeto de endpoints da instância.

O Decoding Chat monta o prefixo na raiz e em /v1. Cada rota de desktop abaixo também responde sob /v1/dl/desktop/....

Todas as outras rotas nesta referência assumem o formato /v1, e a API HTTP declara que um cliente DEVE usá-lo.

Cada rota responde GET. As rotas de checksum, as rotas de artefato e a coringa também vinculam HEAD. Obter versão de desktop mais recente e Listar versões de desktop vinculam GET isoladamente, e um HEAD ainda as alcança sob a regra compartilhada para HEAD.

Um HEAD em qualquer rota JSON executa a mesma resolução que o GET e retorna seu status e cabeçalhos sem nenhum corpo. Ele pode, portanto, responder 404.

Uma rota de checksum responde a um HEAD com 200 e sem corpo. Os cabeçalhos são Content-Type, Content-Disposition, Cache-Control e o Content-Length da linha de checksum.

Requisições HEAD para artefatos e coringa retornam 200 com Content-Type, Content-Disposition, Accept-Ranges, Cache-Control e Content-Length, além de ETag e Last-Modified quando disponíveis. Eles ignoram Range e nunca retornam 206, 416 ou um redirecionamento de URL pré-assinado. Redirecionamentos de país ainda retornam 302 para HEAD, assim como para GET.

ValorNomeDescrição
stableStableO canal que uma implantação publica para uso geral
canaryCanaryO canal que recebe uma build antes de stable

O canal seleciona a série de lançamentos e o nome do produto. Um arquivo canary é nomeado Decoding Chat-Canary ou Decoding Chat Canary, e um arquivo stable é nomeado Decoding Chat.

ValorNomeDescrição
win32WindowsO destino de build do Windows
darwinmacOSO destino de build do macOS
linuxLinuxO destino de build do Linux

O segmento de caminho com um desses valores é nomeado plat.

ValorNomeDescrição
x64x64A arquitetura x86 de 64 bits
arm64ARM64A arquitetura ARM de 64 bits

Um canal, uma plataforma e uma arquitetura juntos nomeiam uma coordenada.

ValorNomeDescrição
setupSetupO executável do instalador do Windows
portablePortableO arquivo do Windows que armazena seus dados ao lado do executável
dmgDMGA imagem de disco do macOS
zipZIPO arquivo de aplicativo do macOS
appimageAppImageA imagem de aplicativo portátil do Linux
debDEBO pacote Debian
rpmRPMO pacote RPM
tar_gzTAR.GZO tarball compactado do Linux

O registro é fechado, e um format fora dele retorna 400 INVALID_FORM_BODY.

Cada formato se resolve em uma plataforma. setup e portable resolvem em win32, dmg e zip em darwin, e appimage, deb, rpm, e tar_gz em linux. Um formato pareado com qualquer outra plataforma retorna 404.

No darwin, uma solicitação dmg ou zip tenta o arquivo universal antes do específico da arquitetura, então x64 e arm64 podem ser resolvidos para o mesmo arquivo.

Um cliente anexa .sha256 ao segmento de formato para ler o checksum, e envia o formato simples para ler o arquivo. tar_gz.sha256 é o checksum de tar_gz.

Use o sufixo .sha256 em letras minúsculas com um formato de pacote válido. Um formato ou sufixo inválido retorna 400 INVALID_FORM_BODY.

Um objeto de informações da versão descreve um lançamento em uma coordenada e o arquivo que ele tem para cada formato.

CampoTipoDescrição
versionstringA versão do lançamento na forma MAJOR.MINOR.PATCH
pub_date1Timestamp ISO8601O momento em que o lançamento foi publicado
minimum_system_version?2?stringA versão mais baixa do sistema operacional que o lançamento suporta
files3map[string, objeto arquivo de versão]A entrada de download para cada formato de pacote que o lançamento possui

1 Tempo de publicação reportado para o lançamento

2 Presente quando o lançamento especifica uma versão mínima do sistema

3 Um formato que não resolve nenhum arquivo está ausente do mapa

{
"version": "1.4.2",
"pub_date": "2026-08-19T11:04:00.000Z",
"minimum_system_version": "10.15.0",
"files": {
"dmg": {
"url": "https://api.example.com/dl/desktop/stable/darwin/arm64/1.4.2/dmg",
"sha256": "3b1f5c0d9e7a24486cf0b1d3a5e87209cc4d61fba0937e5528d1c4a67b0e93f2",
"checksum_url": "https://api.example.com/dl/desktop/stable/darwin/arm64/1.4.2/dmg.sha256"
}
}
}

Um objeto de arquivo de versão é a entrada de download para um formato de um lançamento.

CampoTipoDescrição
url1stringA URL absoluta do download versionado para este formato
sha2562?stringO hash do arquivo como 64 caracteres hexadecimais em letras minúsculas, ou null onde nenhum checksum foi encontrado
checksum_url1?stringA URL absoluta do arquivo de checksum, ou null onde sha256 é null

1 Construído a partir de api_client no objeto de endpoints da instância, sem o segmento /v1

2 Um hash hexadecimal minúsculo de 64 caracteres, ou null quando nenhum checksum válido estiver disponível

Uma resposta de checksum é uma linha sha256sum: o hash, dois espaços, o nome do arquivo resolvido e uma nova linha no final.

2f6d1a4b8c3e07f95ab61d4c2e8035971fd0ba46c7e213985cd0f74a6b1e82c3 Decoding Chat-1.4.2-linux-x86_64.AppImage

A resposta tem Content-Type: text/plain; charset=utf-8, um Content-Disposition de attachment nomeando o nome do arquivo resolvido com .sha256 anexado, e um Content-Length contando a linha codificada. Ele não define Accept-Ranges, ETag, ou Last-Modified, e ignora um cabeçalho Range.

Um checksum ausente ou inválido retorna 404.

Use latest para o lançamento atualmente oferecido em um canal, plataforma e arquitetura, ou uma URL versionada para solicitar um lançamento específico. Um arquivo ausente retorna 404 com o corpo de texto simples Not Found.

Toda resposta de artefato tem Accept-Ranges: bytes e um Content-Disposition de attachment nomeando o arquivo resolvido, a menos que o objeto armazenado tenha seu próprio Content-Disposition. O nome do arquivo é codificado por porcentagem (percent-encoded) dentro do cabeçalho, então um nome contendo um espaço é escrito com %20.

RespostaCache-Control
Metadados da versão mais recente e lista de versõespublic, max-age=300
Artefato mais recente e checksum mais recenteno-store
Artefato versionado e checksum versionado sob desktop/public, max-age=31536000
O nome de um arquivo de feed de lançamento e qualquer coisa sob desktop-test/public, max-age=300
Qualquer artefato de desktop/ em uma implantação que configura redirecionamentos de paísprivate, no-store
Um redirecionamento para uma URL de armazenamento pré-assinadano-store

O nome de um arquivo de feed de lançamento é qualquer um destes:

  • manifest.json
  • Um nome terminando em .yml ou .yaml
  • Um nome começando com RELEASES
  • Um nome começando com releases ou assets e terminando em .json

As configurações de implantação abaixo respondem a um download com 302.

Uma implantação hospedada pode listar países cujos downloads de um arquivo sob desktop/ o Decoding Chat pode redirecionar para ativos de lançamento do GitHub. Uma vez que a lista está definida, cada resposta para tal arquivo tem Cache-Control: private, no-store, incluindo uma resposta que o Decoding Chat serve do armazenamento.

Uma implantação que emite URLs de download pré-assinadas responde a um GET com 302 para uma URL de armazenamento válida por 900 segundos. Esse redirecionamento tem Cache-Control: no-store e Accept-Ranges: bytes. A configuração é desativada por padrão.

Toda rota aceita o parâmetro de consulta test. 1 ou true, combinado sem distinção entre maiúsculas e minúsculas, seleciona lançamentos de teste. Qualquer outro valor é falso.

Nas rotas de desktop, a flag faz o Decoding Chat resolver todos os arquivos em desktop-test/. Em Baixar objeto armazenado, ele reescreve uma chave começando com desktop/ e deixa qualquer outra chave inalterada, e um caminho que já nomeia desktop-test/ resolve lá sem nenhuma flag.

Um url e um checksum_url construídos para uma solicitação que enviou a flag repetem ?test=1, de modo que um cliente que segue qualquer um deles permanece no prefixo de teste.

GET/v1/dl/desktop/{channel}/{plat}/{arch}/latestUnauthenticated

Retorna o objeto de informações da versão para o lançamento mais recente na coordenada.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/
StatusCorpoCondição
200objeto de informações da versãoUm lançamento resolvido na coordenada
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundNenhum lançamento resolvido na coordenada

Um cliente lê files para o formato que deseja. Um formato cujo arquivo não resolveu nenhum checksum reporta sha256 e checksum_url como null.

O 200 tem Cache-Control: public, max-age=300. O 404 tem Content-Type: text/plain.

GET/v1/dl/desktop/{channel}/{plat}/{arch}/versionsUnauthenticated

Retorna os lançamentos armazenados na coordenada, o mais recente primeiro.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
CampoTipoDescrição
limit?integerO número máximo de lançamentos para retornar (1 a 100, padrão 25)
before?1stringA versão para paginar abaixo, exclusivo
after?1stringA versão para paginar acima, exclusivo
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/

1 Comparado componente por componente como números, e ambos os limites podem ser enviados juntos para selecionar um intervalo

CampoTipoDescrição
versionsarray[objeto de informações da versão]Os lançamentos nesta página, ordenados do mais recente primeiro
has_morebooleanSe o conjunto filtrado continha mais lançamentos do que limit
StatusCorpoCondição
200corpo da respostaA listagem foi concluída, possivelmente sem nenhum lançamento
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY

Esta rota nunca responde 404. Uma coordenada que não contém nenhum objeto retorna 200 com um array vazio.

Apenas arquivos disponíveis são listados. Esta resposta omite minimum_system_version e relata sha256 apenas quando um checksum válido está disponível.

O 200 tem Cache-Control: public, max-age=300.

GET/v1/dl/desktop/{channel}/{plat}/{arch}/latest/{format}Unauthenticated

Faz o streaming do arquivo mais recente na coordenada para um formato de pacote.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
formatstringO formato de pacote para resolver
CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/
CampoTipoDescrição
Range?stringO intervalo de bytes padrão, respondido com 206 e um cabeçalho Content-Range
StatusCorpoCondição
200bytes do artefatoO arquivo completo foi transmitido (streamed)
206bytes do artefatoO intervalo de bytes solicitado foi transmitido
302vazioA implantação redireciona este download
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundNenhum arquivo resolvido para o formato na coordenada
416vazioO intervalo solicitado é insatisfatório

O arquivo armazenado mantém seu próprio nome, de modo que o nome do arquivo resolvido tem a versão de lançamento, mesmo que a solicitação tenha nomeado latest. Um cliente que segue esta rota em cada verificação lê um arquivo diferente assim que um lançamento mais recente é armazenado na coordenada.

O 200 tem Content-Type1, Content-Disposition2, Content-Length, Accept-Ranges: bytes, Cache-Control: no-store, ETag3, e Last-Modified3. O 206 tem os cabeçalhos 200 mais Content-Range. O 302 tem Location, Accept-Ranges: bytes, e Cache-Control. O 404 tem Content-Type: text/plain. O 416 tem Accept-Ranges: bytes, Content-Range: bytes */{size}, e Cache-Control.

1 O tipo de mídia armazenado, e application/octet-stream onde o armazenamento não reporta nenhum

2 attachment nomeando o nome do arquivo resolvido, codificado por porcentagem (percent-encoded)

3 Enviado onde o armazenamento reporta o valor

GET/v1/dl/desktop/{channel}/{plat}/{arch}/latest/{format}.sha256Unauthenticated

Retorna o arquivo de checksum para o arquivo mais recente na coordenada.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
format1stringO formato de pacote para resolver, seguido por .sha256

1 O segmento completo corresponde a [a-z_]+\.sha256 para a rota reivindicá-lo, e a parte antes do sufixo nomeia um formato no registro fechado

CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/
StatusCorpoCondição
200linha de checksumO arquivo e um hash válido foram resolvidos
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundNenhum arquivo resolvido para o formato, ou o arquivo resolvido não possui hash válido

Este hash é o valor que Obter versão de desktop mais recente relata como sha256 para o mesmo formato. A linha nomeia o arquivo que o download latest desta coordenada transmite.

O 200 tem Content-Type: text/plain; charset=utf-8, Content-Disposition, Content-Length, e Cache-Control: no-store. O 404 tem Content-Type: text/plain.

GET/v1/dl/desktop/{channel}/{plat}/{arch}/{version}/{format}Unauthenticated

Faz o streaming de um arquivo lançado por versão e formato de pacote.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
version1stringA versão de lançamento para resolver
formatstringO formato de pacote para resolver

1 Três componentes decimais correspondentes a ^\d+\.\d+\.\d+$, portanto uma versão com dois componentes ou com sufixo retorna 400 INVALID_FORM_BODY

CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/
CampoTipoDescrição
Range?stringO intervalo de bytes padrão, respondido com 206 e um cabeçalho Content-Range
StatusCorpoCondição
200bytes do artefatoO arquivo completo foi transmitido
206bytes do artefatoO intervalo de bytes solicitado foi transmitido
302vazioA implantação redireciona este download
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundNenhum arquivo resolvido para a versão e o formato
416vazioO intervalo solicitado é insatisfatório

O 200 tem Content-Type, Content-Disposition, Content-Length, Accept-Ranges: bytes, Cache-Control1, ETag2, e Last-Modified2. O 206 tem os cabeçalhos 200 mais Content-Range. O 302 tem Location, Accept-Ranges: bytes, e Cache-Control. O 404 tem Content-Type: text/plain. O 416 tem Accept-Ranges: bytes, Content-Range: bytes */{size}, e Cache-Control.

1 public, max-age=31536000 para um arquivo lançado, e public, max-age=300 sob desktop-test/ ou para um nome de arquivo de feed de lançamento

2 Enviado onde o armazenamento reporta o valor

GET/v1/dl/desktop/{channel}/{plat}/{arch}/{version}/{format}.sha256Unauthenticated

Retorna o arquivo de checksum para um arquivo lançado.

CampoTipoDescrição
channelstringO canal de lançamento para resolver
platstringA plataforma para resolver
archstringA arquitetura para resolver
versionstringA versão de lançamento para resolver
format1stringO formato de pacote para resolver, seguido por .sha256

1 O segmento completo corresponde a [a-z_]+\.sha256 para a rota reivindicá-lo, e a parte antes do sufixo nomeia um formato no registro fechado

CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para resolver sob desktop-test/
StatusCorpoCondição
200linha de checksumO arquivo e um hash válido foram resolvidos
400resposta de erroUm valor de caminho ou consulta falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundNenhum arquivo resolvido para a versão e o formato, ou nenhum hash válido foi encontrado para ele

Retorna 404 quando o arquivo solicitado não possui um checksum disponível.

O 200 tem Content-Type: text/plain; charset=utf-8, Content-Disposition, Content-Length, e Cache-Control1. O 404 tem Content-Type: text/plain.

1 public, max-age=31536000 para um arquivo lançado, e public, max-age=300 sob desktop-test/

GET/dl/{path}Unauthenticated

Baixa um arquivo por caminho. Use esta rota para feeds de lançamento, que não possuem segmento de formato ou versão.

CampoTipoDescrição
path1stringO caminho de download, que pode conter separadores /

1 Retirado do caminho da requisição com o prefixo /dl removido e depois normalizado. Começa com desktop/ ou desktop-test/ após a normalização, e qualquer outra chave retorna 404

CampoTipoDescrição
test?stringA flag de build de teste, 1 ou true para reescrever uma chave desktop/ para desktop-test/
CampoTipoDescrição
Range?stringO intervalo de bytes padrão, respondido com 206 e um cabeçalho Content-Range
StatusCorpoCondição
200bytes do objetoO objeto completo foi transmitido
206bytes do objetoO intervalo de bytes solicitado foi transmitido
302vazioA implantação redireciona este download
400resposta de erroO valor test falha em seu esquema e a requisição retorna INVALID_FORM_BODY
404Not FoundA chave está fora dos prefixos permitidos, a requisição tem o prefixo /v1, ou o armazenamento não contém tal objeto
416vazioO intervalo solicitado é insatisfatório

O Decoding Chat também rejeita a chave quando está vazia, quando a normalização a deixa começando com .. ou /, ou quando qualquer segmento é ., .., ou contém um caractere NUL. Cada um destes retorna o mesmo 404, para que um chamador não consiga distinguir uma tentativa de travessia (traversal) de um objeto ausente.

Uma solicitação pode nomear desktop/stable/linux-x64/manifest.json ou desktop/stable/linux/x64/manifest.json. Para a forma com hífen, o Decoding Chat retorna esse objeto quando o armazenamento o contém e, caso contrário, retorna o objeto na forma com barra.

O 200 tem Content-Type, Content-Disposition, Content-Length, Accept-Ranges: bytes, Cache-Control1, ETag2, e Last-Modified2. O 206 tem os cabeçalhos 200 mais Content-Range. O 302 tem Location, Accept-Ranges: bytes, e Cache-Control. O 404 tem Content-Type: text/plain. O 416 tem Accept-Ranges: bytes, Content-Range: bytes */{size}, e Cache-Control.

1 public, max-age=31536000 para um artefato lançado, e public, max-age=300 para um nome de arquivo de feed de lançamento ou uma chave sob desktop-test/

2 Enviado onde o armazenamento reporta o valor