Pular para o conteúdo
Decoding Chat API

Transmissões

Uma transmissão Go Live (stream) é um compartilhamento de tela em uma conexão de voz existente de um membro. Uma chave de transmissão (stream key) nomeia uma transmissão. As operações aqui registram uma preferência de região e gerenciam a imagem de visualização JPEG da transmissão.

Todas as rotas nesta página são apenas para usuários (user-only). O Decoding Chat rejeita um token de bot e uma credencial de portador (bearer credential) OAuth2 com 403 ACCESS_DENIED.

Iniciar e parar uma transmissão é uma operação principal do Gateway. Transmitir ao vivo publica uma trilha de compartilhamento de tela no participante LiveKit que o membro já possui, e o publicador a anuncia configurando self_stream nessa conexão com Voice State Update. O Decoding Chat não abre uma segunda conexão e não emite nenhuma nova concessão. A Visão geral de voz estabelece o modelo completo.

Uma chave de transmissão é um segmento de caminho de 1 a 256 caracteres. Ela possui exatamente três segmentos separados por dois pontos. A forma é {guild_id}:{channel_id}:{connection_id} para uma transmissão em canal de voz de guilda e dm:{channel_id}:{connection_id} para uma transmissão em chamada privada.

CampoTipoDescrição
scope1stringO literal dm para uma chamada privada ou o ID decimal da guilda para um canal de voz da guilda
channel_id2stringO ID decimal do canal de voz ou canal privado no qual a transmissão ocorre
connection_id3stringO connection_id da conexão de voz existente do publicador

1 Qualquer outro valor falha na verificação de formato, incluindo um segmento vazio 2 O segmento possui dígitos decimais canônicos, [0-9]+ sem zero à esquerda. Uma forma não canônica nunca corresponde 3 A conexão de voz comum do publicador, que também é aquela em seu estado de voz e em sua identidade de participante de mídia

Uma chave com uma contagem de segmentos diferente, um segmento de canal não numérico, um segmento de conexão vazio ou um segmento de escopo que não seja nem dm nem um ID decimal retorna 400 INVALID_STREAM_KEY_FORMAT.

Modificar região da transmissão, Obter visualização da transmissão e Excluir visualização da transmissão resolvem o canal a partir do segmento de canal da chave. Fazer upload de visualização da transmissão e Criar URL de upload de visualização de transmissão resolvem-no a partir do channel_id no corpo da solicitação e depois comparam esse valor com a chave.

O Decoding Chat verifica o segmento de escopo (scope) em relação ao canal resolvido. Uma chave com escopo de guilda cujo canal resolvido é privado retorna 400 STREAM_KEY_SCOPE_MISMATCH, e o mesmo acontece com uma chave dm cujo canal resolvido pertence a uma guilda. Uma chave com escopo de guilda cujo segmento de guilda não é a guilda do canal resolvido retorna o mesmo código.

A rota então compara o segmento de canal contra o ID do canal resolvido, e uma incompatibilidade retorna 400 STREAM_KEY_CHANNEL_MISMATCH. Nas rotas que têm um corpo channel_id, o chamador DEVE enviar o mesmo valor no corpo e na chave.

O Decoding Chat executa essa comparação após todas as outras verificações de regras de acesso de leitura. A busca de canal, a verificação de escopo, a verificação de tipo de canal e a verificação CONNECT ocorrem primeiro, portanto, um corpo channel_id nomeando um canal que o chamador não pode ver retorna 404 UNKNOWN_CHANNEL ou um dos códigos 403 listados em Regras de acesso.

Obter visualização da transmissão requer acesso de leitura. Todas as outras rotas nesta página requerem acesso de mutação.

O acesso de leitura corresponde a Obter canal para o canal resolvido. Um canal de guilda também requer a permissão CONNECT. O chamador não precisa ser o proprietário da transmissão, portanto, qualquer membro que possa entrar no canal pode ler sua visualização.

O acesso de mutação requer tudo o que o acesso de leitura faz. Um canal de guilda também requer a permissão STREAM. O chamador deve manter um estado de voz cujo canal seja o canal resolvido e cujo connection_id seja o segmento de conexão da chave. O Decoding Chat rejeita um chamador que não possua esse estado de voz com 403 ACCESS_DENIED, mesmo quando ele possui (is owner of) o canal.

O Decoding Chat resolve um canal de guilda antes de sua guilda. Uma linha de canal que sobrevive à sua guilda retorna 404 UNKNOWN_GUILD. Quando o registro da guilda existe e o Decoding Chat não consegue resolver o estado da associação, a rota retorna 403 ACCESS_DENIED, e um chamador que não é membro ou não possui VIEW_CHANNEL retorna 403 MISSING_PERMISSIONS. Uma restrição de idade não satisfeita em um canal de texto, voz ou link de guilda retorna 403 NSFW_CONTENT_AGE_RESTRICTED.

Um canal privado cujo conjunto de destinatários não contém o chamador retorna 404 UNKNOWN_CHANNEL. Um canal ausente retorna o mesmo código, portanto, a participação do destinatário nunca pode ser distinguida da existência de canal privado.

Cada rota verifica o tipo de canal após a verificação de escopo. Uma chave de guilda nomeia um canal de voz de guilda e uma chave dm nomeia uma mensagem direta ou uma mensagem direta em grupo. Qualquer outro canal resolvido retorna 400 INVALID_CHANNEL_TYPE.

Objeto de upload de visualização da transmissão

Seção intitulada “Objeto de upload de visualização da transmissão”

Um URL de curta duração que aceita a imagem de visualização de uma transmissão. Criar URL de upload de visualização de transmissão o retorna, e o cliente faz o upload da imagem com um único PUT contra a upload_url.

CampoTipoDescrição
upload_url1stringO URL de capacidade (capability URL) que aceita os bytes de visualização com uma solicitação PUT
methodstringSempre PUT
content_type2stringO tipo de mídia (media type) da solicitação de upload
expires_at3ISO8601 timestampO tempo em que a capacidade expira
expires_in3integerO tempo de vida da capacidade em segundos
max_bytesintegerA contagem máxima de bytes aceitos, sempre 1000000

1 Uma URL pré-assinada de armazenamento de objetos ou uma URL de upload relay com a capacidade assinada em seu parâmetro de consulta t 2 O content_type da solicitação é retornado exatamente (verbatim), com as maiúsculas originais incluídas, e um campo ausente resulta em image/jpeg 3 Um URL pré-assinado de armazenamento de objetos dura um dia. Um URL de relay dura o tempo de vida do token de relay para o qual a instância está configurada

Um cliente DEVE enviar o URL exatamente como retornado e NÃO DEVE reconstruí-lo ou reordená-lo. Reconstruir perde a capacidade assinada em t, e um URL de relay que chega sem t retorna 401.

O URL aceita solicitações PUT repetidas até expirar. Cada uma substitui a visualização anterior.

{
"upload_url": "https://cdn.example.com/stream-previews/1501314428688998182?t=fabricated-token",
"method": "PUT",
"content_type": "image/jpeg",
"expires_at": "2026-08-31T12:00:00.000Z",
"expires_in": 86400,
"max_bytes": 1000000
}
PATCH/v1/streams/{stream_key}/stream

Registra a região de mídia preferida para uma transmissão e retorna 204 com um corpo vazio. O chamador deve satisfazer o limite de acesso de mutação.

CampoTipoDescrição
stream_keystringChave da transmissão cuja região está definida, de 1 a 256 caracteres
CampoTipoDescrição
region?1stringO ID da região RTC de 1 a 64 caracteres

1 Um campo omitido remove qualquer região já armazenada para esta transmissão

Um identificador de região é o id de um objeto de região de RTC, conforme retornado por Listar regiões de RTC.

StatusCorpoCondição
204vazioA preferência foi registrada
400resposta de erroA chave de transmissão está malformada e a solicitação retorna INVALID_STREAM_KEY_FORMAT
400resposta de erroSeu escopo discorda do canal resolvido e a solicitação retorna STREAM_KEY_SCOPE_MISMATCH
400resposta de erroSeu segmento de canal não é a forma canônica do ID do canal resolvido e a solicitação retorna STREAM_KEY_CHANNEL_MISMATCH
400resposta de erroO canal resolvido não é um canal de voz de guilda ou um canal privado e a solicitação retorna INVALID_CHANNEL_TYPE
403resposta de erroO chamador não mantém estado de voz correspondente ou tem um estado de associação de guilda não resolvível, cada um retornando ACCESS_DENIED
403resposta de erroO chamador não possui VIEW_CHANNEL, CONNECT ou STREAM e a solicitação retorna MISSING_PERMISSIONS
403resposta de erroA restrição de idade resolvida de um canal de guilda não é satisfeita e a solicitação retorna NSFW_CONTENT_AGE_RESTRICTED
404resposta de erroO canal nomeado pela chave da transmissão não existe, ou o chamador não é um destinatário do canal privado, cada um retornando UNKNOWN_CHANNEL, ou a guilda proprietária do canal não existe e a solicitação retorna UNKNOWN_GUILD

A chamada não tem efeito sobre onde a transmissão é colocada. O Decoding Chat não valida a região contra a lista de regiões acessíveis do chamador. A operação não emite Gateway Dispatch.

20 solicitações por 10 segundos para cada usuário autenticado e chave de transmissão, no bucket channel:stream:update::stream_key.

GET/v1/streams/{stream_key}/preview

Retorna os bytes de visualização armazenados para uma transmissão. O chamador deve satisfazer o limite de acesso de leitura.

CampoTipoDescrição
stream_keystringChave de transmissão cuja visualização é retornada, de 1 a 256 caracteres
StatusCorpoCondição
200bytes de visualizaçãoUma visualização armazenada existe
400resposta de erroA chave de transmissão é malformada e a solicitação retorna INVALID_STREAM_KEY_FORMAT, seu escopo não concorda com o canal resolvido e a solicitação retorna STREAM_KEY_SCOPE_MISMATCH, o canal resolvido não é um canal de voz de guilda ou um canal privado e a solicitação retorna INVALID_CHANNEL_TYPE, ou seu segmento de canal não é a forma canônica do ID do canal resolvido e a solicitação retorna STREAM_KEY_CHANNEL_MISMATCH
403resposta de erroO chamador tem um estado de associação à guilda não resolvível e a solicitação retorna ACCESS_DENIED, o chamador não tem VIEW_CHANNEL ou CONNECT e a solicitação retorna MISSING_PERMISSIONS, ou a restrição de idade resolvida de um canal de guilda não é satisfeita e a solicitação retorna NSFW_CONTENT_AGE_RESTRICTED
404vazioNenhuma visualização é armazenada para esta chave de transmissão
404resposta de erroO canal nomeado pela chave de transmissão não existe, ou o chamador não é um destinatário do canal privado, cada um retornando UNKNOWN_CHANNEL, ou a guilda proprietária do canal não existe e a solicitação retorna UNKNOWN_GUILD

O 200 também tem Cache-Control: no-store, private e Pragma: no-cache.

Uma visualização armazenada expira um dia após ser gravada, e uma leitura após esse ponto responde com um 404 vazio. Um objeto armazenado que esteja ausente, temporariamente ilegível ou maior que 1000000 bytes também responde a um 404 vazio.

O Content-Type da resposta é o tipo de mídia registrado quando a visualização foi gravada e o padrão é image/jpeg quando nenhum foi registrado. Fazer upload de visualização de transmissão aceita um tipo de mídia declarado nomeando JPEG sem inspecionar os bytes, e o caminho do recurso (capability path) de Criar URL de upload de visualização de transmissão não inspeciona nada. Portanto, um cliente NÃO DEVE tratar este cabeçalho como prova do formato da carga útil e DEVE decodificar de forma defensiva.

60 solicitações por 10 segundos para cada usuário autenticado e chave de transmissão, no bucket channel:stream:preview:get::stream_key.

POST/v1/streams/{stream_key}/preview

Substitui a visualização da transmissão por um JPEG enviado inline como base64 e retorna 204 com um corpo vazio. O chamador deve satisfazer o limite de acesso de mutação.

Para fazer upload dos bytes da imagem com uma solicitação PUT separada, use Criar URL de upload de visualização de transmissão.

CampoTipoDescrição
stream_keystringChave de transmissão que recebe a visualização, de 1 a 256 caracteres
CampoTipoDescrição
channel_id1snowflakeO ID do canal em que a transmissão está ativa
thumbnail2base64 stringO JPEG codificado em base64 de 1 a 2000000 de caracteres
content_type?3stringO tipo de mídia declarado de 1 a 64 caracteres

1 O canal que a rota resolve e verifica a permissão. Um valor que não seja o segmento de canal da chave de transmissão retorna 400 STREAM_KEY_CHANNEL_MISMATCH 2 Os bytes decodificados são no máximo 1000000. O Decoding Chat apara (trims) o valor antes de verificar o seu comprimento 3 Um valor contendo jpeg ou jpg em qualquer maiúscula/minúscula é aceito sem inspecionar os bytes. Qualquer outro valor, e um campo ausente, são aceitos apenas quando os bytes decodificados começam com FF D8 e terminam com FF D9

O Decoding Chat armazena o content_type aceito exatamente como recebido (verbatim) e o retorna de Obter visualização da transmissão. Quando o campo está ausente, o tipo de mídia armazenado é image/jpeg.

Um thumbnail que não seja um base64 canônico retorna 400 INVALID_STREAM_THUMBNAIL_PAYLOAD. O Decoding Chat recodifica os bytes decodificados e rejeita o valor quando o resultado não for o que o cliente enviou. O limite de 2000000 de caracteres admite 1500000 bytes decodificados, então um JPEG superdimensionado atinge a verificação de bytes e retorna FILE_SIZE_TOO_LARGE. A verificação de formato ocorre antes da verificação de tamanho. Uma carga útil grande demais que não é um JPEG retorna PREVIEW_MUST_BE_JPEG.

StatusCorpoCondição
204vazioA visualização foi aceita
400resposta de erroA chave de transmissão está malformada e a solicitação retorna INVALID_STREAM_KEY_FORMAT
400resposta de erroO escopo da chave não concorda com o canal resolvido e a solicitação retorna STREAM_KEY_SCOPE_MISMATCH
400resposta de erroO canal no corpo discorda da chave e a solicitação retorna STREAM_KEY_CHANNEL_MISMATCH
400resposta de erroO canal resolvido não é um canal de voz de guilda ou um canal privado e a solicitação retorna INVALID_CHANNEL_TYPE
400resposta de erroA carga útil não é um base64 canônico e a solicitação retorna INVALID_STREAM_THUMBNAIL_PAYLOAD
400resposta de erroA carga útil não é um JPEG e a solicitação retorna PREVIEW_MUST_BE_JPEG
400resposta de erroEla excede 1000000 de bytes e a solicitação retorna FILE_SIZE_TOO_LARGE
403resposta de erroO chamador não tem estado de voz correspondente ou tem estado de associação de guilda não resolvível, cada um retornando ACCESS_DENIED
403resposta de erroO chamador não possui VIEW_CHANNEL, CONNECT ou STREAM e a solicitação retorna MISSING_PERMISSIONS
403resposta de erroA restrição de idade resolvida de um canal de guilda não é satisfeita e a solicitação retorna NSFW_CONTENT_AGE_RESTRICTED
404resposta de erroO canal nomeado no corpo channel_id não existe, ou o chamador não é um destinatário desse canal privado, cada um retornando UNKNOWN_CHANNEL, ou a guilda proprietária do canal não existe e a solicitação retorna UNKNOWN_GUILD

Os bytes decodificados substituem qualquer visualização que a chave de transmissão já tivesse, e os metadados de visualização expiram um dia após a gravação. O Decoding Chat não emite nenhum Dispatch de Gateway, portanto, um visualizador observa a nova imagem em sua próxima leitura de Obter visualização da transmissão.

Um 204 não garante que a nova visualização seja legível. Uma falha temporária pode deixar a imagem anterior, tipo de conteúdo ou expiração no lugar, ou não deixar nenhuma visualização legível. Os publicadores devem continuar a fazer o upload no seu intervalo normal.

20 solicitações por 10 segundos para cada usuário autenticado e chave de transmissão, no bucket channel:stream:preview:post::stream_key.

Criar URL de upload de visualização de transmissão

Seção intitulada “Criar URL de upload de visualização de transmissão”
POST/v1/streams/{stream_key}/preview/upload-url

Retorna um objeto de upload de visualização da transmissão garantindo um upload PUT limitado da visualização em JPEG. O chamador deve satisfazer o limite de acesso de mutação.

CampoTipoDescrição
stream_keystringChave de transmissão que recebe a visualização, de 1 a 256 caracteres
CampoTipoDescrição
channel_id1snowflakeO ID do canal onde a transmissão está ativa
content_type?2stringO tipo de mídia declarado de 1 a 64 caracteres

1 O canal que a rota resolve e verifica permissão. Um valor que não é o segmento do canal da chave de transmissão retorna 400 STREAM_KEY_CHANNEL_MISMATCH 2 Somente um valor contendo jpeg ou jpg em qualquer maiúscula/minúscula é aceito; um campo ausente significa image/jpeg e qualquer outro valor retorna 400 PREVIEW_MUST_BE_JPEG

StatusCorpoCondição
200objeto de upload de visualização da transmissãoA capacidade de upload foi emitida
400resposta de erroA chave da transmissão é malformada e a solicitação retorna INVALID_STREAM_KEY_FORMAT
400resposta de erroO escopo da chave não está de acordo com o canal resolvido e a solicitação retorna STREAM_KEY_SCOPE_MISMATCH
400resposta de erroO canal no corpo discorda da chave e a solicitação retorna STREAM_KEY_CHANNEL_MISMATCH
400resposta de erroO canal resolvido não é um canal de voz de guilda ou um canal privado e a solicitação retorna INVALID_CHANNEL_TYPE
400resposta de erroO tipo de mídia declarado não é JPEG e a solicitação retorna PREVIEW_MUST_BE_JPEG
403resposta de erroO chamador não possui estado de voz correspondente ou tem um estado de associação de guilda não resolvível, cada um retornando ACCESS_DENIED
403resposta de erroO chamador não possui VIEW_CHANNEL, CONNECT ou STREAM e a solicitação retorna MISSING_PERMISSIONS
403resposta de erroA restrição de idade resolvida de um canal de guilda não é satisfeita e a solicitação retorna NSFW_CONTENT_AGE_RESTRICTED
404resposta de erroO canal nomeado no corpo channel_id não existe, ou o chamador não é um destinatário desse canal privado, cada um retornando UNKNOWN_CHANNEL, ou a guilda proprietária do canal não existe e a solicitação retorna UNKNOWN_GUILD

Não há chamada de conclusão separada. Após o PUT ser bem-sucedido, Obter visualização da transmissão retorna a imagem enviada. Até lá, ele retorna um 404 vazio ou a imagem anterior.

Um cliente DEVE enviar o content_type retornado com o PUT e NÃO DEVE exceder max_bytes. Os metadados de visualização expiram um dia após esta chamada, então uma capacidade usada mais tarde do que isso grava um objeto que nenhuma leitura pode encontrar. O Decoding Chat não emite Gateway Dispatch.

20 solicitações por 10 segundos para cada usuário autenticado e chave de transmissão, no bucket channel:stream:preview:upload_url::stream_key.

DELETE/v1/streams/{stream_key}/preview

Exclui a visualização armazenada para uma transmissão e retorna 204 com um corpo vazio. Excluir uma visualização ausente também retorna 204. O chamador deve satisfazer o limite de acesso de mutação.

CampoTipoDescrição
stream_keystringChave de transmissão cuja visualização é excluída, de 1 a 256 caracteres
StatusCorpoCondição
204vazioA visualização foi excluída ou nenhuma estava armazenada
400resposta de erroA chave da transmissão é malformada e a solicitação retorna INVALID_STREAM_KEY_FORMAT
400resposta de erroSeu escopo não está de acordo com o canal resolvido e a solicitação retorna STREAM_KEY_SCOPE_MISMATCH
400resposta de erroSeu segmento de canal não é a forma canônica do ID do canal resolvido e a solicitação retorna STREAM_KEY_CHANNEL_MISMATCH
400resposta de erroO canal resolvido não é um canal de voz de guilda ou um canal privado e a solicitação retorna INVALID_CHANNEL_TYPE
403resposta de erroO chamador não possui estado de voz correspondente ou possui um estado de associação de guilda não resolvível, cada um retornando ACCESS_DENIED
403resposta de erroO chamador não possui VIEW_CHANNEL, CONNECT ou STREAM e a solicitação retorna MISSING_PERMISSIONS
403resposta de erroA restrição de idade resolvida de um canal de guilda não é satisfeita e a solicitação retorna NSFW_CONTENT_AGE_RESTRICTED
404resposta de erroO canal nomeado pela chave da transmissão não existe, ou o chamador não é um destinatário do canal privado, cada um retornando UNKNOWN_CHANNEL, ou a guilda proprietária do canal não existe e a solicitação retorna UNKNOWN_GUILD

A visualização deixa de ser legível. Nenhum Gateway Dispatch é emitido, portanto, os visualizadores observam a remoção em sua próxima solicitação de Obter visualização da transmissão.

20 solicitações por 10 segundos para cada usuário autenticado e chave da transmissão, no bucket channel:stream:preview:delete::stream_key.