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.
Resolução de canal
Seção intitulada “Resolução de canal”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.
Objeto de mensagem
Seção intitulada “Objeto de mensagem”Um objeto de mensagem é a forma armazenada completa de uma publicação em um canal.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID da mensagem |
| channel_id | snowflake | O ID do canal |
| author1 | usuário parcial object | O usuário creditado pela mensagem |
| webhook_id? | snowflake | ID do webhook de origem, presente apenas para mensagem de autoria de webhook |
| type | integer | Tipo de mensagem |
| flags | integer | Flags de mensagem |
| content | string | O texto da mensagem, vazio quando a mensagem possui apenas mídia |
| timestamp | ISO8601 timestamp | Horário de criação derivado do snowflake da mensagem |
| edited_timestamp | ?ISO8601 timestamp | Horário da edição mais recente, ou null quando a mensagem nunca foi editada |
| pinned | boolean | Se a mensagem está fixada |
| mention_everyone | boolean | Se a mensagem menciona everyone |
| tts2 | boolean | Se a mensagem solicitou conversão de texto em voz (text-to-speech) |
| mentions3 | array[usuário parcial object] | Os usuários que a mensagem menciona ativamente |
| mention_roles | array[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?3 | array[usuário parcial object] | Usuários referenciados por texto não notificável de conteúdo, embed e snapshot |
| embeds4 | array[embed object] | As prévias resolvidas ou fornecidas para a mensagem |
| attachments5 | array[anexo de mensagem object] | Os arquivos anexados à mensagem |
| stickers | array[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 object | Referência de resposta ou encaminhamento |
| message_snapshots? | array[snapshot de mensagem object] | As cópias imutáveis capturadas para um encaminhamento |
| nonce?6 | string | Nonce da mensagem fornecido pelo chamador, ecoado de volta ao remetente como uma string de 1 a 32 caracteres |
| call? | chamada de mensagem object | Estado de chamada anexado a uma mensagem de chamada |
| referenced_message?7 | ?mensagem object | Mensagem 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.
Exemplo
Seção intitulada “Exemplo”{ "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": []}Tipos de mensagem
Seção intitulada “Tipos de mensagem”| Valor | Nome | Descrição |
|---|---|---|
| 0 | DEFAULT1 2 | Mensagem comum |
| 1 | RECIPIENT_ADD | Mensagem de sistema de adição de destinatário em mensagem direta em grupo |
| 2 | RECIPIENT_REMOVE | Mensagem de sistema de remoção de destinatário em mensagem direta em grupo |
| 3 | CALL | Mensagem de sistema de chamada privada |
| 4 | CHANNEL_NAME_CHANGE | Mensagem de sistema de alteração de nome em mensagem direta em grupo |
| 5 | CHANNEL_ICON_CHANGE | Mensagem de sistema de alteração de ícone em mensagem direta em grupo |
| 6 | CHANNEL_PINNED_MESSAGE2 | Mensagem de sistema de fixação em canal |
| 7 | USER_JOIN2 | Mensagem de sistema de entrada de usuário |
| 19 | REPLY1 2 | Mensagem 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
Flags de mensagem
Seção intitulada “Flags de mensagem”| Valor | Nome | Descrição |
|---|---|---|
| 1 << 2 | SUPPRESS_EMBEDS1 | Suprimir a renderização de embeds |
| 1 << 12 | SUPPRESS_NOTIFICATIONS | Não gerar notificações normais de menção |
| 1 << 13 | VOICE_MESSAGE2 | Mensagem 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.
Objeto de anexo de mensagem
Seção intitulada “Objeto de anexo de mensagem”Um anexo é um arquivo armazenado em uma mensagem e servido pela entrega de mídia.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID do anexo |
| filename | string | O nome de arquivo armazenado com o anexo |
| title | ?string | Título de exibição, ou null quando nenhum estiver armazenado |
| description | ?string | Texto alternativo ou descrição, ou null quando nenhum estiver armazenado |
| content_type1 | string | O tipo de mídia detectado para o anexo |
| content_hash | ?string | O hash dos bytes armazenados do anexo, ou null quando nunca foram gerados |
| size | integer | O tamanho armazenado do anexo em bytes |
| url2 | ?string | URL pública assinada do anexo, ou null quando o anexo expirar |
| proxy_url2 | ?string | URL assinada do Media Proxy, ou null quando o anexo expirar |
| width?3 | integer | Largura em pixels para mídias visuais |
| height?3 | integer | Altura em pixels para mídias visuais |
| placeholder? | string | Indicador de posição de mídia codificado |
| flags | integer | Flags de anexo |
| nsfw? | boolean | Se a inspeção de mídia marcou o anexo como explícito |
| duration? | integer | Duração de áudio ou vídeo em segundos |
| waveform? | string | Forma de onda de voz codificada em Base64 |
| expires_at4 | ?ISO8601 timestamp | Horário de expiração da URL do anexo, ou null quando não houver prazo de expiração registrado |
| expired?5 | boolean | Se 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.
URLs assinadas de anexos
Seção intitulada “URLs assinadas de anexos”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.
| Campo | Tipo | Descrição |
|---|---|---|
| ex | string | O 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 |
| is | string | O horário Unix em segundos em que a URL foi emitida, como 8 dígitos hexadecimais em minúsculas |
| hm | string | A assinatura sobre ex, is, uc e o caminho do anexo, como 64 dígitos hexadecimais em minúsculas |
| uc | string | Presente 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.
URLs de anexos de pacotes de dados
Seção intitulada “URLs de anexos de pacotes de dados”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=dpUma 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.
Exemplo
Seção intitulada “Exemplo”{ "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}Flags de anexo
Seção intitulada “Flags de anexo”| Valor | Nome | Descrição |
|---|---|---|
| 1 << 3 | IS_SPOILER | Anexo é apresentado como spoiler |
| 1 << 4 | CONTAINS_EXPLICIT_MEDIA | Anexo contém mídia explícita |
| 1 << 5 | IS_ANIMATED | Anexo é animado |
Objeto de emoji
Seção intitulada “Objeto de emoji”Um emoji é um emoji personalizado de servidor identificado por ID ou um emoji Unicode padrão.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id? | snowflake | O ID do emoji personalizado, ausente para emoji Unicode |
| name1 | string | Nome do emoji ou valor Unicode |
| animated? | boolean | Se 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
Objeto de reação
Seção intitulada “Objeto de reação”Um objeto de reação resume um grupo de emojis em uma mensagem. O Decoding Chat possui apenas reações comuns.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| emoji | emoji object | O emoji que este grupo conta |
| count1 | integer | O número de usuários que adicionaram este emoji |
| me?2 | boolean | Se 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.
Exemplo
Seção intitulada “Exemplo”{ "emoji": { "id": "1501314428688991234", "name": "party_parrot", "animated": true }, "count": 7, "me": true}Objeto de referência de mensagem
Seção intitulada “Objeto de referência de mensagem”Uma referência de mensagem nomeia a mensagem para a qual uma resposta aponta ou da qual um encaminhamento foi retirado.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal referenciado |
| message_id | snowflake | O ID da mensagem referenciada |
| guild_id? | snowflake | O ID do servidor referenciado, presente apenas para mensagem de servidor |
| type | integer | Tipo de referência de mensagem |
Tipos de referência de mensagem
Seção intitulada “Tipos de referência de mensagem”| Valor | Nome | Descrição |
|---|---|---|
| 0 | DEFAULT1 | Referência de resposta |
| 1 | FORWARD2 | Referê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
Objeto de entrada de referência de mensagem
Seção intitulada “Objeto de entrada de referência de mensagem”Uma entrada de referência de mensagem nomeia a mensagem de origem à qual uma requisição de criação responde ou encaminha.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| message_id | snowflake | O ID da mensagem referenciada |
| channel_id?1 | snowflake | O ID do canal referenciado, obrigatório para referência de encaminhamento |
| guild_id? | snowflake | O ID do servidor referenciado quando aplicável |
| type? | integer | Tipo de referência de mensagem, com padrão DEFAULT |
| attachment_ids?2 | array[snowflake] | No máximo 10 IDs de anexos selecionados para encaminhamento |
| embed_indices?2 | array[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
Objeto de snapshot de mensagem
Seção intitulada “Objeto de snapshot de mensagem”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.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| content? | string | Texto em snapshot |
| timestamp | ISO8601 timestamp | Horário de criação original |
| edited_timestamp? | ISO8601 timestamp | Horário de edição original, omitido quando a mensagem original nunca foi editada |
| mentions?1 | array[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?2 | array[anexo de mensagem object] | Anexos em snapshot |
| stickers? | array[item de sticker object] | Stickers em snapshot |
| type | integer | Tipo de mensagem original |
| flags | integer | Flags 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.
Objeto de chamada de mensagem
Seção intitulada “Objeto de chamada de mensagem”Uma chamada de mensagem possui os participantes e o horário de encerramento da chamada que uma mensagem CALL registra.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| participants | array[snowflake] | IDs dos usuários participantes atuais |
| ended_timestamp | ?ISO8601 timestamp | Horário de encerramento da chamada, ou null enquanto a chamada continuar ativa |
Objeto de menção de canal
Seção intitulada “Objeto de menção de canal”Uma menção de canal nomeia um canal vinculado por ID no conteúdo da mensagem.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID do canal mencionado |
| name | string | Nome do canal mencionado |
| type | integer | Tipo de canal |
Objeto de item de sticker
Seção intitulada “Objeto de item de sticker”Cada item de sticker é o registro reduzido de sticker em uma mensagem.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID do sticker |
| name | string | Nome do sticker |
| animated | boolean | Se o sticker é animado |
| nsfw? | boolean | Se o sticker está classificado como explícito |
Objeto de embed
Seção intitulada “Objeto de embed”Um embed é uma prévia renderizada em uma mensagem, resolvida pelo desdobrador de links (unfurler) ou fornecida como entrada rich.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| type | string | Tipo de embed |
| title? | string | Título do embed |
| description? | string | Descrição do embed |
| url? | string | URL de destino do embed |
| timestamp? | ISO8601 timestamp | Horário do embed |
| color? | integer | Cor do embed |
| author? | autor do embed object | Autor do embed |
| provider?1 | provedor do embed object | Provedor externo |
| thumbnail? | mídia de embed object | Imagem em miniatura |
| image? | mídia de embed object | Imagem principal |
| video?1 | mídia de embed object | Mídia de vídeo |
| audio?1 | mídia de embed object | Mídia de áudio |
| footer? | rodapé de embed object | Rodapé do embed |
| fields? | array[campo de embed object] | Campos do embed |
| nsfw? | boolean | Se o embed contém mídia explícita |
| html?1 | string | Marcação oEmbed higienizada para um renderizador especializado confiável |
| html_width?1 | integer | Largura em pixels preferida da marcação oEmbed higienizada |
| html_height?1 | integer | Altura em pixels preferida da marcação oEmbed higienizada |
| children?1 | array[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.
Exemplo
Seção intitulada “Exemplo”{ "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}]}Tipos de embed
Seção intitulada “Tipos de embed”| Valor | Descrição |
|---|---|
| rich | Um embed construído pelo próprio unfurler e o tipo de toda entrada de rich embed aceita |
| link | Uma prévia de link genérica com metadados de página sem mídia resolvida |
| image | Uma prévia de imagem resolvida a partir de uma URL vinculada |
| video | Uma prévia de vídeo resolvida a partir de uma URL vinculada |
| audio | Uma prévia de áudio resolvida a partir de uma URL vinculada |
| gifv | Uma prévia de vídeo em loop animado |
| article | Uma prévia de artigo ou página de enciclopédia |
| bluesky | Uma prévia de publicação do Bluesky |
Objeto de autor de embed
Seção intitulada “Objeto de autor de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do autor |
| url? | string | Link do autor |
| icon_url? | string | URL do ícone do autor |
| proxy_icon_url? | string | URL de proxy do ícone do autor |
Objeto de mídia de embed
Seção intitulada “Objeto de mídia de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| url | string | URL da mídia |
| proxy_url1 | string | URL do Media Proxy |
| width? | integer | Largura em pixels |
| height? | integer | Altura em pixels |
| duration? | integer | Duração em segundos |
| description? | string | Descrição da mídia |
| content_type? | string | Tipo de mídia |
| content_hash? | string | Hash do conteúdo |
| placeholder? | string | Indicador de posição de mídia codificado |
| flags? | integer | Flags 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.
Objeto de rodapé de embed
Seção intitulada “Objeto de rodapé de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| text | string | Texto do rodapé |
| icon_url? | string | URL do ícone do rodapé |
| proxy_icon_url? | string | URL de proxy do ícone do rodapé |
Objeto de campo de embed
Seção intitulada “Objeto de campo de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do campo |
| value | string | Valor do campo |
| inline | boolean | Se o campo pode renderizar em linha |
Objeto de provedor de embed
Seção intitulada “Objeto de provedor de embed”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.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do provedor |
| url? | string | URL do provedor |
Objeto de menções permitidas
Seção intitulada “Objeto de menções permitidas”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.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| parse?1 2 | array[string] | Categorias de menção de valores de análise de menções permitidas |
| users?2 | array[snowflake] | No máximo 100 IDs de usuários autorizados a se tornarem menções ativas |
| roles?2 | array[snowflake] | No máximo 100 IDs de cargos autorizados a se tornarem menções ativas |
| replied_user?3 | boolean | Se 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.
Valores de análise de menções permitidas
Seção intitulada “Valores de análise de menções permitidas”| Valor | Descrição |
|---|---|
| users | Analisar menções de usuários |
| roles | Analisar menções de cargos |
| everyone | Analisar menções de @everyone e @here |
Objetos de entrada de anexo de mensagem
Seção intitulada “Objetos de entrada de anexo de mensagem”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.
Objeto de anexo pré-enviado
Seção intitulada “Objeto de anexo pré-enviado”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id1 | integer | integer string | Posição do anexo |
| filename | string | Nome de arquivo do anexo |
| upload_filename2 | string | Chave de upload opaca retornada por Solicitar URLs de upload de anexos |
| file_size1 | integer | Contagem de bytes enviados |
| content_type | string | Tipo de mídia de 1 a 255 caracteres |
| title? | ?string | Título de exibição (1-1.024 caracteres) |
| description? | ?string | Descrição (1-4.096 caracteres) |
| duration?3 | ?integer | Duração da mídia de voz em segundos (0-2.147.483.647) |
| waveform?3 | ?string | Forma de onda em Base64 de 1 a 4.096 caracteres |
| flags? | integer | Flags 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.
Objeto de metadados de anexo multipart direto
Seção intitulada “Objeto de metadados de anexo multipart direto”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id1 | integer | integer string | Índice baseado em zero files[N] |
| filename | string | Nome de arquivo de exibição |
| content_type? | string | Tipo de mídia de 1 a 255 caracteres |
| title? | ?string | Título de exibição (1-1.024 caracteres) |
| description? | ?string | Descrição (1-4.096 caracteres) |
| flags? | integer | Flags de anexo, com padrão 0 |
| duration?2 | ?integer | Duração da mídia de voz em segundos (0-2.147.483.647) |
| waveform?2 | ?string | Forma 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.
Objeto de referência de anexo existente
Seção intitulada “Objeto de referência de anexo existente”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | integer | ID de anexo existente ou posição de anexo |
| title? | ?string | Título de exibição de substituição (1-1.024 caracteres) |
| description? | ?string | Descrição de substituição (1-4.096 caracteres) |
| flags?1 | integer | Flags de anexo, aceitos e descartados |
| filename?1 2 | string | Nome de arquivo de exibição, aceito e descartado |
| duration?1 2 | ?integer | Duração em segundos (0-2.147.483.647), aceito e descartado |
| waveform?1 2 | ?string | Forma 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
Objetos de entrada de rich embed
Seção intitulada “Objetos de entrada de rich embed”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.
Objeto de rich embed
Seção intitulada “Objeto de rich embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| url? | ?string | URL de destino do embed (1-2.048 caracteres) |
| title? | ?string | Título com no máximo 256 caracteres |
| color? | ?integer | Cor do embed |
| timestamp? | ?ISO8601 timestamp | Horário do embed |
| description? | ?string | Descrição (1-4.096 caracteres, string vazia é tratada como ausente) |
| author?1 | ?entrada de autor de embed object | Metadados do autor |
| image?1 | ?entrada de mídia de embed object | Metadados da imagem principal |
| thumbnail?1 | ?entrada de mídia de embed object | Metadados da miniatura |
| footer?1 | ?entrada de rodapé de embed object | Metadados 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
Objeto de entrada de autor de embed
Seção intitulada “Objeto de entrada de autor de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do autor (1-256 caracteres) |
| url? | ?string | Link do autor (1-2.048 caracteres) |
| icon_url? | ?string | URL do ícone do autor (1-2.048 caracteres) |
Objeto de entrada de mídia de embed
Seção intitulada “Objeto de entrada de mídia de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| url1 | string | URL de mídia ou referência de anexo |
| description? | ?string | Descriçã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.
Objeto de entrada de rodapé de embed
Seção intitulada “Objeto de entrada de rodapé de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| text | string | Texto do rodapé (1-2.048 caracteres) |
| icon_url? | ?string | URL do ícone do rodapé (1-2.048 caracteres) |
Objeto de entrada de campo de embed
Seção intitulada “Objeto de entrada de campo de embed”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do campo (1-256 caracteres) |
| value | string | Valor do campo com no máximo 1.024 caracteres |
| inline? | boolean | Se o campo pode renderizar em linha, com padrão false |
Objetos de upload de anexo
Seção intitulada “Objetos de upload de anexo”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.
Objeto de item de requisição de upload de anexo
Seção intitulada “Objeto de item de requisição de upload de anexo”Um upload declarado dentro do corpo de Solicitar URLs de upload de anexos.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id1 | integer | Posição do anexo selecionada pelo chamador (0-2.147.483.647) |
| filename | string | Nome do arquivo a enviar |
| file_size1 | integer | Contagem de bytes declarada (0-9.007.199.254.740.991) |
| content_type2 | string | Tipo 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.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | Posição do anexo ecoada da requisição |
| filename | string | Nome do arquivo ecoado da requisição |
| upload_filename1 | string | Chave de upload opaca de 1 a 4.096 caracteres |
| file_size | integer | Contagem de bytes declarada ecoada da requisição |
| content_type | string | Tipo de mídia derivado de filename |
| upload_mode | string | Sempre singlepart |
| upload_url2 | string | URL 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.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | Posição do anexo ecoada da requisição |
| filename | string | Nome do arquivo ecoado da requisição |
| upload_filename | string | Chave de upload opaca de 1 a 4.096 caracteres |
| file_size | integer | Contagem de bytes declarada ecoada da requisição |
| content_type | string | Tipo de mídia derivado de filename |
| upload_mode | string | Sempre multipart |
| upload_id | string | Identificador de upload multipart do armazenamento de objetos de 1 a 1.024 caracteres |
| part_size1 | integer | Tamanho em bytes de todas as partes, exceto a última |
| parts | array[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
Objeto de parte de upload de anexo
Seção intitulada “Objeto de parte de upload de anexo”Uma parte pré-assinada de um plano de upload multipart.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| part_number | integer | Número da parte baseado em 1 |
| upload_url1 | string | URL 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
Objeto de item de conclusão de upload multipart
Seção intitulada “Objeto de item de conclusão de upload multipart”Um upload planejado nomeado em um corpo de Concluir upload de anexo.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| upload_filename | string | Chave de upload opaca retornada quando o upload foi planejado |
| upload_id | string | Identificador de upload multipart retornado quando o upload foi planejado |
Objeto de URL de anexo atualizada
Seção intitulada “Objeto de URL de anexo atualizada”Um resultado de Atualizar URLs de anexos.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| original | string | A URL exatamente como foi enviada |
| refreshed1 | string | A 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.
Objeto de fixado de canal
Seção intitulada “Objeto de fixado de canal”Um fixado de canal associa uma mensagem fixada ao horário em que foi fixada.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| message1 | mensagem object | A mensagem para a qual o fixado aponta |
| pinned_at | ISO8601 timestamp | Horá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
Objeto de página de fixados de canal
Seção intitulada “Objeto de página de fixados de canal”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| items1 | array[fixado de canal object] | Página atual de fixados |
| has_more | boolean | Se 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.
Objeto de página de usuários de reação
Seção intitulada “Objeto de página de usuários de reação”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| items | array[usuário parcial object] | Usuários em ordem crescente de ID |
| has_more | boolean | Se existe outra página |
| next_after1 | ?snowflake | Cursor 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
Objeto de requisição de mensagens em lote
Seção intitulada “Objeto de requisição de mensagens em lote”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| limit | integer | Número de mensagens a retornar (1-50) |
| before? | snowflake | Retornar mensagens anteriores a este ID |
| after? | snowflake | Retornar mensagens posteriores a este ID |
| around? | snowflake | Retornar uma janela centrada neste ID |
Objeto de canal de mensagens em lote
Seção intitulada “Objeto de canal de mensagens em lote”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| messages | array[mensagem object] | Janela de mensagens em ordem cronológica inversa |
Listar mensagens do canal
Seção intitulada “Listar mensagens do canal”GET/v1/channels/{channel_id}/messagesRetorna um array em ordem cronológica inversa de objetos de mensagem. Requer VIEW_CHANNEL.
Limitações
Seção intitulada “Limitações”- Ler histórico em um canal de servidor requer READ_MESSAGE_HISTORY.
- Um chamador de servidor sem
READ_MESSAGE_HISTORYvê apenas mensagens criadas no limite de histórico de mensagens do servidor ou após ele.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| limit? | integer | Número de mensagens a retornar (1-100, padrão 50) |
| before?1 | snowflake | Retornar mensagens anteriores a este ID |
| after?1 | snowflake | Retornar mensagens posteriores a este ID |
| around? | snowflake | Retornar 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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | array[mensagem object] | Janela de mensagens foi retornada |
| 403 | resposta de erro | Chamador não possui VIEW_CHANNEL (retorna MISSING_PERMISSIONS), ou falta verificação de idade para o canal (retorna NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Canal não existe ou o chamador não é destinatário do canal privado |
Rate limit
Seção intitulada “Rate limit”100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:messages:read::channel_id.
Listar mensagens de múltiplos canais
Seção intitulada “Listar mensagens de múltiplos canais”POST/v1/channels/messages/bulkRetorna um objeto de resposta de mensagens em lote contendo janelas de mensagens delimitadas de vários canais.
Limitações
Seção intitulada “Limitações”- 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.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| requests1 | array[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
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| channels1 | array[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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Todas as janelas solicitadas foram retornadas |
| 403 | resposta de erro | Chamador é um bot (retorna ACCESS_DENIED) |
| 403 | resposta de erro | Chamador não possui VIEW_CHANNEL para um canal solicitado (retorna MISSING_PERMISSIONS) |
| 403 | resposta de erro | Faltou verificação de idade para um canal solicitado (retorna NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Um canal solicitado não existe ou o chamador não é destinatário do canal privado |
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado, no bucket channel:messages:bulk_read.
Obter mensagem
Seção intitulada “Obter mensagem”GET/v1/channels/{channel_id}/messages/{message_id}Retorna um objeto de mensagem. Requer VIEW_CHANNEL.
Limitações
Seção intitulada “Limitações”- Em um canal de servidor sem READ_MESSAGE_HISTORY, uma mensagem criada antes do limite de histórico do servidor é reportada como 404
UNKNOWN_MESSAGEem vez de 403.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem a retornar |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | mensagem object | A mensagem foi retornada |
| 403 | resposta de erro | Chamador não possui VIEW_CHANNEL (retorna MISSING_PERMISSIONS), ou falta verificação de idade (retorna NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Canal ou mensagem não existe, ou a mensagem está fora do limite de histórico do chamador |
Rate limit
Seção intitulada “Rate limit”100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:read::channel_id.
Solicitar URLs de upload de anexos
Seção intitulada “Solicitar URLs de upload de anexos”POST/v1/channels/{channel_id}/attachmentsPlaneja de 1 a 10 uploads de anexos. Retorna um objeto de upload de parte única ou múltiplas partes para cada declaração.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal de mensagens alvo |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| attachments | array[item de requisição de upload de anexo object] | Declarações de upload de anexo (1-10 entradas) |
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| attachments1 | array[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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Planos de upload foram emitidos |
| 400 | resposta de erro | Corpo, declaração ou contagem inválida (retorna INVALID_FORM_BODY) |
| 400 | resposta de erro | Canal não suporta mensagens (retorna CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 400 | resposta de erro | Tamanho declarado excede o limite (retorna FILE_SIZE_TOO_LARGE) |
| 403 | resposta de erro | Faltam permissões SEND_MESSAGES ou ATTACH_FILES (retorna MISSING_PERMISSIONS) |
| 403 | resposta de erro | Chamador está em timeout (retorna COMMUNICATION_DISABLED) |
| 403 | resposta de erro | Uploads pré-assinados desativados na instância (retorna FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal não existe ou indisponível (UNKNOWN_CHANNEL), ou conta não existe (UNKNOWN_USER) |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:attachment:upload::channel_id.
Concluir upload de anexo
Seção intitulada “Concluir upload de anexo”POST/v1/channels/{channel_id}/attachments/completeConclui de 1 a 10 uploads multipart após o envio de todas as partes. Retorna suas chaves de upload.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal vinculado aos uploads |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| uploads | array[item de conclusão de upload multipart object] | Uploads a finalizar (1-10 entradas) |
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| uploads | array[object] | Uma entrada para cada upload concluído, contendo upload_filename |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Todos os uploads multipart foram concluídos |
| 400 | resposta de erro | Corpo inválido, ou upload não é multipart pendente do chamador no canal (código UPLOADED_ATTACHMENT_NOT_FOUND) |
| 400 | resposta de erro | Nenhuma parte foi enviada (código NO_UPLOADED_PARTS_TO_FINALIZE) |
| 400 | resposta de erro | Bytes enviados excedem o limite (retorna FILE_SIZE_TOO_LARGE) |
| 403 | resposta de erro | Faltam permissões SEND_MESSAGES ou ATTACH_FILES (retorna MISSING_PERMISSIONS) |
| 403 | resposta de erro | Chamador está em timeout (retorna COMMUNICATION_DISABLED) |
| 403 | resposta de erro | Uploads pré-assinados desativados na instância (retorna FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal não existe ou indisponível (UNKNOWN_CHANNEL), ou conta não existe (UNKNOWN_USER) |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação disponibiliza cada upload concluído para uma mensagem. Ela não cria mensagem.
Rate limit
Seção intitulada “Rate limit”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.
Atualizar URLs de anexos
Seção intitulada “Atualizar URLs de anexos”POST/v1/attachments/refresh-urlsAssina 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.
Limitações
Seção intitulada “Limitações”- 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.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| attachment_urls1 | array[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
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| refreshed_urls1 | array[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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Todas as URLs foram processadas |
| 400 | resposta de erro | Corpo, contagem de URLs ou tamanho de URL inválido (retorna INVALID_FORM_BODY) |
| 401 | resposta de erro | Credencial ausente ou inválida (retorna UNAUTHORIZED) |
| 403 | resposta de erro | Chamador apresenta credencial bearer (retorna ACCESS_DENIED) |
| 403 | resposta de erro | Conta possui ação obrigatória pendente (retorna ACCOUNT_SUSPICIOUS_ACTIVITY) |
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado, no bucket attachment:refresh_urls.
Criar mensagem
Seção intitulada “Criar mensagem”POST/v1/channels/{channel_id}/messagesCria 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.
Limitações
Seção intitulada “Limitações”- 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_MESSAGESantes 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal alvo |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| nonce?1 | string | integer | Identificador do chamador como string (1-32 caracteres) ou inteiro seguro não negativo |
| content?2 | ?string | Texto da mensagem |
| embeds?6 | array[rich embed object] | Entradas de rich embed |
| attachments?7 | array[anexo pré-enviado object] | Referências de anexos |
| message_reference? | ?entrada de referência de mensagem object | Referência de resposta ou encaminhamento |
| allowed_mentions? | ?menções permitidas object | Política de menções ativas |
| flags?3 | integer | Flags de mensagem, com padrão 0 |
| favorite_meme_id?4 | ?snowflake | Meme favorito a anexar |
| sticker_ids? | ?array[snowflake] | No máximo 3 IDs de stickers |
| tts?5 | boolean | Se 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.
Corpo multipart
Seção intitulada “Corpo multipart”| Campo | Tipo | Descrição |
|---|---|---|
| payload_json? | string | Codificação JSON do corpo da mensagem, padrão {} quando ausente |
| files[N]?1 2 | binary | Arquivo de anexo direto no índice baseado em zero N |
| content? | string | Sobrepõe content em payload_json |
| nonce? | string | Sobrepõe nonce em payload_json |
| tts? | string | Sobrepõe tts em payload_json, analisado de true ou false |
| flags? | string | Sobrepõe flags em payload_json, analisado como inteiro decimal |
| favorite_meme_id? | string | Sobrepõe favorite_meme_id em payload_json |
| sticker_ids? | string | Sobrepõ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 arquivo | Erro |
|---|---|
| Índice menor que 0 ou maior que 10000 | FILE_INDEX_EXCEEDS_MAXIMUM |
| Limite de anexos resolvido é 0 | ATTACHMENTS_NOT_ALLOWED_FOR_MESSAGE |
| Índice igual ou superior ao limite resolvido | FILE_INDEX_EXCEEDS_MAXIMUM |
| Índice repetido entre campos | DUPLICATE_FILE_INDEX |
| Mais de um arquivo sob o mesmo índice | MULTIPLE_FILES_FOR_INDEX_NOT_ALLOWED |
| Mais arquivos que o limite resolvido | TOO_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 voz | Erro |
|---|---|
| Conteúdo presente | VOICE_MESSAGES_CANNOT_HAVE_CONTENT |
| Embeds presentes | VOICE_MESSAGES_CANNOT_HAVE_EMBEDS |
| Meme favorito presente | VOICE_MESSAGES_CANNOT_HAVE_FAVORITE_MEMES |
| Stickers presentes | VOICE_MESSAGES_CANNOT_HAVE_STICKERS |
| Quantidade de anexos diferente de um | VOICE_MESSAGES_REQUIRE_SINGLE_ATTACHMENT |
Faltando waveform | VOICE_MESSAGES_ATTACHMENT_WAVEFORM_REQUIRED |
Faltando duration | VOICE_MESSAGES_ATTACHMENT_DURATION_REQUIRED |
| Duração excede o limite resolvido | VOICE_MESSAGES_DURATION_EXCEEDS_LIMIT |
O limite max_voice_message_duration resolvido tem padrão de 1.200 segundos.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | mensagem object | A mensagem foi criada |
| 400 | resposta de erro | Erro de validação no corpo, formulário, conteúdo, referência, menção, anexo, embed, sticker ou mensagem de voz |
| 400 | resposta de erro | Política de mensagens diretas do destinatário nega o envio (CANNOT_SEND_MESSAGES_TO_USER) |
| 400 | resposta de erro | Modo lento nega o envio (SLOWMODE_RATE_LIMITED) |
| 403 | resposta de erro | Faltam permissões necessárias (MISSING_PERMISSIONS) |
| 403 | resposta de erro | Em timeout (COMMUNICATION_DISABLED) |
| 403 | resposta de erro | Restrição de idade do canal (NSFW_CONTENT_AGE_RESTRICTED) |
| 403 | resposta de erro | Envio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal, 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.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:create::channel_id.
Modificar mensagem
Seção intitulada “Modificar mensagem”PATCH/v1/channels/{channel_id}/messages/{message_id}Modifica uma mensagem. Retorna o objeto de mensagem atualizado. Emite um evento de Gateway Message Update.
Limitações
Seção intitulada “Limitações”- O alvo deve ser uma mensagem
DEFAULTouREPLY; outros tipos falham com 400CANNOT_MODIFY_SYSTEM_WEBHOOK. - Mensagens com snapshots de mensagem não podem ser editadas pelo autor (código
MESSAGES_WITH_SNAPSHOTS_CANNOT_BE_EDITED). Moderadores comMANAGE_MESSAGESainda podem alternarSUPPRESS_EMBEDSe 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_EMBEDSe metadados de anexos existentes. Edições não autorizadas falham com 403CANNOT_EDIT_OTHER_USER_MESSAGE. MANAGE_MESSAGESé uma permissão elevada; sem autenticador registrado em servidor com nível MFA elevado, retorna 400TWO_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_LOCKEDeRetry-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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem a modificar |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| content? | ?string | Texto de substituição sob os mesmos limites de criação |
| embeds?1 | array[rich embed object] | Coleção de embeds substituta |
| allowed_mentions?2 | ?menções permitidas object | Política de menções ativas substituta |
| flags?3 | integer | Flags de mensagem substitutos |
| attachments?1 | array[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.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | mensagem object | A mensagem foi modificada |
| 400 | resposta de erro | Dados inválidos ou edição de mensagem com snapshots (MESSAGES_WITH_SNAPSHOTS_CANNOT_BE_EDITED) |
| 403 | resposta de erro | Não é autor e não pode moderar (CANNOT_EDIT_OTHER_USER_MESSAGE) |
| 403 | resposta de erro | Forneceu message_snapshots ou faltam EMBED_LINKS/ATTACH_FILES (MISSING_PERMISSIONS) |
| 403 | resposta de erro | Chamador em timeout (COMMUNICATION_DISABLED) |
| 403 | resposta de erro | Restrição de idade (NSFW_CONTENT_AGE_RESTRICTED) |
| 403 | resposta de erro | Envio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal ou mensagem não existe |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:update::channel_id.
Limpar estado de leitura do canal
Seção intitulada “Limpar estado de leitura do canal”DELETE/v1/channels/{channel_id}/messages/ackExclui o registro de estado de leitura da identidade autenticada para um canal. Retorna 204 com corpo vazio em caso de sucesso.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal cujo estado de leitura é excluído |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Estado de leitura estava ausente ou foi excluído |
| 403 | resposta de erro | Tipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY) |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”40 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:read_state:delete::channel_id.
Excluir mensagem
Seção intitulada “Excluir mensagem”DELETE/v1/channels/{channel_id}/messages/{message_id}Exclui uma mensagem. Retorna 204 com corpo vazio em caso de sucesso. Emite evento de Gateway Message Delete.
Limitações
Seção intitulada “Limitações”- 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_MESSAGESsem autenticador registrado recebem 400TWO_FACTOR_REQUIREDem servidores com nível MFA elevado, a menos que sejam donos do servidor.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem a excluir |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | A mensagem foi excluída |
| 403 | resposta de erro | Faltam autoria ou permissões de servidor, ou mensagem não é excluível (MISSING_PERMISSIONS) |
| 403 | resposta de erro | Falta verificação de idade no canal (NSFW_CONTENT_AGE_RESTRICTED) |
| 403 | resposta de erro | Envio temporariamente desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal ou mensagem não existe |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:delete::channel_id.
Excluir anexo de mensagem
Seção intitulada “Excluir anexo de mensagem”DELETE/v1/channels/{channel_id}/messages/{message_id}/attachments/{attachment_id}Exclui um anexo da mensagem do próprio chamador. Retorna 204 com corpo vazio em caso de sucesso. Emite evento de Gateway Message Update.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem proprietária |
| attachment_id | snowflake | O ID do anexo a excluir |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Anexo ou mensagem vazia resultante foi excluída |
| 403 | resposta de erro | Não é autor (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal ou mensagem não existe, ou anexo não encontrado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:delete::channel_id.
Excluir mensagens em massa
Seção intitulada “Excluir mensagens em massa”POST/v1/channels/{channel_id}/messages/bulk-deleteExclui 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.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal de servidor |
Corpo JSON
Seção intitulada “Corpo JSON”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.
| Campo | Tipo | Descrição |
|---|---|---|
| message_ids?1 | array[snowflake] | IDs de mensagens a excluir (máx. 100 entradas) |
| messages?1 | array[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.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Mensagens foram excluídas |
| 400 | resposta de erro | Corpo/contagem inválidos, seleção vazia (MESSAGE_IDS_CANNOT_BE_EMPTY) ou canal privado (CANNOT_EXECUTE_ON_DM) |
| 403 | resposta de erro | Falta MANAGE_MESSAGES (MISSING_PERMISSIONS) ou verificação de idade (NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Canal não existe |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:bulk_delete::channel_id.
Limpar notas pessoais
Seção intitulada “Limpar notas pessoais”POST/v1/channels/{channel_id}/messages/purgeExclui 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.
Limitações
Seção intitulada “Limitações”- O canal deve ser o próprio canal
DM_PERSONAL_NOTESdo chamador; outros canais falham com 400INVALID_CHANNEL_TYPE.
A resposta é retornada apenas após a conclusão da exclusão.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal de notas pessoais |
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| deleted_count | integer | Número de mensagens removidas por esta requisição |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Todas as notas pessoais foram excluídas |
| 403 | resposta de erro | Tipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY) |
| 404 | resposta de erro | Canal não existe ou o chamador não pode resolvê-lo |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”2 requisições por minuto para cada usuário autenticado e ID de canal, no bucket channel:message:purge::channel_id.
Excluir as próprias mensagens em massa
Seção intitulada “Excluir as próprias mensagens em massa”POST/v1/channels/{channel_id}/messages/bulk-delete-mineExclui todas as mensagens das quais o chamador é autor em um canal. Retorna 202 com corpo vazio. Emite evento de Gateway Message Delete Bulk.
Limitações
Seção intitulada “Limitações”- 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-JWTou comprovante no corpo). - Não satisfazendo os requisitos, retorna 403
SUDO_MODE_REQUIREDcomhas_mfaemethodsdisponí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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal cujas mensagens do chamador serão excluídas |
Cabeçalhos da requisição
Seção intitulada “Cabeçalhos da requisição”| Campo | Tipo | Descrição |
|---|---|---|
| X-Fluxer-Sudo-Mode-JWT?1 | string | Comprovante de modo sudo existente |
1 Um cabeçalho válido satisfaz o requisito por si só. O comprovante aceito é ecoado de volta na resposta
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| password?1 | string | Comprovante de senha da conta |
| mfa_method?2 | string | Método MFA (totp ou webauthn) |
| mfa_code? | string | Código do autenticador (1-32 caracteres), enviado com totp |
| webauthn_response? | asserção WebAuthn object | Asserção WebAuthn para verificação sudo |
| webauthn_challenge? | string | Desafio 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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 202 | vazio | Todas as mensagens de autoria do chamador no canal foram excluídas |
| 403 | resposta de erro | Chamador não está em modo sudo (SUDO_MODE_REQUIRED) |
| 403 | resposta de erro | Chamador não pode ver o canal de servidor (MISSING_PERMISSIONS) |
| 403 | resposta de erro | Restrição de idade no canal (NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Canal não existe ou indisponível |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”10 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:bulk_delete::channel_id.
Listar mensagens fixadas
Seção intitulada “Listar mensagens fixadas”GET/v1/channels/{channel_id}/messages/pinsRetorna um objeto de página de fixados de canal com uma página de mensagens fixadas e seus horários de fixação.
Limitações
Seção intitulada “Limitações”- 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).
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal cujos fixados são retornados |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| limit? | integer | Número de fixados a retornar (1-50, padrão 50) |
| before? | ISO8601 timestamp | Retornar fixados anteriores a este horário (padrão horário atual) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | página de fixados de canal object | Página de fixados foi retornada |
| 400 | resposta de erro | Caminho/cursor inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Falta VIEW_CHANNEL (MISSING_PERMISSIONS) ou verificação de idade (NSFW_CONTENT_AGE_RESTRICTED) |
| 404 | resposta de erro | Canal não existe ou chamador não é destinatário do canal privado |
Confirmar fixados é uma operação separada: Confirmar mensagens fixadas.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.
Fixar mensagem
Seção intitulada “Fixar mensagem”PUT/v1/channels/{channel_id}/pins/{message_id}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.
Limitações
Seção intitulada “Limitações”- 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_USERse negado). - Mensagens diretas em grupo e notas pessoais não aplicam política de envio.
- Operação idempotente.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem a fixar |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | A mensagem já estava fixada ou foi fixada |
| 400 | resposta de erro | Caminho inválido (INVALID_FORM_BODY) |
| 400 | resposta de erro | Canal não possui mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 400 | resposta de erro | Alvo é mensagem de sistema (CANNOT_MODIFY_SYSTEM_WEBHOOK) |
| 400 | resposta de erro | Política de mensagens diretas nega o chamador (CANNOT_SEND_MESSAGES_TO_USER) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL ou PIN_MESSAGES (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal/mensagem não existe, ou mensagem está fora do limite de histórico |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.
Desfixar mensagem
Seção intitulada “Desfixar mensagem”DELETE/v1/channels/{channel_id}/pins/{message_id}Desfixa uma mensagem. Retorna 204 com corpo vazio em caso de sucesso. Emite eventos de Gateway Message Update e Channel Pins Update.
Limitações
Seção intitulada “Limitações”- Autorização exatamente igual a Fixar mensagem.
- Operação idempotente.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem a desfixar |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | A mensagem já estava desfixada ou foi desfixada |
| 400 | resposta de erro | Caminho inválido (INVALID_FORM_BODY) |
| 400 | resposta de erro | Canal não possui mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 400 | resposta de erro | Alvo é mensagem de sistema (CANNOT_MODIFY_SYSTEM_WEBHOOK) |
| 400 | resposta de erro | Política de mensagens diretas nega o chamador (CANNOT_SEND_MESSAGES_TO_USER) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL ou PIN_MESSAGES (MISSING_PERMISSIONS), ou envio desativado no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal/mensagem não existe, ou mensagem está fora do limite de histórico |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:pins::channel_id.
Confirmar mensagens fixadas
Seção intitulada “Confirmar mensagens fixadas”POST/v1/channels/{channel_id}/pins/ackRegistra 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal cujo estado de fixados é confirmado |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Estado de fixados estava ausente ou foi confirmado |
| 403 | resposta de erro | Tipo de credencial ou estado da conta nega a requisição (ACCESS_DENIED ou ACCOUNT_SUSPICIOUS_ACTIVITY) |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”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.
Valor de caminho de emoji de reação
Seção intitulada “Valor de caminho de emoji de reação”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.
Listar usuários de reação sem paginação
Seção intitulada “Listar usuários de reação sem paginação”GET/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}Retorna um array simples de objetos de usuário parcial para uma reação.
Limitações
Seção intitulada “Limitações”- 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
itemsdaquela 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| limit? | integer | Número de usuários a retornar (1-100, padrão 25) |
| after? | snowflake | Retornar usuários após este cursor de ID de usuário |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | array[usuário parcial object] | Usuários de reação foram retornados |
| 400 | resposta de erro | Entrada/emoji/paginação inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Falta VIEW_CHANNEL (MISSING_PERMISSIONS) |
| 404 | resposta de erro | Canal/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.
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Listar usuários de reação
Seção intitulada “Listar usuários de reação”GET/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/usersRetorna objeto de página de usuários de reação com usuários que adicionaram uma reação.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| limit? | integer | Número de usuários a retornar (1-100, padrão 25) |
| after? | snowflake | Retornar usuários após este cursor de ID de usuário |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | página de usuários de reação object | Página de usuários de reação foi retornada |
| 400 | resposta de erro | Entrada/emoji/paginação inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Falta VIEW_CHANNEL (MISSING_PERMISSIONS) |
| 404 | resposta de erro | Canal/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.
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Adicionar a própria reação
Seção intitulada “Adicionar a própria reação”PUT/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/@meAdiciona a reação da identidade autenticada. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Add.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| session_id?1 | string | ID 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.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Reação já existia ou foi adicionada |
| 400 | resposta de erro | Entrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 400 | resposta de erro | Não iniciou sessão (MUST_START_SESSION_BEFORE_SENDING) |
| 400 | resposta de erro | Conta não reivindicada (UNCLAIMED_ACCOUNT_CANNOT_ADD_REACTIONS) |
| 400 | resposta de erro | Emoji Unicode inválido (NOT_A_VALID_UNICODE_EMOJI) |
| 400 | resposta de erro | Emoji personalizado desconhecido (CUSTOM_EMOJI_NOT_FOUND) |
| 400 | resposta de erro | Emoji externo requer direito premium (CUSTOM_EMOJIS_REQUIRE_PREMIUM_OUTSIDE_SOURCE) |
| 400 | resposta de erro | Teto de reações atingido (MAX_REACTIONS) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL, ADD_REACTIONS ou USE_EXTERNAL_EMOJIS (MISSING_PERMISSIONS) |
| 403 | resposta de erro | Em timeout (COMMUNICATION_DISABLED) |
| 403 | resposta de erro | E-mail não verificado (REACTION_EMAIL_VERIFICATION_REQUIRED) |
| 403 | resposta de erro | Reações temporariamente desativadas no servidor (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal/mensagem não existe ou mensagem fora do limite de histórico |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Remover a própria reação
Seção intitulada “Remover a própria reação”DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/@meRemove a reação da própria identidade autenticada. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| session_id?1 | string | ID da sessão do Gateway de origem (1-64 caracteres) |
1 Ver correlação de sessão de reação
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Reação estava ausente ou foi removida |
| 400 | resposta de erro | Entrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Falta VIEW_CHANNEL (MISSING_PERMISSIONS) ou reações desativadas (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal não existe ou mensagem fora do limite de histórico |
Mensagem inexistente retorna 204 em vez de 404.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Exclui a reação e emite Message Reaction Remove para sessões que veem o canal (com session_id).
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Remover reação de outro usuário
Seção intitulada “Remover reação de outro usuário”DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/{target_id}Remove a reação de um usuário específico. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove.
Limitações
Seção intitulada “Limitações”- 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 400TWO_FACTOR_REQUIRED, a menos que seja dono do servidor.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
| target_id1 | snowflake | O 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)
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| session_id?1 | string | ID da sessão do Gateway de origem (1-64 caracteres) |
1 Ver correlação de sessão de reação
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Reação alvo estava ausente ou foi removida |
| 400 | resposta de erro | Entrada inválida ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal 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.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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).
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Remover todas as reações para um emoji
Seção intitulada “Remover todas as reações para um emoji”DELETE/v1/channels/{channel_id}/messages/{message_id}/reactions/{emoji}Remove todas as reações de um emoji. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove Emoji.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
| emoji | string | Valor de caminho de emoji de reação codificado via URI |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Reações do emoji estavam ausentes ou foram removidas |
| 400 | resposta de erro | Caminho/emoji inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal não existe ou mensagem fora do limite de histórico |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Remover todas as reações
Seção intitulada “Remover todas as reações”DELETE/v1/channels/{channel_id}/messages/{message_id}/reactionsRemove todas as reações de uma mensagem. Retorna 204 com corpo vazio. Emite evento de Gateway Message Reaction Remove All.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal |
| message_id | snowflake | O ID da mensagem |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Reações estavam ausentes ou foram removidas |
| 400 | resposta de erro | Parâmetros de caminho inválidos ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Faltam VIEW_CHANNEL ou MANAGE_MESSAGES, ou canal privado (MISSING_PERMISSIONS), ou reações desativadas (FEATURE_TEMPORARILY_DISABLED) |
| 404 | resposta de erro | Canal não existe ou mensagem fora do limite de histórico |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”30 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:reactions::channel_id.
Indicar digitação
Seção intitulada “Indicar digitação”POST/v1/channels/{channel_id}/typingPublica atividade de digitação em um canal de texto. Retorna 204 com corpo vazio. Emite evento de Gateway Typing Start.
Limitações
Seção intitulada “Limitações”- 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).
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | snowflake | O ID do canal onde a digitação é exibida |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Operação de digitação foi aceita |
| 400 | resposta de erro | Parâmetro de caminho inválido ou canal sem mensagens (CANNOT_SEND_MESSAGES_IN_NON_TEXT_CHANNEL) |
| 403 | resposta de erro | Falta SEND_MESSAGES (MISSING_PERMISSIONS) ou chamador em timeout (COMMUNICATION_DISABLED) |
| 404 | resposta de erro | Canal não existe ou chamador não é destinatário em canal privado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”20 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:typing::channel_id.
Confirmar mensagem
Seção intitulada “Confirmar mensagem”POST/v1/channels/{channel_id}/messages/{message_id}/ackAvança o estado de leitura do usuário autenticado até uma mensagem. Retorna 204 com corpo vazio. Emite evento de Gateway Message ACK.
Limitações
Seção intitulada “Limitações”- 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.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id1 | snowflake | O ID do canal |
| message_id1 | snowflake | ID 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 JSON
Seção intitulada “Corpo JSON”Corpo vazio é lido como {} (forma mínima válida).
| Campo | Tipo | Descrição |
|---|---|---|
| mention_count?1 | integer | Contagem de menções a armazenar para o canal (0-2.147.483.647, padrão 0) |
| manual?2 | boolean | Se 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
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | A mensagem foi confirmada |
| 403 | resposta de erro | Chamador é um bot (retorna ACCESS_DENIED) |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”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.
Rate limit
Seção intitulada “Rate limit”100 requisições por 10 segundos para cada usuário autenticado e ID de canal, no bucket channel:message:ack::channel_id.

