Pular para o conteúdo
Decoding Chat API

Mensagens

Uma mensagem é uma publicação em um canal, juntamente com o texto, anexos, embeds, stickers e reações armazenados nela. Metadados e membros do canal são definidos pelo recurso de Canais.

Um canal que contém texto é um tipo de canal que armazena mensagens, o que abrange todos os tipos, exceto categoria de servidor e canal de link de servidor. O limite de histórico de mensagens é um horário armazenado no servidor, e um membro sem READ_MESSAGE_HISTORY não lê nada criado antes dele.

O Decoding Chat resolve o canal antes de aplicar qualquer autorização por rota. Um canal privado retorna 404 UNKNOWN_CHANNEL para um chamador que não é destinatário. Um canal de servidor retorna 403 MISSING_PERMISSIONS para um não-membro e para um membro sem VIEW_CHANNEL. Um servidor que o operador marcou como indisponível retorna 403 MISSING_ACCESS antes de a rota ser executada. Um servidor que nenhum processo do Gateway atende retorna 404 UNKNOWN_GUILD, ou 403 ACCESS_DENIED quando seu registro armazenado permanece.

As rotas de leitura, criação, modificação e exclusão de mensagens, Excluir mensagens em massa, Excluir as próprias mensagens em massa e Listar mensagens fixadas também impõem verificação de idade em um canal de servidor com restrição de idade. Um canal de servidor tem restrição de idade quando sua própria configuração assim determinar. Um canal sem configuração própria usa a configuração da sua categoria pai e, depois, do servidor. Elas retornam 403 NSFW_CONTENT_AGE_RESTRICTED até que a conta a satisfaça. As rotas de anexos, fixados, reações e Indicar digitação resolvem o canal sem essa verificação.

Limpar estado de leitura do canal e Confirmar mensagem não resolvem nenhum canal. Confirmar mensagens fixadas lê o canal sem verificar o acesso do chamador. Nenhuma dessas três verifica permissões.

Um objeto de mensagem é a forma armazenada completa de uma publicação em um canal.

CampoTipoDescrição
idsnowflakeO ID da mensagem
channel_idsnowflakeO ID do canal
author1usuário parcial objectO usuário creditado pela mensagem
webhook_id?snowflakeID do webhook de origem, presente apenas para mensagem de autoria de webhook
typeintegerTipo de mensagem
flagsintegerFlags de mensagem
contentstringO texto da mensagem, vazio quando a mensagem possui apenas mídia
timestampISO8601 timestampHorário de criação derivado do snowflake da mensagem
edited_timestamp?ISO8601 timestampHorário da edição mais recente, ou null quando a mensagem nunca foi editada
pinnedbooleanSe a mensagem está fixada
mention_everyonebooleanSe a mensagem menciona everyone
tts2booleanSe a mensagem solicitou conversão de texto em voz (text-to-speech)
mentions3array[usuário parcial object]Os usuários que a mensagem menciona ativamente
mention_rolesarray[snowflake]Os IDs dos cargos que a mensagem menciona ativamente
mention_channels?array[menção de canal object]Os canais que o conteúdo da mensagem vincula por ID
users?3array[usuário parcial object]Usuários referenciados por texto não notificável de conteúdo, embed e snapshot
embeds4array[embed object]As prévias resolvidas ou fornecidas para a mensagem
attachments5array[anexo de mensagem object]Os arquivos anexados à mensagem
stickersarray[item de sticker object]Os stickers enviados com a mensagem
nsfw_emojis?array[snowflake]IDs dos emojis personalizados na mensagem classificados como explícitos
reactions?array[reação object]Resumos de reações
message_reference?referência de mensagem objectReferência de resposta ou encaminhamento
message_snapshots?array[snapshot de mensagem object]As cópias imutáveis capturadas para um encaminhamento
nonce?6stringNonce da mensagem fornecido pelo chamador, ecoado de volta ao remetente como uma string de 1 a 32 caracteres
call?chamada de mensagem objectEstado de chamada anexado a uma mensagem de chamada
referenced_message?7?mensagem objectMensagem referenciada resolvida sem o campo referenced_message aninhado

1 Construído para uma mensagem de autoria de webhook e para um ID de autor armazenado que não resolve mais

2 Ecoado da requisição de criação, portanto uma leitura de mensagem por qualquer outra operação sempre reporta false

3 Um usuário que se tornou menção ativa aparece em mentions, e um usuário referenciado apenas por texto renderizado aparece em users, portanto os arrays nunca contêm o mesmo usuário

4 Vazio enquanto SUPPRESS_EMBEDS estiver definido na mensagem

5 Um anexo que uma entrada de rich embed nomeia com uma URL attachment:// em image ou thumbnail é excluído deste array. A URL do anexo fica no objeto de mídia daquele embed em seu lugar

6 Ecoado apenas na resposta de criação de mensagem e em seu Dispatch de Gateway de Message Create correspondente, e nunca armazenado na mensagem

7 A chave está ausente quando a mensagem não tem referência de resposta, presente e null quando o alvo da resposta não resolve mais, e presente com a mensagem quando resolve. Um cliente deve diferenciar ausente de null pela presença da chave

Uma mensagem de autoria de webhook não possui usuário autor armazenado. O Decoding Chat constrói seu autor a partir do webhook, com o ID do webhook como id, o nome do webhook armazenado como username, o discriminador 0000, o hash do avatar do webhook armazenado como avatar e bot true. Uma mensagem cujo ID de autor armazenado não resolve mais para uma conta é servida com um indicador de posição de usuário excluído. Esse indicador possui esse ID, o discriminador 0000 e nenhum avatar.

mentions, mention_roles, embeds, attachments e stickers estão sempre presentes e podem ser vazios. Um campo marcado com ? acima é omitido do objeto quando não possui valor. referenced_message é o único campo opcional que também pode estar presente e null. Uma mensagem cujo usuário autor e webhook estejam ambos ausentes é omitida de todas as leituras.

{
"id": "1501320000000000000",
"channel_id": "1501314428688998182",
"author": {
"id": "1501314428688990000",
"username": "ada",
"discriminator": "0001",
"avatar": "a1b2c3d4e5f60718293a4b5c6d7e8f90"
},
"type": 0,
"flags": 0,
"content": "shipping it",
"timestamp": "2026-08-31T09:14:02.000Z",
"edited_timestamp": null,
"pinned": false,
"mention_everyone": false,
"tts": false,
"mentions": [],
"mention_roles": [],
"embeds": [],
"attachments": [],
"stickers": []
}
ValorNomeDescrição
0DEFAULT1 2Mensagem comum
1RECIPIENT_ADDMensagem de sistema de adição de destinatário em mensagem direta em grupo
2RECIPIENT_REMOVEMensagem de sistema de remoção de destinatário em mensagem direta em grupo
3CALLMensagem de sistema de chamada privada
4CHANNEL_NAME_CHANGEMensagem de sistema de alteração de nome em mensagem direta em grupo
5CHANNEL_ICON_CHANGEMensagem de sistema de alteração de ícone em mensagem direta em grupo
6CHANNEL_PINNED_MESSAGE2Mensagem de sistema de fixação em canal
7USER_JOIN2Mensagem de sistema de entrada de usuário
19REPLY1 2Mensagem com uma referência de resposta

1 Apenas DEFAULT e REPLY podem ser modificadas, fixadas, desfixadas ou usadas como alvo de uma referência de resposta. Qualquer outro tipo rejeita modificação, fixação e desfixação com 400 CANNOT_MODIFY_SYSTEM_WEBHOOK, e rejeita resposta com o código de campo CANNOT_REPLY_TO_SYSTEM_MESSAGE

2 Apenas DEFAULT, CHANNEL_PINNED_MESSAGE, USER_JOIN e REPLY podem ser excluídas, e qualquer outro tipo rejeita exclusão com 403 MISSING_PERMISSIONS

ValorNomeDescrição
1 << 2SUPPRESS_EMBEDS1Suprimir a renderização de embeds
1 << 12SUPPRESS_NOTIFICATIONSNão gerar notificações normais de menção
1 << 13VOICE_MESSAGE2Mensagem possui um anexo de gravação de voz

1 O único flag que um moderador de servidor pode alterar em uma mensagem da qual não seja autor

2 Uma mensagem com este flag possui as restrições de mensagem de voz listadas em Criar mensagem

Estes bits são também o conjunto completo enviável. A criação limita o valor fornecido a eles, e a modificação substitui apenas eles, deixando todos os outros bits armazenados intocados. Um bit fora desta tabela é descartado, e a requisição continua sendo bem-sucedida.

Um anexo é um arquivo armazenado em uma mensagem e servido pela entrega de mídia.

CampoTipoDescrição
idsnowflakeO ID do anexo
filenamestringO nome de arquivo armazenado com o anexo
title?stringTítulo de exibição, ou null quando nenhum estiver armazenado
description?stringTexto alternativo ou descrição, ou null quando nenhum estiver armazenado
content_type1stringO tipo de mídia detectado para o anexo
content_hash?stringO hash dos bytes armazenados do anexo, ou null quando nunca foram gerados
sizeintegerO tamanho armazenado do anexo em bytes
url2?stringURL pública assinada do anexo, ou null quando o anexo expirar
proxy_url2?stringURL assinada do Media Proxy, ou null quando o anexo expirar
width?3integerLargura em pixels para mídias visuais
height?3integerAltura em pixels para mídias visuais
placeholder?stringIndicador de posição de mídia codificado
flagsintegerFlags de anexo
nsfw?booleanSe a inspeção de mídia marcou o anexo como explícito
duration?integerDuração de áudio ou vídeo em segundos
waveform?stringForma de onda de voz codificada em Base64
expires_at4?ISO8601 timestampHorário de expiração da URL do anexo, ou null quando não houver prazo de expiração registrado
expired?5booleanSe o anexo está expirado

1 Sempre presente. Ele utiliza como alternativa um tipo inferido pelo nome do arquivo armazenado quando não houver tipo de mídia registrado, e application/octet-stream quando o nome não permitir inferência

2 Ambos os campos são a mesma URL de endpoint de mídia com a mesma assinatura, e ambos se tornam null juntos quando o anexo expira

3 Omitido para tipos de mídia de áudio mesmo que haja dimensão armazenada

4 A chave está sempre presente. Seu valor é o prazo de expiração registrado, ou null quando não houver. É independente do tempo ex de uma URL assinada

5 Presente e true apenas quando o anexo já tiver expirado, portanto uma chave ausente deve ser lida como false

Um novo anexo inicia com o tipo de mídia derivado do nome de arquivo informado quando seu upload foi solicitado. Para um anexo pré-enviado, esse é o filename de seu item de requisição de upload de anexo, que pode diferir do filename que a mensagem envia. Quando o tipo inicial não for uma imagem, vídeo ou áudio suportado, o Decoding Chat verifica os primeiros 8 KiB do arquivo. Para imagens, vídeos ou áudios que o Media Proxy puder ler, content_type passa a ser o tipo detectado de seus bytes. Quando o tipo inicial não for mídia, arquivos SVG mantêm seu tipo. O mesmo vale para arquivos que o Decoding Chat não conseguir verificar ou o Media Proxy não puder ler.

Uma instância configurada com segredos de URL de anexo assina url e proxy_url. O Decoding Chat adiciona os parâmetros de assinatura ao caminho do anexo, antes de qualquer outro parâmetro. Uma instância sem esses segredos retorna a URL sem nenhum parâmetro.

CampoTipoDescrição
exstringO horário Unix em segundos em que a URL expira, como 8 dígitos hexadecimais em minúsculas, ou 0 em URL de pacote de dados
isstringO horário Unix em segundos em que a URL foi emitida, como 8 dígitos hexadecimais em minúsculas
hmstringA assinatura sobre ex, is, uc e o caminho do anexo, como 64 dígitos hexadecimais em minúsculas
ucstringPresente apenas em URL de pacote de dados, onde o valor é sempre dp

Uma URL comum possui ex, is e hm, e nenhum uc. Ela é válida por 24 horas a partir de is. is começa no horário de criação do anexo e avança em etapas de 12 horas, de modo que uma URL retornada pelo Decoding Chat possui mais de 12 e no máximo 24 horas restantes. O Decoding Chat assina a URL cada vez que retorna o anexo, portanto uma leitura posterior da mensagem retorna uma URL para a etapa atual. Atualizar URLs de anexos assina uma URL novamente sem ler a mensagem.

Um cliente DEVE manter ex, is, hm e uc exatamente como emitidos. Ele PODE adicionar qualquer outro parâmetro de consulta, como uma transformação, pois a assinatura não cobre outros parâmetros. Um cliente DEVE atualizar uma URL cujo ex esteja ausente ou a menos de uma hora do vencimento. Quando o operador impõe assinaturas, uma leitura com assinatura ausente, alterada ou expirada retorna 404 do Media Proxy, como URLs assinadas de anexos define.

O Decoding Chat nunca reescreve o content da mensagem nem o texto do embed. Uma URL de anexo colada em qualquer um dos dois mantém os parâmetros com os quais foi enviada, e para de funcionar quando seu próprio ex passa.

Um arquivo de coleta de dados registra uma URL de pacote de dados para cada anexo em vez de uma comum. Ela possui uc=dp e seu ex é o único caractere 0:

?ex=0&is={issued}&hm={signature}&uc=dp

Uma URL de pacote de dados não expira. O Media Proxy verifica sua assinatura contra todos os segredos configurados e pula a verificação de expiração, lendo seu objeto enquanto o segredo que a assinou permanecer na lista de segredos da instância. Remover esse segredo é a única coisa que a encerra, cancelando todas as URLs de pacotes de dados assinadas por ele de uma só vez.

is é definido como em uma URL comum, e a assinatura cobre uc, portanto uma URL comum rotulada como uc=dp não é verificada, nem uma URL de pacote de dados com uc removido.

Um cliente trata uma URL de pacote de dados como não expirável e não a atualiza antes do uso. Uma leitura recusada ainda aciona a mesma atualização forçada de qualquer outra URL de anexo, retornando uma URL comum.

{
"id": "1501320000000000001",
"filename": "diagram.png",
"title": null,
"description": "Sequence diagram",
"content_type": "image/png",
"content_hash": "9f86d081884c7d659a2feaa0c55ad015",
"size": 18422,
"url": "https://media.example.com/attachments/1501314428688998182/1501320000000000001/diagram.png?ex=69fba4b5&is=69fa5335&hm=5586be3ae70411fe6582431649e2f28abc6c201e4f12a4f43a3256b72b90d3de",
"proxy_url": "https://media.example.com/attachments/1501314428688998182/1501320000000000001/diagram.png?ex=69fba4b5&is=69fa5335&hm=5586be3ae70411fe6582431649e2f28abc6c201e4f12a4f43a3256b72b90d3de",
"width": 1280,
"height": 720,
"flags": 0,
"expires_at": null
}
ValorNomeDescrição
1 << 3IS_SPOILERAnexo é apresentado como spoiler
1 << 4CONTAINS_EXPLICIT_MEDIAAnexo contém mídia explícita
1 << 5IS_ANIMATEDAnexo é animado

Um emoji é um emoji personalizado de servidor identificado por ID ou um emoji Unicode padrão.

CampoTipoDescrição
id?snowflakeO ID do emoji personalizado, ausente para emoji Unicode
name1stringNome do emoji ou valor Unicode
animated?booleanSe um emoji personalizado é animado

1 Armazena o nome do emoji no servidor para emoji personalizado e a sequência Unicode literal para emoji padrão

Um objeto de reação resume um grupo de emojis em uma mensagem. O Decoding Chat possui apenas reações comuns.

CampoTipoDescrição
emojiemoji objectO emoji que este grupo conta
count1integerO número de usuários que adicionaram este emoji
me?2booleanSe o usuário autenticado possui esta reação

1 Limitado pelo limite max_users_per_message_reaction resolvido, com padrão de 1.000.000 de usuários para cada grupo

2 Presente e true apenas quando o usuário autenticado possui esta reação, e omitido totalmente caso contrário, devendo a chave ausente ser lida como false

Cada mensagem possui no máximo o limite max_reactions_per_message resolvido de grupos distintos, que por padrão é 30. Os grupos são ordenados pelo horário da reação mais antiga de cada grupo, depois pelo nome do emoji e depois pelo ID do emoji.

{
"emoji": {
"id": "1501314428688991234",
"name": "party_parrot",
"animated": true
},
"count": 7,
"me": true
}

Uma referência de mensagem nomeia a mensagem para a qual uma resposta aponta ou da qual um encaminhamento foi retirado.

CampoTipoDescrição
channel_idsnowflakeO ID do canal referenciado
message_idsnowflakeO ID da mensagem referenciada
guild_id?snowflakeO ID do servidor referenciado, presente apenas para mensagem de servidor
typeintegerTipo de referência de mensagem
ValorNomeDescrição
0DEFAULT1Referência de resposta
1FORWARD2Referência de encaminhamento representada por snapshots

1 O padrão quando a requisição de criação de mensagem fornece message_reference sem um type

2 Requer channel_id na requisição de criação de mensagem, e a mensagem criada possui message_snapshots e nenhuma referenced_message

Uma entrada de referência de mensagem nomeia a mensagem de origem à qual uma requisição de criação responde ou encaminha.

CampoTipoDescrição
message_idsnowflakeO ID da mensagem referenciada
channel_id?1snowflakeO ID do canal referenciado, obrigatório para referência de encaminhamento
guild_id?snowflakeO ID do servidor referenciado quando aplicável
type?integerTipo de referência de mensagem, com padrão DEFAULT
attachment_ids?2array[snowflake]No máximo 10 IDs de anexos selecionados para encaminhamento
embed_indices?2array[integer]No máximo 10 índices de embeds selecionados não negativos para encaminhamento

1 Uma referência FORWARD sem ele falha na validação, e uma referência de resposta assume por padrão o canal para onde a nova mensagem está sendo enviada

2 Seleciona um subconjunto de mídia da mensagem de origem para tirar snapshot; omitir ambos gera snapshot de tudo na mensagem de origem

Cada snapshot é uma cópia imutável direta de uma mensagem encaminhada. Ele não possui ID de mensagem, ID de canal nem autor, de modo que um cliente não pode rastrear um encaminhamento de volta à origem através deste objeto.

CampoTipoDescrição
content?stringTexto em snapshot
timestampISO8601 timestampHorário de criação original
edited_timestamp?ISO8601 timestampHorário de edição original, omitido quando a mensagem original nunca foi editada
mentions?1array[snowflake]IDs de usuários mencionados em snapshot
mention_roles?array[snowflake]IDs de cargos mencionados em snapshot
mention_channels?array[menção de canal object]Canais mencionados em snapshot
embeds?array[embed object]Embeds em snapshot
attachments?2array[anexo de mensagem object]Anexos em snapshot
stickers?array[item de sticker object]Stickers em snapshot
typeintegerTipo de mensagem original
flagsintegerFlags de mensagem originais

1 Um cliente resolve cada ID em snapshot contra o array users da mensagem pai

2 Anexos em snapshot são objetos armazenados independentes, portanto excluir a mensagem de origem os mantém intocados

Todos os campos opcionais acima são omitidos inteiramente.

Uma chamada de mensagem possui os participantes e o horário de encerramento da chamada que uma mensagem CALL registra.

CampoTipoDescrição
participantsarray[snowflake]IDs dos usuários participantes atuais
ended_timestamp?ISO8601 timestampHorário de encerramento da chamada, ou null enquanto a chamada continuar ativa

Uma menção de canal nomeia um canal vinculado por ID no conteúdo da mensagem.

CampoTipoDescrição
idsnowflakeO ID do canal mencionado
namestringNome do canal mencionado
typeintegerTipo de canal

Cada item de sticker é o registro reduzido de sticker em uma mensagem.

CampoTipoDescrição
idsnowflakeO ID do sticker
namestringNome do sticker
animatedbooleanSe o sticker é animado
nsfw?booleanSe o sticker está classificado como explícito

Um embed é uma prévia renderizada em uma mensagem, resolvida pelo desdobrador de links (unfurler) ou fornecida como entrada rich.

CampoTipoDescrição
typestringTipo de embed
title?stringTítulo do embed
description?stringDescrição do embed
url?stringURL de destino do embed
timestamp?ISO8601 timestampHorário do embed
color?integerCor do embed
author?autor do embed objectAutor do embed
provider?1provedor do embed objectProvedor externo
thumbnail?mídia de embed objectImagem em miniatura
image?mídia de embed objectImagem principal
video?1mídia de embed objectMídia de vídeo
audio?1mídia de embed objectMídia de áudio
footer?rodapé de embed objectRodapé do embed
fields?array[campo de embed object]Campos do embed
nsfw?booleanSe o embed contém mídia explícita
html?1stringMarcação oEmbed higienizada para um renderizador especializado confiável
html_width?1integerLargura em pixels preferida da marcação oEmbed higienizada
html_height?1integerAltura em pixels preferida da marcação oEmbed higienizada
children?1array[embed object]No máximo um embed aninhado gerado pelo unfurler, que não possui o campo children

1 Produzido apenas pelo unfurler ao resolver um link, e nunca aceito de uma entrada de rich embed

Todos os campos opcionais acima são omitidos inteiramente.

{
"type": "rich",
"title": "Release 2.4.0",
"description": "Voice reconnects are now instant.",
"url": "https://example.com/releases/2.4.0",
"color": 5793266,
"footer": {"text": "example.com"},
"fields": [{"name": "Platform", "value": "Desktop", "inline": true}]
}
ValorDescrição
richUm embed construído pelo próprio unfurler e o tipo de toda entrada de rich embed aceita
linkUma prévia de link genérica com metadados de página sem mídia resolvida
imageUma prévia de imagem resolvida a partir de uma URL vinculada
videoUma prévia de vídeo resolvida a partir de uma URL vinculada
audioUma prévia de áudio resolvida a partir de uma URL vinculada
gifvUma prévia de vídeo em loop animado
articleUma prévia de artigo ou página de enciclopédia
blueskyUma prévia de publicação do Bluesky
CampoTipoDescrição
namestringNome do autor
url?stringLink do autor
icon_url?stringURL do ícone do autor
proxy_icon_url?stringURL de proxy do ícone do autor
CampoTipoDescrição
urlstringURL da mídia
proxy_url1stringURL do Media Proxy
width?integerLargura em pixels
height?integerAltura em pixels
duration?integerDuração em segundos
description?stringDescrição da mídia
content_type?stringTipo de mídia
content_hash?stringHash do conteúdo
placeholder?stringIndicador de posição de mídia codificado
flags?integerFlags de mídia usando CONTAINS_EXPLICIT_MEDIA e IS_ANIMATED de flags de anexo

1 Sempre derivado de url, portanto todo objeto de mídia serializado o possui

Quando url for uma URL de anexo desta instância, o Decoding Chat assina ambos os campos, de modo que url e proxy_url são a mesma URL com a mesma assinatura nova. Um rich embed pode nomear essa URL com ou sem ex, is, hm e uc. O Decoding Chat os remove antes de armazenar a URL e assina ambos os campos novamente a cada retorno do embed.

O Decoding Chat assina qualquer outro campo de embed que possa conter uma URL de anexo desta instância da mesma forma. Isso abrange url no próprio embed, url, icon_url e proxy_icon_url em autor de embed, icon_url e proxy_icon_url em rodapé de embed, e url em provedor de embed. Uma URL de ícone e seu par de proxy passam a ser a mesma URL assinada. Um campo cuja URL não seja de anexo desta instância é retornado como foi armazenado, e o campo de proxy de uma URL externa torna-se o caminho de mídia externa assinada em seu lugar.

CampoTipoDescrição
textstringTexto do rodapé
icon_url?stringURL do ícone do rodapé
proxy_icon_url?stringURL de proxy do ícone do rodapé
CampoTipoDescrição
namestringNome do campo
valuestringValor do campo
inlinebooleanSe o campo pode renderizar em linha

Apenas um embed que o unfurler constrói a partir de um link possui provedor. Uma entrada de rich embed não pode definir um.

CampoTipoDescrição
namestringNome do provedor
url?stringURL do provedor

Um objeto de menções permitidas seleciona quais menções escritas no texto da mensagem tornam-se menções ativas, ou seja, as que notificam um usuário ou cargo.

CampoTipoDescrição
parse?1 2array[string]Categorias de menção de valores de análise de menções permitidas
users?2array[snowflake]No máximo 100 IDs de usuários autorizados a se tornarem menções ativas
roles?2array[snowflake]No máximo 100 IDs de cargos autorizados a se tornarem menções ativas
replied_user?3booleanSe uma resposta menciona o autor da mensagem referenciada (padrão true)

1 Padrão para todas as categorias quando o objeto estiver ausente, para conjunto vazio quando users ou roles for fornecido sem ele, e para conjunto vazio quando o objeto estiver presente sem nenhum campo

2 Um parse não vazio combinado com users ou roles não vazios é rejeitado com o código de campo PARSE_AND_USERS_OR_ROLES_CANNOT_BE_USED_TOGETHER

3 Ignorado em mensagem direta individual e em notas pessoais, e ignorado quando a mensagem referenciada tiver o mesmo autor da nova mensagem

mention_everyone é forçado para false sempre que o chamador não possuir MENTION_EVERYONE, sem falhar a requisição.

ValorDescrição
usersAnalisar menções de usuários
rolesAnalisar menções de cargos
everyoneAnalisar menções de @everyone e @here

Uma nova mensagem pode se referir a um anexo enviado anteriormente ou anexar um arquivo multipart direto. Uma mensagem editada pode manter um anexo existente. IDs de anexos em uma requisição multipart direta identificam o campo files[N] correspondente baseado em zero.

CampoTipoDescrição
id1integer | integer stringPosição do anexo
filenamestringNome de arquivo do anexo
upload_filename2stringChave de upload opaca retornada por Solicitar URLs de upload de anexos
file_size1integerContagem de bytes enviados
content_typestringTipo de mídia de 1 a 255 caracteres
title??stringTítulo de exibição (1-1.024 caracteres)
description??stringDescrição (1-4.096 caracteres)
duration?3?integerDuração da mídia de voz em segundos (0-2.147.483.647)
waveform?3?stringForma de onda em Base64 de 1 a 4.096 caracteres
flags?integerFlags de anexo, com padrão 0

1 Aceito como número JSON ou como string decimal

2 A presença desta chave seleciona esta variante em vez da variante de metadados multipart diretos

3 Ambos são obrigatórios quando a mensagem possui o flag VOICE_MESSAGE. Um waveform em um anexo cujo tipo de mídia resolvido não seja audio/* falha com o código de campo VOICE_MESSAGES_ATTACHMENT_MUST_BE_AUDIO

Apenas IS_SPOILER e CONTAINS_EXPLICIT_MEDIA permanecem de um valor flags fornecido pelo chamador. IS_ANIMATED é definido exclusivamente pela inspeção de mídia.

CampoTipoDescrição
id1integer | integer stringÍndice baseado em zero files[N]
filenamestringNome de arquivo de exibição
content_type?stringTipo de mídia de 1 a 255 caracteres
title??stringTítulo de exibição (1-1.024 caracteres)
description??stringDescrição (1-4.096 caracteres)
flags?integerFlags de anexo, com padrão 0
duration?2?integerDuração da mídia de voz em segundos (0-2.147.483.647)
waveform?2?stringForma de onda em Base64 de 1 a 4.096 caracteres

1 Uma entrada cujo id não corresponda a nenhum índice de arquivo fornecido e que possua filename falha com o código de campo NO_FILE_FOR_ATTACHMENT_METADATA. Uma entrada cujo id não corresponda a nenhum arquivo fornecido e que não possua filename é lida como referência de anexo existente

2 Ambos são obrigatórios quando a mensagem possui o flag VOICE_MESSAGE

O Decoding Chat descarta chaves fora da tabela acima e aceita o restante da entrada.

CampoTipoDescrição
idsnowflake | integerID de anexo existente ou posição de anexo
title??stringTítulo de exibição de substituição (1-1.024 caracteres)
description??stringDescrição de substituição (1-4.096 caracteres)
flags?1integerFlags de anexo, aceitos e descartados
filename?1 2stringNome de arquivo de exibição, aceito e descartado
duration?1 2?integerDuração em segundos (0-2.147.483.647), aceito e descartado
waveform?1 2?stringForma de onda em Base64 de 1 a 4.096 caracteres, aceito e descartado

1 Um anexo mantido é reconstruído a partir de seu registro armazenado, e apenas title e description são reescritos nele

2 Rejeitado com o código de campo CANNOT_EDIT_ATTACHMENT_METADATA quando o chamador for um moderador de servidor editando uma mensagem da qual não seja autor, pois esse chamador pode fornecer apenas id, title, description e flags

Uma entrada de rich embed é um embed fornecido por um cliente em uma mensagem, e o Decoding Chat sempre o armazena com o tipo de embed rich. O número de embeds em uma mensagem é limitado pelo limite max_embeds_per_message resolvido, que por padrão é 10. Exceder o limite falha com o código de campo TOO_MANY_EMBEDS.

CampoTipoDescrição
url??stringURL de destino do embed (1-2.048 caracteres)
title??stringTítulo com no máximo 256 caracteres
color??integerCor do embed
timestamp??ISO8601 timestampHorário do embed
description??stringDescrição (1-4.096 caracteres, string vazia é tratada como ausente)
author?1?entrada de autor de embed objectMetadados do autor
image?1?entrada de mídia de embed objectMetadados da imagem principal
thumbnail?1?entrada de mídia de embed objectMetadados da miniatura
footer?1?entrada de rodapé de embed objectMetadados do rodapé
fields??array[entrada de campo de embed object]No máximo 25 campos de embed

1 Um objeto aninhado que omitir seu próprio campo obrigatório é descartado. Um autor sem name, um objeto de mídia sem url e um rodapé sem text são lidos como se o campo não tivesse sido enviado

CampoTipoDescrição
namestringNome do autor (1-256 caracteres)
url??stringLink do autor (1-2.048 caracteres)
icon_url??stringURL do ícone do autor (1-2.048 caracteres)
CampoTipoDescrição
url1stringURL de mídia ou referência de anexo
description??stringDescrição da mídia (1-4.096 caracteres)

1 Uma URL http ou https, ou uma referência attachment://<filename> nomeando um anexo png, jpg, jpeg, webp ou gif na mesma mensagem, com 1 a 2.048 caracteres em ambos os formatos. Apenas image e thumbnail aceitam o formato attachment://

Uma referência attachment:// em uma requisição sem anexos falha com o código de campo CANNOT_REFERENCE_ATTACHMENTS_WITHOUT_ATTACHMENTS. Uma referência a um nome de arquivo que nenhum anexo na requisição forneça falha com o código de campo REFERENCED_ATTACHMENT_NOT_FOUND, e uma referência a um anexo cuja extensão não seja de imagem suportada falha com o código de campo ATTACHMENT_MUST_BE_IMAGE.

CampoTipoDescrição
textstringTexto do rodapé (1-2.048 caracteres)
icon_url??stringURL do ícone do rodapé (1-2.048 caracteres)
CampoTipoDescrição
namestringNome do campo (1-256 caracteres)
valuestringValor do campo com no máximo 1.024 caracteres
inline?booleanSe o campo pode renderizar em linha, com padrão false

O Decoding Chat emite uma URL de upload para um anexo antes que qualquer mensagem possa referenciá-lo. Solicitar URLs de upload de anexos planeja o upload. Um plano cujo tamanho declarado exceder 10 MiB é um plano multipart, e Concluir upload de anexo o finaliza.

Uma upload_url pode apontar para armazenamento de objetos ou para o relay de upload do Decoding Chat. Envie-a exatamente como emitida sem presumir seu formato.

Uma chave de upload pode ser referenciada apenas por uma mensagem que a mesma identidade criar no mesmo canal.

Um upload declarado dentro do corpo de Solicitar URLs de upload de anexos.

CampoTipoDescrição
id1integerPosição do anexo selecionada pelo chamador (0-2.147.483.647)
filenamestringNome do arquivo a enviar
file_size1integerContagem de bytes declarada (0-9.007.199.254.740.991)
content_type2stringTipo de mídia de 1 a 255 caracteres que o cliente envia

1 Uma string decimal é convertida para inteiro

2 A URL de upload emitida utiliza o tipo de mídia derivado de filename. O objeto de anexo de mensagem informa como o anexo armazenado é tipado

Objeto de upload de anexo de parte única (singlepart)

Seção intitulada “Objeto de upload de anexo de parte única (singlepart)”

Retornado quando o file_size declarado for de no máximo 10 MiB.

CampoTipoDescrição
idintegerPosição do anexo ecoada da requisição
filenamestringNome do arquivo ecoado da requisição
upload_filename1stringChave de upload opaca de 1 a 4.096 caracteres
file_sizeintegerContagem de bytes declarada ecoada da requisição
content_typestringTipo de mídia derivado de filename
upload_modestringSempre singlepart
upload_url2stringURL pré-assinada que aceita o arquivo completo em um único PUT

1 Este valor é o upload_filename de um anexo pré-enviado em uma requisição posterior de Criar mensagem ou Modificar mensagem

2 A URL de upload aceita apenas o tipo de mídia derivado e exatamente file_size bytes, de modo que um PUT de qualquer outro tamanho é rejeitado

Objeto de upload de anexo de múltiplas partes (multipart)

Seção intitulada “Objeto de upload de anexo de múltiplas partes (multipart)”

Retornado quando o file_size declarado exceder 10 MiB.

CampoTipoDescrição
idintegerPosição do anexo ecoada da requisição
filenamestringNome do arquivo ecoado da requisição
upload_filenamestringChave de upload opaca de 1 a 4.096 caracteres
file_sizeintegerContagem de bytes declarada ecoada da requisição
content_typestringTipo de mídia derivado de filename
upload_modestringSempre multipart
upload_idstringIdentificador de upload multipart do armazenamento de objetos de 1 a 1.024 caracteres
part_size1integerTamanho em bytes de todas as partes, exceto a última
partsarray[parte de upload de anexo object]URLs pré-assinadas de upload de partes em ordem crescente de número de parte (1-10.000 entradas)

1 O plano busca 20 partes, portanto part_size é um vigésimo do file_size arredondado para cima para um mebibyte inteiro, nunca sendo menor que 10 MiB. A última parte é o restante

Uma parte pré-assinada de um plano de upload multipart.

CampoTipoDescrição
part_numberintegerNúmero da parte baseado em 1
upload_url1stringURL pré-assinada que aceita exatamente esta parte

1 Cada URL de upload de parte aceita apenas a contagem exata de bytes de sua parte, portanto um PUT de qualquer outro tamanho é rejeitado

Um upload planejado nomeado em um corpo de Concluir upload de anexo.

CampoTipoDescrição
upload_filenamestringChave de upload opaca retornada quando o upload foi planejado
upload_idstringIdentificador de upload multipart retornado quando o upload foi planejado

Um resultado de Atualizar URLs de anexos.

CampoTipoDescrição
originalstringA URL exatamente como foi enviada
refreshed1stringA URL com uma nova assinatura, ou original inalterado

1 Igual a original quando a URL não for uma URL de anexo desta instância, ou quando a instância não possuir segredos de URL de anexo

Uma URL é uma URL de anexo desta instância quando todas estas condições forem atendidas:

  • É analisável como URL absoluta cujo esquema, host e porta sejam iguais aos do endpoint de mídia. O host é comparado sem diferenciar maiúsculas/minúsculas, e porta padrão equivale a nenhuma porta.
  • Seu caminho, escrito na string, começa com o caminho do endpoint de mídia seguido por /attachments/.
  • O restante do caminho, decodificado em percentual, é UTF-8 válido e uma chave de armazenamento segura sem segmento vazio, . ou ...
  • Essa chave é attachments/{channel_id}/{attachment_id}/{filename}, onde ambos os IDs são dígitos decimais e o nome de arquivo não é vazio.

Para assinar uma URL, o Decoding Chat remove todos os parâmetros ex, is, hm e uc e pares vazios, colocando os novos ex, is e hm primeiro. Todos os outros parâmetros seguem em sua ordem e bytes originais, mantendo eventuais fragmentos. Uma URL de pacote de dados perde seu uc assim, resultando em uma URL comum válida por 24 horas.

Um fixado de canal associa uma mensagem fixada ao horário em que foi fixada.

CampoTipoDescrição
message1mensagem objectA mensagem para a qual o fixado aponta
pinned_atISO8601 timestampHorário em que a mensagem foi fixada

1 A mensagem fixada omite referenced_message e reactions, devendo o cliente que precisar de algum lê-la via Obter mensagem

CampoTipoDescrição
items1array[fixado de canal object]Página atual de fixados
has_morebooleanSe existe uma página mais antiga

1 Ordenados por horário de fixação decrescente

A página não possui campo de cursor. A próxima requisição repete a operação com before definido como o pinned_at do último item retornado. Continue enquanto has_more for true. has_more é false apenas quando o canal não possui mais fixados visíveis.

CampoTipoDescrição
itemsarray[usuário parcial object]Usuários em ordem crescente de ID
has_morebooleanSe existe outra página
next_after1?snowflakeCursor de ID de usuário para a próxima página

1 Null quando não houver mais páginas, e caso contrário o ID do último usuário em items

CampoTipoDescrição
channel_idsnowflakeO ID do canal
limitintegerNúmero de mensagens a retornar (1-50)
before?snowflakeRetornar mensagens anteriores a este ID
after?snowflakeRetornar mensagens posteriores a este ID
around?snowflakeRetornar uma janela centrada neste ID
CampoTipoDescrição
channel_idsnowflakeO ID do canal
messagesarray[mensagem object]Janela de mensagens em ordem cronológica inversa
GET/v1/channels/{channel_id}/messagesBot

Retorna um array em ordem cronológica inversa de objetos de mensagem. Requer VIEW_CHANNEL.

  • Ler histórico em um canal de servidor requer READ_MESSAGE_HISTORY.
  • Um chamador de servidor sem READ_MESSAGE_HISTORY vê apenas mensagens criadas no limite de histórico de mensagens do servidor ou após ele.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
CampoTipoDescrição
limit?integerNúmero de mensagens a retornar (1-100, padrão 50)
before?1snowflakeRetornar mensagens anteriores a este ID
after?1snowflakeRetornar mensagens posteriores a este ID
around?snowflakeRetornar uma janela centrada neste ID, sobrepondo before e after

1 Combinar ambos seleciona a página anterior a before, descartando entradas iguais ou inferiores a after

StatusCorpoCondição
200array[mensagem object]Janela de mensagens foi retornada
403resposta de erroChamador não possui VIEW_CHANNEL (retorna MISSING_PERMISSIONS), ou falta verificação de idade para o canal (retorna NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroCanal não existe ou o chamador não é destinatário do canal privado

100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:messages:read::channel_id.

POST/v1/channels/messages/bulk

Retorna um objeto de resposta de mensagens em lote contendo janelas de mensagens delimitadas de vários canais.

  • Esta é uma operação exclusiva para usuários; credenciais de bot são recusadas com 403 ACCESS_DENIED.
  • O Decoding Chat resolve e autoriza cada canal solicitado independentemente, com as mesmas verificações de Listar mensagens do canal.
  • Um canal inacessível faz toda a requisição falhar, de modo que a resposta não conterá janela para nenhum canal.
CampoTipoDescrição
requests1array[requisição de mensagens em lote object]De 1 a 25 requisições de canal

1 Os valores de limit em todas as entradas somados devem ser de no máximo 250; exceder essa soma falha a requisição inteira

CampoTipoDescrição
channels1array[canal de mensagens em lote object]Resultados na ordem da requisição

1 Contém exatamente uma entrada para cada canal solicitado, na ordem enviada; IDs de canais duplicados produzem entradas duplicadas no resultado

StatusCorpoCondição
200corpo da respostaTodas as janelas solicitadas foram retornadas
403resposta de erroChamador é um bot (retorna ACCESS_DENIED)
403resposta de erroChamador não possui VIEW_CHANNEL para um canal solicitado (retorna MISSING_PERMISSIONS)
403resposta de erroFaltou verificação de idade para um canal solicitado (retorna NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroUm canal solicitado não existe ou o chamador não é destinatário do canal privado

20 requisições por 10 segundos para cada usuário autenticado, no bucket channel:messages:bulk_read.

GET/v1/channels/{channel_id}/messages/{message_id}Bot

Retorna um objeto de mensagem. Requer VIEW_CHANNEL.

  • Em um canal de servidor sem READ_MESSAGE_HISTORY, uma mensagem criada antes do limite de histórico do servidor é reportada como 404 UNKNOWN_MESSAGE em vez de 403.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem a retornar
StatusCorpoCondição
200mensagem objectA mensagem foi retornada
403resposta de erroChamador não possui VIEW_CHANNEL (retorna MISSING_PERMISSIONS), ou falta verificação de idade (retorna NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroCanal ou mensagem não existe, ou a mensagem está fora do limite de histórico do chamador

100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:read::channel_id.

POST/v1/channels/{channel_id}/attachmentsBot

Planeja de 1 a 10 uploads de anexos. Retorna um objeto de upload de parte única ou múltiplas partes para cada declaração.

  • O canal deve suportar mensagens; um que não suporte falha com 400 CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL.
  • Um canal de servidor requer SEND_MESSAGES e ATTACH_FILES; um membro em timeout é recusado com 403 COMMUNICATION_DISABLED.

O Decoding Chat verifica cada file_size declarado separadamente contra o limite de tamanho de anexo resolvido para o chamador e o contexto do servidor. Uma declaração acima desse limite retorna 400 FILE_SIZE_TOO_LARGE com o teto resolvido. Por padrão, o teto resolvido é de 26214400 bytes (25 MiB) para chamador sem premium e 524288000 bytes (500 MiB) para chamador com premium. Credenciais de bot são limitadas a 52428800 bytes (teto de bot de 50 MiB), mesmo que o limite resolvido seja maior.

CampoTipoDescrição
channel_idsnowflakeO ID do canal de mensagens alvo
CampoTipoDescrição
attachmentsarray[item de requisição de upload de anexo object]Declarações de upload de anexo (1-10 entradas)
CampoTipoDescrição
attachments1array[singlepart ou multipart object]Plano de upload para cada declaração

1 Retornados na mesma ordem da requisição; cada entrada ecoa o id do chamador para parear o plano com sua declaração. Leia upload_mode para selecionar a variante

StatusCorpoCondição
200corpo da respostaPlanos de upload foram emitidos
400resposta de erroCorpo, declaração ou contagem inválida (retorna INVALID_FORM_BODY)
400resposta de erroCanal não suporta mensagens (retorna CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
400resposta de erroTamanho declarado excede o limite (retorna FILE_SIZE_TOO_LARGE)
403resposta de erroFaltam permissões SEND_MESSAGES ou ATTACH_FILES (retorna MISSING_PERMISSIONS)
403resposta de erroChamador está em timeout (retorna COMMUNICATION_DISABLED)
403resposta de erroUploads pré-assinados desativados na instância (retorna FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou indisponível (UNKNOWN_CHANNEL), ou conta não existe (UNKNOWN_USER)

A operação reserva os uploads para o chamador e canal. Ela não cria mensagem.

Um upload_filename emitido torna-se anexo apenas quando uma requisição posterior de Criar mensagem ou Modificar mensagem o referenciar em uma entrada de anexo pré-enviado. Um plano singlepart não requer etapa de conclusão, portanto uma mensagem pode referenciar sua chave assim que o PUT tiver êxito.

10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:attachment:upload::channel_id.

POST/v1/channels/{channel_id}/attachments/completeBot

Conclui de 1 a 10 uploads multipart após o envio de todas as partes. Retorna suas chaves de upload.

  • Cada upload deve ter sido planejado como multipart pela mesma identidade autenticada para o mesmo canal.

A requisição não possui lista de partes nem tags de entidade.

CampoTipoDescrição
channel_idsnowflakeO ID do canal vinculado aos uploads
CampoTipoDescrição
uploadsarray[item de conclusão de upload multipart object]Uploads a finalizar (1-10 entradas)
CampoTipoDescrição
uploadsarray[object]Uma entrada para cada upload concluído, contendo upload_filename
StatusCorpoCondição
200corpo da respostaTodos os uploads multipart foram concluídos
400resposta de erroCorpo inválido, ou upload não é multipart pendente do chamador no canal (código UPLOADED_ATTACHMENT_NOT_FOUND)
400resposta de erroNenhuma parte foi enviada (código NO_UPLOADED_PARTS_TO_FINALIZE)
400resposta de erroBytes enviados excedem o limite (retorna FILE_SIZE_TOO_LARGE)
403resposta de erroFaltam permissões SEND_MESSAGES ou ATTACH_FILES (retorna MISSING_PERMISSIONS)
403resposta de erroChamador está em timeout (retorna COMMUNICATION_DISABLED)
403resposta de erroUploads pré-assinados desativados na instância (retorna FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou indisponível (UNKNOWN_CHANNEL), ou conta não existe (UNKNOWN_USER)

A operação disponibiliza cada upload concluído para uma mensagem. Ela não cria mensagem.

10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:attachment:upload::channel_id, compartilhado com Solicitar URLs de upload de anexos.

POST/v1/attachments/refresh-urlsBot

Assina novamente de 1 a 50 URLs de anexos. Retorna um objeto de URL de anexo atualizada para cada URL enviada. Uma URL de pacote de dados é aceita normalmente, resultando em uma URL comum válida por 24 horas.

  • Token bearer OAuth2 é recusado com 403 ACCESS_DENIED.
  • O Decoding Chat não verifica associação a canais, permissões nem existência de anexos, e não lê dados armazenados. A URL é assinada quer seu objeto exista ou possa ser visto pelo chamador.
CampoTipoDescrição
attachment_urls1array[string]URLs a assinar novamente (1-50 entradas, cada uma com até 2.048 caracteres)

1 Cada entrada é lida exatamente como enviada, sem remoção de espaços nem normalização

CampoTipoDescrição
refreshed_urls1array[URL de anexo atualizada object]Resultados na ordem da requisição

1 Contém exatamente uma entrada para cada URL solicitada, na ordem enviada; URLs duplicadas produzem entradas duplicadas

StatusCorpoCondição
200corpo da respostaTodas as URLs foram processadas
400resposta de erroCorpo, contagem de URLs ou tamanho de URL inválido (retorna INVALID_FORM_BODY)
401resposta de erroCredencial ausente ou inválida (retorna UNAUTHORIZED)
403resposta de erroChamador apresenta credencial bearer (retorna ACCESS_DENIED)
403resposta de erroConta possui ação obrigatória pendente (retorna ACCOUNT_SUSPICIOUS_ACTIVITY)

20 requisições por 10 segundos para cada usuário autenticado, no bucket attachment:refresh_urls.

POST/v1/channels/{channel_id}/messagesBot

Cria uma mensagem a partir de um corpo JSON ou dados de formulário multipart. Retorna o objeto de mensagem criado. Emite um evento de Gateway Message Create.

  • O canal deve ser um tipo que contenha texto.
  • Um canal de servidor requer VIEW_CHANNEL e SEND_MESSAGES, uma associação ativa (sem timeout) e que atenda ao nível de verificação do servidor.
  • Um membro em timeout é recusado com 403 COMMUNICATION_DISABLED.
  • Embeds requerem EMBED_LINKS, anexos requerem ATTACH_FILES, memes favoritos requerem ambos, e menções ativas a everyone requerem MENTION_EVERYONE.
  • O modo lento se aplica a chamadores não-bot a menos que possuam BYPASS_SLOWMODE.
  • Mensagem direta individual aplica a política de mensagens diretas e o estado de relacionamento do destinatário; negações retornam 400 CANNOT_SEND_MESSAGES_TO_USER.
  • Conta não reivindicada pode enviar apenas para seu próprio canal de notas pessoais; envios para outros canais retornam 400 UNCLAIMED_ACCOUNT_CANNOT_SEND_MESSAGES antes de resolver o canal.
  • Chamador não-bot deve ter iniciado uma sessão; caso contrário, é recusado com o código MUST_START_SESSION_BEFORE_SENDING.

O corpo é lido como formulário multipart quando Content-Type contiver multipart/form-data, e como JSON caso contrário. Corpo JSON vazio é lido como {}. Corpo JSON inválido ou em desacordo com o schema falha com o código INVALID_MESSAGE_DATA no caminho message_data. Corpo multipart em desacordo falha com 400 INVALID_FORM_BODY detalhado por campo.

CampoTipoDescrição
channel_idsnowflakeO ID do canal alvo
CampoTipoDescrição
nonce?1string | integerIdentificador do chamador como string (1-32 caracteres) ou inteiro seguro não negativo
content?2?stringTexto da mensagem
embeds?6array[rich embed object]Entradas de rich embed
attachments?7array[anexo pré-enviado object]Referências de anexos
message_reference??entrada de referência de mensagem objectReferência de resposta ou encaminhamento
allowed_mentions??menções permitidas objectPolítica de menções ativas
flags?3integerFlags de mensagem, com padrão 0
favorite_meme_id?4?snowflakeMeme favorito a anexar
sticker_ids??array[snowflake]No máximo 3 IDs de stickers
tts?5booleanSe deve solicitar conversão de texto em voz

1 Ecoado na mensagem criada e em seu Dispatch de Message Create para parear com a entrada otimista. Inteiros são convertidos para string decimal

2 O schema não limita o tamanho. Exceder o max_message_length efetivo retorna 400 INVALID_FORM_BODY com CONTENT_EXCEEDS_MAX_LENGTH no caminho content

3 O Decoding Chat mantém apenas os bits de flags de mensagem e descarta outros silenciosamente

4 O objeto de meme armazenado é copiado para um novo anexo na mensagem. Memes não pertencentes ao chamador retornam 400 INVALID_FORM_BODY com o código FAVORITE_MEME_NOT_FOUND

5 Forçado para false quando o chamador não possuir SEND_TTS_MESSAGES no servidor, e a requisição continua sendo bem-sucedida

O menor corpo que funciona é uma linha de texto:

{
"content": "hello"
}

O Decoding Chat resolve o max_message_length efetivo para o autor e contexto do servidor, com padrão de 2.000 caracteres. Autores bot ou webhook utilizam o maior valor entre o resolvido e 4.000 caracteres.

Uma mensagem deve possuir ao menos conteúdo com caracteres visíveis, um embed, um anexo, um meme favorito ou um sticker. Caso contrário, falha com 400 CANNOT_SEND_EMPTY_MESSAGE. SUPPRESS_NOTIFICATIONS altera a geração de notificações, mantendo os dados de menção na mensagem.

Reutilizar um nonce no mesmo canal dentro da janela retorna a mensagem criada na primeira requisição. Reutilizá-lo em canal diferente retorna 404 UNKNOWN_MESSAGE. A verificação de reprodução ocorre após autorização e validação.

Respostas de chamadores de servidor sem READ_MESSAGE_HISTORY falham com 404 UNKNOWN_MESSAGE quando o alvo foi criado antes do limite de histórico do servidor. Encaminhamentos não possuem verificação de limite de histórico no canal de origem. Respostas a mensagens de sistema falham com o código CANNOT_REPLY_TO_SYSTEM_MESSAGE.

Toda referência FORWARD possui channel_id. Uma sem ele é recusada na validação do corpo com 400 INVALID_MESSAGE_DATA (JSON) ou 400 INVALID_FORM_BODY por campo (multipart).

Encaminhamentos não aceitam content, embeds, attachments ou sticker_ids, falhando com o código FORWARD_MESSAGES_CANNOT_CONTAIN_CONTENT se informados. Um guild_id em desacordo com o servidor do canal de origem falha com o código GUILD_ID_MUST_MATCH_REFERENCED_MESSAGE. Ler o canal de origem requer VIEW_CHANNEL.

Snapshots com embeds requerem EMBED_LINKS no canal de servidor de destino, e snapshots com anexos requerem ATTACH_FILES, retornando 403 MISSING_PERMISSIONS se ausentes.

CampoTipoDescrição
payload_json?stringCodificação JSON do corpo da mensagem, padrão {} quando ausente
files[N]?1 2binaryArquivo de anexo direto no índice baseado em zero N
content?stringSobrepõe content em payload_json
nonce?stringSobrepõe nonce em payload_json
tts?stringSobrepõe tts em payload_json, analisado de true ou false
flags?stringSobrepõe flags em payload_json, analisado como inteiro decimal
favorite_meme_id?stringSobrepõe favorite_meme_id em payload_json
sticker_ids?stringSobrepõe sticker_ids em payload_json, repetido uma vez por sticker

1 Os nomes legados file e file<N> são aceitos nos mesmos índices. Nomes não listados são ignorados

2 O índice varia de 0 até o limite max_attachments_per_message resolvido menos um

Corpos que não puderem ser analisados como formulário multipart falham com o código FAILED_TO_PARSE_MULTIPART_FORM_DATA. payload_json que não for string JSON falha com INVALID_JSON_IN_PAYLOAD_JSON. Nomes de campos iniciados por files[ incompatíveis com files[<N>] falham com INVALID_FILE_FIELD_NAME.

Condição do campo de arquivoErro
Índice menor que 0 ou maior que 10000FILE_INDEX_EXCEEDS_MAXIMUM
Limite de anexos resolvido é 0ATTACHMENTS_NOT_ALLOWED_FOR_MESSAGE
Índice igual ou superior ao limite resolvidoFILE_INDEX_EXCEEDS_MAXIMUM
Índice repetido entre camposDUPLICATE_FILE_INDEX
Mais de um arquivo sob o mesmo índiceMULTIPLE_FILES_FOR_INDEX_NOT_ALLOWED
Mais arquivos que o limite resolvidoTOO_MANY_FILES

Cada um é um código de campo dentro de um 400 INVALID_FORM_BODY. FILE_INDEX_EXCEEDS_MAXIMUM possui um membro maxIndex (10000 se fora da faixa de 0-10000, ou o limite resolvido menos um).

O array attachments em payload_json usa metadados de anexo multipart direto; entradas com upload_filename são lidas como anexo pré-enviado. Entradas cujo id coincida com um arquivo enviado fornecem seus metadados; duplicatas falham com DUPLICATE_ATTACHMENT_IDS_NOT_ALLOWED.

Gaps de índices são permitidos e os arquivos são anexados em ordem crescente. Arquivos não reivindicados por metadados são anexados com seu nome de arquivo multipart e sem título/descrição. Omitir attachments anexa todos os arquivos assim.

Mensagens com VOICE_MESSAGE possuem exatamente um anexo e mais nada.

Condição de mensagem de vozErro
Conteúdo presenteVOICE_MESSAGES_CANNOT_HAVE_CONTENT
Embeds presentesVOICE_MESSAGES_CANNOT_HAVE_EMBEDS
Meme favorito presenteVOICE_MESSAGES_CANNOT_HAVE_FAVORITE_MEMES
Stickers presentesVOICE_MESSAGES_CANNOT_HAVE_STICKERS
Quantidade de anexos diferente de umVOICE_MESSAGES_REQUIRE_SINGLE_ATTACHMENT
Faltando waveformVOICE_MESSAGES_ATTACHMENT_WAVEFORM_REQUIRED
Faltando durationVOICE_MESSAGES_ATTACHMENT_DURATION_REQUIRED
Duração excede o limite resolvidoVOICE_MESSAGES_DURATION_EXCEEDS_LIMIT

O limite max_voice_message_duration resolvido tem padrão de 1.200 segundos.

StatusCorpoCondição
200mensagem objectA mensagem foi criada
400resposta de erroErro de validação no corpo, formulário, conteúdo, referência, menção, anexo, embed, sticker ou mensagem de voz
400resposta de erroPolítica de mensagens diretas do destinatário nega o envio (CANNOT_SEND_MESSAGES_TO_USER)
400resposta de erroModo lento nega o envio (SLOWMODE_RATE_LIMITED)
403resposta de erroFaltam permissões necessárias (MISSING_PERMISSIONS)
403resposta de erroEm timeout (COMMUNICATION_DISABLED)
403resposta de erroRestrição de idade do canal (NSFW_CONTENT_AGE_RESTRICTED)
403resposta de erroEnvio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal, mensagem referenciada, sticker ou servidor não existe/indisponível, ou nonce foi usado em outro canal (UNKNOWN_MESSAGE)

retry_after nunca está a mais de um segundo abaixo do cabeçalho Retry-After. A resposta não possui cabeçalhos de bucket nem X-RateLimit-Scope.

A operação cria a mensagem, anexa envios referenciados e arquivos multipart, aplica prazos de expiração aos anexos, copia mídias encaminhadas, atualiza a última mensagem do canal e torna a mensagem pesquisável.

Avança o estado de leitura do autor (exceto bots), reabre mensagens diretas para destinatários que as fecharam e resolve URLs elegíveis não armazenadas em cache em embeds.

Emite Message Create para sessões que possam ver o canal. Notificações seguem a política de menções permitidas. Não escreve entrada no log de auditoria.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:create::channel_id.

PATCH/v1/channels/{channel_id}/messages/{message_id}Bot

Modifica uma mensagem. Retorna o objeto de mensagem atualizado. Emite um evento de Gateway Message Update.

  • O alvo deve ser uma mensagem DEFAULT ou REPLY; outros tipos falham com 400 CANNOT_MODIFY_SYSTEM_WEBHOOK.
  • Mensagens com snapshots de mensagem não podem ser editadas pelo autor (código MESSAGES_WITH_SNAPSHOTS_CANNOT_BE_EDITED). Moderadores com MANAGE_MESSAGES ainda podem alternar SUPPRESS_EMBEDS e alterar metadados de anexos existentes em mensagens encaminhadas.
  • O autor pode modificar todos os campos suportados; autores em timeout recebem 403 COMMUNICATION_DISABLED.
  • Não-autores podem agir apenas em canais de servidor, devem possuir MANAGE_MESSAGES e podem alterar apenas SUPPRESS_EMBEDS e metadados de anexos existentes. Edições não autorizadas falham com 403 CANNOT_EDIT_OTHER_USER_MESSAGE.
  • MANAGE_MESSAGES é uma permissão elevada; sem autenticador registrado em servidor com nível MFA elevado, retorna 400 TWO_FACTOR_REQUIRED, a menos que seja o dono do servidor.
  • Chamadores sem a permissão recebem 403 CANNOT_EDIT_OTHER_USER_MESSAGE.
  • Embeds requerem EMBED_LINKS e novos uploads requerem ATTACH_FILES.
  • Edições concorrentes podem falhar com 429 RESOURCE_LOCKED e Retry-After: 1.

O corpo é lido como em Criar mensagem, aceitando multipart/form-data com os mesmos campos payload_json e files[N]. Arquivos não enviados diretamente devem ser planejados via Solicitar URLs de upload de anexos e referenciados por seu upload_filename.

CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem a modificar
CampoTipoDescrição
content??stringTexto de substituição sob os mesmos limites de criação
embeds?1array[rich embed object]Coleção de embeds substituta
allowed_mentions?2?menções permitidas objectPolítica de menções ativas substituta
flags?3integerFlags de mensagem substitutos
attachments?1array[anexo pré-enviado object | referência de anexo existente object]Coleção completa de anexos mantidos e adicionados

1 Substitui a coleção armazenada por completo; itens omitidos são removidos. Ambas as coleções seguem os mesmos limites resolvidos da criação

2 Padrão é a política de menções armazenada da resposta; se omitido, não altera a menção de resposta ao autor referenciado

3 Apenas os bits em flags de mensagem são mantidos; outros bits armazenados permanecem inalterados

Fornecer message_snapshots é rejeitado com 403 MISSING_PERMISSIONS.

Campos omitidos mantêm seus valores armazenados, e edited_timestamp avança apenas se content mudar. A requisição deve conter ao menos conteúdo com caracteres visíveis, embed, anexo ou flags; caso contrário, falha com 400 CANNOT_SEND_EMPTY_MESSAGE.

IDs que não nomeiem anexos na mensagem são ignorados, mantendo o sucesso da edição.

StatusCorpoCondição
200mensagem objectA mensagem foi modificada
400resposta de erroDados inválidos ou edição de mensagem com snapshots (MESSAGES_WITH_SNAPSHOTS_CANNOT_BE_EDITED)
403resposta de erroNão é autor e não pode moderar (CANNOT_EDIT_OTHER_USER_MESSAGE)
403resposta de erroForneceu message_snapshots ou faltam EMBED_LINKS/ATTACH_FILES (MISSING_PERMISSIONS)
403resposta de erroChamador em timeout (COMMUNICATION_DISABLED)
403resposta de erroRestrição de idade (NSFW_CONTENT_AGE_RESTRICTED)
403resposta de erroEnvio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal ou mensagem não existe

Atualiza a mensagem, avança seu horário de edição se content mudar, anexa novos uploads e remove anexos não mantidos. Recalcula menções se content, allowed_mentions ou embeds mudarem, atualiza resultados de busca e resolve novas URLs elegíveis em embeds.

Emite Message Update para sessões que possam ver o canal. Não grava log de auditoria, mesmo para edições de moderadores.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:update::channel_id.

DELETE/v1/channels/{channel_id}/messages/ackBot

Exclui o registro de estado de leitura da identidade autenticada para um canal. Retorna 204 com corpo vazio em caso de sucesso.

  • O Decoding Chat não resolve o canal; altera apenas o estado de leitura do próprio chamador.
  • Operação idempotente; canais sem registro armazenado também retornam 204.
CampoTipoDescrição
channel_idsnowflakeO ID do canal cujo estado de leitura é excluído
StatusCorpoCondição
204vazioEstado de leitura estava ausente ou foi excluído
403resposta de erroTipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY)

Exclui o marcador de leitura, contagem de menções e confirmação de fixados do chamador para o canal. Não emite Dispatch de Gateway.

40 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:read_state:delete::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}BotAudit reason

Exclui uma mensagem. Retorna 204 com corpo vazio em caso de sucesso. Emite evento de Gateway Message Delete.

  • O alvo deve ser um tipo de mensagem me xcluível.
  • O autor pode excluir sua própria mensagem em qualquer lugar.
  • Excluir mensagem de outro usuário em servidor requer SEND_MESSAGES e MANAGE_MESSAGES (permissão elevada). Ninguém pode excluir mensagem de outro usuário em canal privado.
  • Possuidores de MANAGE_MESSAGES sem autenticador registrado recebem 400 TWO_FACTOR_REQUIRED em servidores com nível MFA elevado, a menos que sejam donos do servidor.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem a excluir
StatusCorpoCondição
204vazioA mensagem foi excluída
403resposta de erroFaltam autoria ou permissões de servidor, ou mensagem não é excluível (MISSING_PERMISSIONS)
403resposta de erroFalta verificação de idade no canal (NSFW_CONTENT_AGE_RESTRICTED)
403resposta de erroEnvio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal ou mensagem não existe

Exclui permanentemente a mensagem, suas reações e anexos, removendo-a das pesquisas.

Emite Message Delete para sessões que possam ver o canal. Se a mensagem estava fixada, remove a entrada de fixados e emite Channel Pins Update com o horário do último fixado inalterado.

Exclusões em servidor gravam uma entrada MESSAGE_DELETE no log de auditoria com o motivo fornecido, incluindo a exclusão da própria mensagem do chamador.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:delete::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}/attachments/{attachment_id}Bot

Exclui um anexo da mensagem do próprio chamador. Retorna 204 com corpo vazio em caso de sucesso. Emite evento de Gateway Message Update.

  • Apenas o autor da mensagem pode usar esta operação; moderadores de servidor devem usar Modificar mensagem.
  • Não pode ser usado em anexos pertencentes a embeds resolvidos.
  • Se o anexo for o único e a mensagem não tiver conteúdo, embeds ou stickers, o Decoding Chat exclui toda a mensagem com os efeitos de Excluir mensagem.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem proprietária
attachment_idsnowflakeO ID do anexo a excluir
StatusCorpoCondição
204vazioAnexo ou mensagem vazia resultante foi excluída
403resposta de erroNão é autor (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal ou mensagem não existe, ou anexo não encontrado

Exclui o objeto de anexo armazenado, remove da entrega de mídia e da mensagem e avança o horário de edição. Emite Message Update para sessões que possam ver o canal. Se for o único anexo sem outros conteúdos, exclui a mensagem inteira com todos os efeitos de Excluir mensagem.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:delete::channel_id.

POST/v1/channels/{channel_id}/messages/bulk-deleteBotAudit reasonMFA

Exclui de 1 a 100 mensagens em um canal de servidor. Retorna 204 com corpo vazio em caso de sucesso. Emite evento de Gateway Message Delete Bulk.

  • O canal deve pertencer a um servidor; canais privados falham com 400 CANNOT_EXECUTE_ON_DM.
  • Requer MANAGE_MESSAGES (permissão elevada).
  • Sem autenticador registrado em servidor com nível MFA elevado, retorna 400 TWO_FACTOR_REQUIRED, a menos que seja dono do servidor.
  • Não há restrição de idade das mensagens.
CampoTipoDescrição
channel_idsnowflakeO ID do canal de servidor

Ao menos um dos campos abaixo deve estar presente. Omitir ambos falha com 400 INVALID_FORM_BODY em message_ids; se ambos forem informados, message_ids é usado e messages é ignorado.

CampoTipoDescrição
message_ids?1array[snowflake]IDs de mensagens a excluir (máx. 100 entradas)
messages?1array[snowflake]Alias para message_ids

1 Array vazio falha com MESSAGE_IDS_CANNOT_BE_EMPTY no caminho message_ids. Mais de 100 entradas é rejeitado na validação do corpo

IDs inexistentes no canal são pulados. Se nenhum ID for encontrado, retorna 204 sem excluir nada, emitir Dispatch ou gravar log.

StatusCorpoCondição
204vazioMensagens foram excluídas
400resposta de erroCorpo/contagem inválidos, seleção vazia (MESSAGE_IDS_CANNOT_BE_EMPTY) ou canal privado (CANNOT_EXECUTE_ON_DM)
403resposta de erroFalta MANAGE_MESSAGES (MISSING_PERMISSIONS) ou verificação de idade (NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroCanal não existe

Exclui permanentemente mensagens, anexos e reações selecionados, removendo-os da busca.

Havendo ao menos um ID válido, emite Message Delete Bulk com todos os IDs solicitados para as sessões que veem o canal. Não emite Channel Pins Update nem Message Delete individuais.

Grava uma entrada MESSAGE_BULK_DELETE no log de auditoria com a contagem correspondente e o motivo fornecido.

10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:bulk_delete::channel_id.

POST/v1/channels/{channel_id}/messages/purgeBot

Exclui todas as mensagens no canal de notas pessoais do usuário autenticado. Retorna o número de mensagens removidas. Emite evento de Gateway Message Delete Bulk.

  • O canal deve ser o próprio canal DM_PERSONAL_NOTES do chamador; outros canais falham com 400 INVALID_CHANNEL_TYPE.

A resposta é retornada apenas após a conclusão da exclusão.

CampoTipoDescrição
channel_idsnowflakeO ID do canal de notas pessoais
CampoTipoDescrição
deleted_countintegerNúmero de mensagens removidas por esta requisição
StatusCorpoCondição
200corpo da respostaTodas as notas pessoais foram excluídas
403resposta de erroTipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY)
404resposta de erroCanal não existe ou o chamador não pode resolvê-lo

Exclui permanentemente notas pessoais, anexos e reações, removendo-os da busca. As sessões do chamador recebem um Dispatch de Message Delete Bulk por página de no máximo 100 mensagens.

Não emite Channel Pins Update nem Message Delete individuais, e não grava log de auditoria.

2 requisições por minuto para cada usuário autenticado e ID de canal, no bucket channel:message:purge::channel_id.

POST/v1/channels/{channel_id}/messages/bulk-delete-mineBotMFA

Exclui todas as mensagens das quais o chamador é autor em um canal. Retorna 202 com corpo vazio. Emite evento de Gateway Message Delete Bulk.

  • Aceita credenciais de usuário e bot (bots satisfazem o requisito de sudo sem comprovante).
  • O chamador deve conseguir resolver o canal e estar em modo sudo (cabeçalho X-Fluxer-Sudo-Mode-JWT ou comprovante no corpo).
  • Não satisfazendo os requisitos, retorna 403 SUDO_MODE_REQUIRED com has_mfa e methods disponíveis.
  • Contas sem credenciais verificáveis (sem bot, sem autenticador e sem senha armazenada) satisfazem o sudo com corpo vazio.

A exclusão é executada durante a requisição, apesar do status 202.

CampoTipoDescrição
channel_idsnowflakeO ID do canal cujas mensagens do chamador serão excluídas
CampoTipoDescrição
X-Fluxer-Sudo-Mode-JWT?1stringComprovante de modo sudo existente

1 Um cabeçalho válido satisfaz o requisito por si só. O comprovante aceito é ecoado de volta na resposta

CampoTipoDescrição
password?1stringComprovante de senha da conta
mfa_method?2stringMétodo MFA (totp ou webauthn)
mfa_code?stringCódigo do autenticador (1-32 caracteres), enviado com totp
webauthn_response?asserção WebAuthn objectAsserção WebAuthn para verificação sudo
webauthn_challenge?stringDesafio vinculado à asserção de modo sudo

1 Aceito apenas para contas sem autenticador registrado. Senha incorreta falha com INVALID_PASSWORD

2 Aceito apenas para contas com autenticador registrado. Falha de verificação retorna INVALID_MFA_CODE

StatusCorpoCondição
202vazioTodas as mensagens de autoria do chamador no canal foram excluídas
403resposta de erroChamador não está em modo sudo (SUDO_MODE_REQUIRED)
403resposta de erroChamador não pode ver o canal de servidor (MISSING_PERMISSIONS)
403resposta de erroRestrição de idade no canal (NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroCanal não existe ou indisponível

Cada mensagem correspondente, com anexos e reações, é excluída permanentemente e removida das buscas. Emite um Dispatch de Message Delete Bulk para cada lote de no máximo 100 mensagens.

Não emite Channel Pins Update nem Message Delete individuais, e não grava log de auditoria.

10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:bulk_delete::channel_id.

GET/v1/channels/{channel_id}/messages/pinsBot

Retorna um objeto de página de fixados de canal com uma página de mensagens fixadas e seus horários de fixação.

  • O chamador deve conseguir ver o canal e atender ao requisito de verificação de idade.
  • O canal deve conter texto.
  • Chamadores de servidor sem READ_MESSAGE_HISTORY veem apenas fixados com mensagens no limite de histórico do servidor ou após ele (página vazia se não houver limite).
CampoTipoDescrição
channel_idsnowflakeO ID do canal cujos fixados são retornados
CampoTipoDescrição
limit?integerNúmero de fixados a retornar (1-50, padrão 50)
before?ISO8601 timestampRetornar fixados anteriores a este horário (padrão horário atual)
StatusCorpoCondição
200página de fixados de canal objectPágina de fixados foi retornada
400resposta de erroCaminho/cursor inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFalta VIEW_CHANNEL (MISSING_PERMISSIONS) ou verificação de idade (NSFW_CONTENT_AGE_RESTRICTED)
404resposta de erroCanal não existe ou chamador não é destinatário do canal privado

Confirmar fixados é uma operação separada: Confirmar mensagens fixadas.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.

PUT/v1/channels/{channel_id}/pins/{message_id}BotAudit reason

Fixa uma mensagem DEFAULT ou REPLY. Retorna 204 com corpo vazio em caso de sucesso. Emite eventos de Gateway Message Update, Channel Pins Update e Message Create.

  • Chamador de servidor requer PIN_MESSAGES e acesso ao canal.
  • Chamador de servidor sem READ_MESSAGE_HISTORY fixa apenas mensagens no limite de histórico do servidor ou após ele.
  • Chamador em mensagem direta individual deve atender à política de mensagens diretas do destinatário (falha com 400 CANNOT_SEND_MESSAGES_TO_USER se negado).
  • Mensagens diretas em grupo e notas pessoais não aplicam política de envio.
  • Operação idempotente.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem a fixar
StatusCorpoCondição
204vazioA mensagem já estava fixada ou foi fixada
400resposta de erroCaminho inválido (INVALID_FORM_BODY)
400resposta de erroCanal não possui mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
400resposta de erroAlvo é mensagem de sistema (CANNOT_MODIFY_SYSTEM_WEBHOOK)
400resposta de erroPolítica de mensagens diretas nega o chamador (CANNOT_SEND_MESSAGES_TO_USER)
403resposta de erroFaltam VIEW_CHANNEL ou PIN_MESSAGES (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal/mensagem não existe, ou mensagem está fora do limite de histórico

Fixar mensagem não fixada define seu horário de fixação, avança o horário do último fixado do canal e armazena uma mensagem de sistema CHANNEL_PINNED_MESSAGE de autoria do chamador referenciando a mensagem fixada.

Emite Message Update para o alvo, Channel Pins Update para o canal e Message Create para a mensagem de sistema.

Em servidor, grava uma entrada MESSAGE_PIN no log de auditoria com o motivo informado. Fixar mensagem já fixada não altera nada e não emite Dispatch.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.

DELETE/v1/channels/{channel_id}/pins/{message_id}BotAudit reason

Desfixa uma mensagem. Retorna 204 com corpo vazio em caso de sucesso. Emite eventos de Gateway Message Update e Channel Pins Update.

  • Autorização exatamente igual a Fixar mensagem.
  • Operação idempotente.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem a desfixar
StatusCorpoCondição
204vazioA mensagem já estava desfixada ou foi desfixada
400resposta de erroCaminho inválido (INVALID_FORM_BODY)
400resposta de erroCanal não possui mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
400resposta de erroAlvo é mensagem de sistema (CANNOT_MODIFY_SYSTEM_WEBHOOK)
400resposta de erroPolítica de mensagens diretas nega o chamador (CANNOT_SEND_MESSAGES_TO_USER)
403resposta de erroFaltam VIEW_CHANNEL ou PIN_MESSAGES (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal/mensagem não existe, ou mensagem está fora do limite de histórico

Desfixar mensagem fixada limpa seu horário de fixação e emite Message Update e Channel Pins Update para sessões que veem o canal. Grava entrada MESSAGE_UNPIN no log de auditoria com o motivo fornecido.

Não cria mensagem de sistema. A mensagem CHANNEL_PINNED_MESSAGE criada na fixação original permanece no canal, e o horário do último fixado do canal fica inalterado.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.

POST/v1/channels/{channel_id}/pins/ackBot

Registra o horário atual de fixados do canal no estado de leitura da identidade autenticada. Retorna 204 com corpo vazio. Emite evento de Gateway Channel Pins ACK.

Sem corpo. O Decoding Chat confirma o horário do último fixado armazenado do próprio canal.

CampoTipoDescrição
channel_idsnowflakeO ID do canal cujo estado de fixados é confirmado
StatusCorpoCondição
204vazioEstado de fixados estava ausente ou foi confirmado
403resposta de erroTipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY)

Existindo horário de último fixado no canal, grava esse instante exato no estado de leitura do chamador. Emite um Channel Pins ACK com ID do canal e o timestamp para as sessões do próprio chamador, substituindo o valor anterior. Se o canal não existir ou nunca teve fixados, nada grava nem emite.

Se o Dispatch falhar, retorna 502, 503 ou 504 após a gravação. Trate como status desconhecido e reconcilie em leitura posterior.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id, compartilhado com Listar mensagens fixadas, Fixar mensagem e Desfixar mensagem.

O valor de caminho emoji é codificado via URI e tem de 1 a 64 caracteres. Emojis personalizados usam nome:id (ID decimal no final e nome antes do último dois-pontos). Outros valores decodificados são lidos como emoji Unicode.

O Decoding Chat valida o emoji por completo apenas ao criar um novo grupo de reações na mensagem. Emojis Unicode devem ser exatamente um emoji válido (caso contrário: NOT_A_VALID_UNICODE_EMOJI). Emojis personalizados devem existir (caso contrário: CUSTOM_EMOJI_NOT_FOUND). Outras operações de reação analisam sem validar, de modo que remover reação com emoji inválido é bem-sucedido silenciosamente.

Operações de reação são idempotentes e não gravam log de auditoria. Remoções emitem Dispatch quer a mensagem possua a reação ou não. Adicionar a própria reação, Remover a própria reação e Remover reação de outro usuário aceitam o parâmetro session_id, ecoado no Dispatch para correlacionar atualizações otimistas.

GET/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}Bot

Retorna um array simples de objetos de usuário parcial para uma reação.

  • Autorização, parâmetros de consulta e ordenação idênticos a Listar usuários de reação; o array é a mesma página retornada no campo items daquela operação.

Sinais de paginação vêm nos cabeçalhos de resposta: X-Has-More (true ou false) e X-Next-After (ID do último usuário no array, ausente se não houver mais páginas). Listar usuários de reação retorna os mesmos usuários com ambos os valores no corpo.

CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
CampoTipoDescrição
limit?integerNúmero de usuários a retornar (1-100, padrão 25)
after?snowflakeRetornar usuários após este cursor de ID de usuário
StatusCorpoCondição
200array[usuário parcial object]Usuários de reação foram retornados
400resposta de erroEntrada/emoji/paginação inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFalta VIEW_CHANNEL (MISSING_PERMISSIONS)
404resposta de erroCanal/mensagem não existe ou mensagem fora do limite de histórico

Emojis sem grupos de reações na mensagem retornam 200 com array vazio.

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

GET/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/usersBot

Retorna objeto de página de usuários de reação com usuários que adicionaram uma reação.

  • O chamador deve conseguir ver o canal de texto.
  • Chamador de servidor sem READ_MESSAGE_HISTORY lê apenas mensagens no limite de histórico do servidor ou após ele.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
CampoTipoDescrição
limit?integerNúmero de usuários a retornar (1-100, padrão 25)
after?snowflakeRetornar usuários após este cursor de ID de usuário
StatusCorpoCondição
200página de usuários de reação objectPágina de usuários de reação foi retornada
400resposta de erroEntrada/emoji/paginação inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFalta VIEW_CHANNEL (MISSING_PERMISSIONS)
404resposta de erroCanal/mensagem não existe ou mensagem fora do limite de histórico

Emojis sem grupos de reações na mensagem retornam 200 com items vazio, has_more false e next_after null.

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

PUT/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/@meBot

Adiciona a reação da identidade autenticada. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Add.

  • Chamador deve conseguir ver o canal de texto e não estar em timeout. Sem READ_MESSAGE_HISTORY em servidor, reage apenas a mensagens no limite de histórico ou após ele (nenhuma se não houver limite).
  • Chamadores não-bot devem ter e-mail verificado (caso contrário: 403 REACTION_EMAIL_VERIFICATION_REQUIRED).
  • Criar novo grupo de reação em servidor requer ADD_REACTIONS; juntar-se a grupo existente não requer.
  • Emojis personalizados de fora do servidor do canal requerem o direito feature_global_expressions (caso contrário: CUSTOM_EMOJIS_REQUIRE_PREMIUM_OUTSIDE_SOURCE).
  • Em canal de servidor, emoji personalizado requer USE_EXTERNAL_EMOJIS.
  • Chamador não-bot deve ter iniciado sessão (caso contrário: MUST_START_SESSION_BEFORE_SENDING).
  • Contas não reivindicadas reagem apenas em notas pessoais (caso contrário: 400 UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS).
  • Não aplica política de envio de mensagens diretas.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
CampoTipoDescrição
session_id?1stringID da sessão do Gateway de origem (1-64 caracteres)

1 Ver correlação de sessão de reação

Alcançar os limites de grupo e usuário para uma mensagem retorna 400 MAX_REACTIONS.

StatusCorpoCondição
204vazioReação já existia ou foi adicionada
400resposta de erroEntrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
400resposta de erroNão iniciou sessão (MUST_START_SESSION_BEFORE_SENDING)
400resposta de erroConta não reivindicada (UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS)
400resposta de erroEmoji Unicode inválido (NOT_A_VALID_UNICODE_EMOJI)
400resposta de erroEmoji personalizado desconhecido (CUSTOM_EMOJI_NOT_FOUND)
400resposta de erroEmoji externo requer direito premium (CUSTOM_EMOJIS_REQUIRE_PREMIUM_OUTSIDE_SOURCE)
400resposta de erroTeto de reações atingido (MAX_REACTIONS)
403resposta de erroFaltam VIEW_CHANNEL, ADD_REACTIONS ou USE_EXTERNAL_EMOJIS (MISSING_PERMISSIONS)
403resposta de erroEm timeout (COMMUNICATION_DISABLED)
403resposta de erroE-mail não verificado (REACTION_EMAIL_VERIFICATION_REQUIRED)
403resposta de erroReações temporariamente desativadas no servidor (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal/mensagem não existe ou mensagem fora do limite de histórico

Adicionar reação não possuída a cria e emite Message Reaction Add para sessões que veem o canal (com session_id). Adicionar reação já possuída não altera nada e não emite Dispatch.

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/@meBot

Remove a reação da própria identidade autenticada. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove.

  • O chamador deve conseguir ver o canal de texto e alcançar a mensagem no limite de histórico.
  • Remoções não reexecutam verificações de timeout, e-mail verificado ou validade de emoji.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
CampoTipoDescrição
session_id?1stringID da sessão do Gateway de origem (1-64 caracteres)

1 Ver correlação de sessão de reação

StatusCorpoCondição
204vazioReação estava ausente ou foi removida
400resposta de erroEntrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFalta VIEW_CHANNEL (MISSING_PERMISSIONS) ou reações desativadas (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou mensagem fora do limite de histórico

Mensagem inexistente retorna 204 em vez de 404.

Exclui a reação e emite Message Reaction Remove para sessões que veem o canal (com session_id).

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/{target_id}Bot

Remove a reação de um usuário específico. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove.

  • Chamador deve ver o canal de texto e alcançar a mensagem no limite de histórico.
  • Deve estar em canal de servidor e possuir MANAGE_MESSAGES (canais privados retornam 403 MISSING_PERMISSIONS).
  • MANAGE_MESSAGES é permissão elevada; sem autenticador registrado em servidor com nível MFA elevado, retorna 400 TWO_FACTOR_REQUIRED, a menos que seja dono do servidor.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
target_id1snowflakeO ID do usuário cuja reação será removida

1 Nomear o usuário autenticado pula a verificação de moderação (MANAGE_MESSAGES não é necessário)

CampoTipoDescrição
session_id?1stringID da sessão do Gateway de origem (1-64 caracteres)

1 Ver correlação de sessão de reação

StatusCorpoCondição
204vazioReação alvo estava ausente ou foi removida
400resposta de erroEntrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFaltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou mensagem fora do limite de histórico

Mensagem inexistente retorna 204 antes da verificação de MANAGE_MESSAGES. Reação alvo inexistente também retorna 204.

Exclui a reação do usuário alvo e emite Message Reaction Remove com o ID do usuário alvo para sessões que veem o canal (com session_id).

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}Bot

Remove todas as reações de um emoji. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove Emoji.

  • Chamador deve ver o canal de texto e alcançar a mensagem no limite de histórico.
  • Deve estar em canal de servidor e possuir MANAGE_MESSAGES (permissão elevada).
  • Sem autenticador registrado em servidor com nível MFA elevado, retorna 400 TWO_FACTOR_REQUIRED, a menos que seja dono do servidor.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
emojistringValor de caminho de emoji de reação codificado via URI
StatusCorpoCondição
204vazioReações do emoji estavam ausentes ou foram removidas
400resposta de erroCaminho/emoji inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFaltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou mensagem fora do limite de histórico

Exclui todas as reações do emoji e emite um Message Reaction Remove Emoji para sessões que veem o canal. Não emite eventos individuais para usuários.

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

DELETE/v1/channels/{channel_id}/messages/{message_id}/reactionsBot

Remove todas as reações de uma mensagem. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove All.

  • Chamador deve ver o canal de texto e alcançar a mensagem no limite de histórico.
  • Deve estar em canal de servidor e possuir MANAGE_MESSAGES (permissão elevada).
  • Sem autenticador registrado em servidor com nível MFA elevado, retorna 400 TWO_FACTOR_REQUIRED, a menos que seja dono do servidor.
CampoTipoDescrição
channel_idsnowflakeO ID do canal
message_idsnowflakeO ID da mensagem
StatusCorpoCondição
204vazioReações estavam ausentes ou foram removidas
400resposta de erroParâmetros de caminho inválidos ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFaltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED)
404resposta de erroCanal não existe ou mensagem fora do limite de histórico

Exclui todas as reações da mensagem e emite um Message Reaction Remove All para sessões que veem o canal. Não emite eventos para grupos ou usuários individuais.

30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.

POST/v1/channels/{channel_id}/typingBot

Publica atividade de digitação em um canal de texto. Retorna 204 com corpo vazio. Emite evento de Gateway Typing Start.

  • Chamador deve possuir SEND_MESSAGES em canal de servidor e não estar em timeout.
  • Em canal privado, requer apenas acesso de destinatário (não aplica política de mensagens diretas).
CampoTipoDescrição
channel_idsnowflakeO ID do canal onde a digitação é exibida
StatusCorpoCondição
204vazioOperação de digitação foi aceita
400resposta de erroParâmetro de caminho inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL)
403resposta de erroFalta SEND_MESSAGES (MISSING_PERMISSIONS) ou chamador em timeout (COMMUNICATION_DISABLED)
404resposta de erroCanal não existe ou chamador não é destinatário em canal privado

Emite Typing Start com ID do canal, ID de usuário do chamador e timestamp Unix para sessões que veem o canal. Não cria estado durável; expira no cliente. Se o servidor tiver eventos de digitação desativados, retorna 204 sem emitir Dispatch.

20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:typing::channel_id.

POST/v1/channels/{channel_id}/messages/{message_id}/ack

Avança o estado de leitura do usuário autenticado até uma mensagem. Retorna 204 com corpo vazio. Emite evento de Gateway Message ACK.

  • Operação exclusiva para usuários; credencial de bot é recusada com 403 ACCESS_DENIED.
  • Não resolve canal nem mensagem; grava os identificadores fornecidos direto no estado de leitura do chamador.
CampoTipoDescrição
channel_id1snowflakeO ID do canal
message_id1snowflakeID da mensagem até a qual o canal é confirmado

1 Não precisam nomear itens existentes (armazenados como chaves e marcas d’água de leitura)

Corpo vazio é lido como {} (forma mínima válida).

CampoTipoDescrição
mention_count?1integerContagem de menções a armazenar para o canal (0-2.147.483.647, padrão 0)
manual?2booleanSe a confirmação foi iniciada explicitamente pelo usuário (padrão false)

1 Armazenado literalmente. Clientes confirmando parcialmente devem enviar a contagem de menções restantes acima da marca d’água; omitir o campo reseta a contagem armazenada para 0

2 Seleciona a regra de marca d’água descrita abaixo

StatusCorpoCondição
204vazioA mensagem foi confirmada
403resposta de erroChamador é um bot (retorna ACCESS_DENIED)

Atualiza o marcador de leitura e a contagem de menções do chamador, limpa notificações entregues até a marca d’água e emite Message ACK apenas para as sessões do próprio chamador.

Confirmações não manuais com message_id abaixo da marca d’água mantêm a marca d’água e a contagem inalteradas. O Dispatch reporta os valores armazenados.

100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:ack::channel_id.