Pular para o conteúdo
Decoding Chat API

Webhooks

Um webhook publica mensagens em um canal de servidor sob nome e avatar próprios.

Rotas de gerenciamento utilizam um token de sessão de usuário ou token de bot. Todas as outras operações de webhook usam o ID do webhook e o token secreto em seu próprio caminho como credencial completa. Um cabeçalho Authorization enviado não concede acesso lá, e o Decoding Chat ainda o resolve, conforme descrito em Chaveamento de limite de taxa.

O recurso de Mensagens define os objetos de mensagem, entrada de rich embed e entrada de referência de mensagem.

Uma operação de gerenciamento requer MANAGE_WEBHOOKS no nível do servidor e também no canal do webhook. MANAGE_WEBHOOKS é uma permissão elevada. Em um servidor cujo nível MFA seja elevado, um chamador que não seja o proprietário do servidor nem esteja cadastrado na autenticação multifator recebe 400 TWO_FACTOR_REQUIRED. O Decoding Chat confirma a permissão antes dessa verificação, portanto um chamador sem a permissão recebe 403 MISSING_PERMISSIONS.

O Decoding Chat resolve o servidor antes de cada operação de gerenciamento. Um servidor inexistente retorna 404 UNKNOWN_GUILD. Um chamador que não seja membro atual de um servidor existente recebe 403 MISSING_PERMISSIONS.

Listar webhooks do servidor, Listar webhooks do canal e Criar webhook nomeiam um servidor ou canal em seus caminhos, aplicando a verificação de disponibilidade. Um servidor com UNAVAILABLE_FOR_EVERYONE recusa uma requisição autenticada com 403 MISSING_ACCESS antes da execução. UNAVAILABLE_FOR_EVERYONE_BUT_STAFF faz o mesmo para uma conta sem o flag de staff da instância. As rotas de gerenciamento restantes nomeiam apenas um ID de webhook e não passam por essa restrição.

O Decoding Chat verifica o name de webhook enviado contra as listas de bloqueio de frases e URLs da instância; uma correspondência retorna 403 CONTENT_BLOCKED. As mesmas listas verificam o conteúdo e texto de embed resolvidos de uma mensagem criada ou editada, retornando o mesmo código em caso de correspondência. O membro avatar é isento dessa verificação, e o Decoding Chat valida seus bytes decodificados contra a lista de hashes de assets banidos ao armazená-los.

Cada bucket de rota nesta página é chaveado pela identidade do chamador e pelo parâmetro de caminho em seu nome de bucket. A identidade do chamador é a conta autenticada quando resolvida, e o endereço IP do cliente caso contrário, limitando operações por endereço quando autenticadas por token.

Quando uma requisição a uma operação autenticada por token envia um cabeçalho Authorization, o Decoding Chat lê essa credencial apenas para escolher a chave do limite de taxa. Limites de taxa define o chaveamento em detalhes.

O limite HTTP global aplica-se a todas as rotas de gerenciamento. Obter webhook com token, Atualizar webhook com token e Excluir webhook com token o consomem sob a identidade do chamador. Todas as outras rotas nesta página são isentas e limitadas apenas por seu próprio bucket de rota.

O Decoding Chat recusa chamadas do cliente web oficial em Executar webhook, Obter mensagem de webhook, Editar mensagem de webhook e Excluir mensagem de webhook. Uma requisição cujo cabeçalho Origin seja exatamente https://web.fluxer.app ou https://web.canary.fluxer.app retorna 403 INVALID_API_ORIGIN.

Requisições sem Origin, ou com qualquer outro valor, passam na verificação. Ela roda após o limite de taxa de rota e antes da validação do caminho.

/v1/webhooks/{webhook_id}/{token} e /v1/webhooks/{webhook_id}/{token}/messages/{message_id} possuem uma segunda política CORS permitindo qualquer origem, conforme detalhado no contrato de requisições cross-origin.

Um webhook pertence a exatamente um servidor e envia mensagens para exatamente um canal de texto ou voz daquele servidor. O Decoding Chat gera seu token de execução uma vez na criação e nunca o rotaciona, tornando o par de ID e token uma credencial bearer durante a vida do webhook.

CampoTipoDescrição
idsnowflakeO ID do webhook
guild_idsnowflakeO ID do servidor que contém o webhook
channel_idsnowflakeO ID do canal para onde o webhook envia mensagens
namestringO nome sob o qual o webhook envia mensagens (1-80 caracteres)
avatar?stringO hash do avatar sob o qual o webhook envia mensagens, ou null quando sem avatar
token1stringO token secreto que autoriza a execução deste webhook
user2usuário parcial objectA conta que criou o webhook

1 64 caracteres do alfabeto alfanumérico de 62 caracteres. Nenhuma operação o rotaciona ou reemite

2 Ausente no objeto de webhook de token. O valor é o parcial de usuário excluído quando a conta criadora não existe mais

{
"id": "1501314428688998182",
"guild_id": "1501314428688990000",
"channel_id": "1501314428688991111",
"name": "Build bot",
"avatar": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"token": "Xk3Qw9ZpL2vB7nR4tY6uI8oP0aS1dF5gH2jK4lZ9xC7vB1nM3qW5eR8tY0uI2oP4",
"user": {
"id": "1501314428688990001",
"username": "ada",
"discriminator": "0001",
"avatar": null
}
}

Operações autenticadas por token retornam este objeto. Possui todos os campos do objeto de webhook, exceto user.

CampoTipoDescrição
idsnowflakeO ID do webhook
guild_idsnowflakeO ID do servidor que contém o webhook
channel_idsnowflakeO ID do canal para onde o webhook envia mensagens
namestringO nome sob o qual o webhook envia mensagens (1-80 caracteres)
avatar?stringO hash do avatar sob o qual o webhook envia mensagens, ou null quando sem avatar
tokenstringO token secreto que autoriza a execução deste webhook

Executar webhook aceita este corpo JSON. Todos os campos podem ser omitidos, e {} passa na validação do schema retornando 400 CANNOT_SEND_EMPTY_MESSAGE.

CampoTipoDescrição
content?1?stringConteúdo da mensagem
embeds?2array[entrada de rich embed object]Rich embeds
attachments?3array[entrada de anexo de webhook object]Metadados de anexos
message_reference?4?entrada de referência de mensagem objectReferência de resposta/encaminhamento, ou null
allowed_mentions?5?menções permitidas objectPolítica de análise de menções, ou null
flags?integerFlags de mensagem, onde omissão é tratada como zero e bits fora da máscara enviável são limpos
favorite_meme_id??snowflakeMeme favorito a anexar
sticker_ids??array[snowflake]No máximo 3 IDs de stickers
tts?6booleanSolicitação de conversão de texto em voz
nonce?7string | integerIdentificador de mensagem do cliente (1-32 caracteres). Inteiro seguro torna-se string decimal
username?8?stringSobreposição de nome de webhook por mensagem (1-80 caracteres), ou null
avatar_url?8?stringURL absoluta http/https de sobreposição de avatar por mensagem (máx. 2.048 caracteres), ou null

1 Limitado ao maior valor entre max_message_length do servidor ou 4000 caracteres. Exceder retorna 400 INVALID_FORM_BODY com código CONTENT_EXCEEDS_MAX_LENGTH

2 Limitado pelo valor max_embeds_per_message do servidor (padrão 10). Exceder retorna 400 INVALID_FORM_BODY com TOO_MANY_EMBEDS

3 Corpo JSON não anexa arquivos. Corpos multipart anexam arquivos como descrito em Executar webhook

4 Referência de encaminhamento requer channel_id e message_id, e não deve acompanhar conteúdo, embeds ou anexos. Ver referências de mensagem

5 Política omitida suprime todas as menções (oposto do padrão em Criar mensagem)

6 Não conta na verificação de mensagem não vazia (tts isolado retorna 400 CANNOT_SEND_EMPTY_MESSAGE). Mensagens de webhook nunca são marcadas como text-to-speech

7 Memorizado por webhook por 5 minutos e ecoado em Message Create. Reexecuções com o mesmo nonce retornam a primeira mensagem sem criar duplicata; reexecuções após mudança de canal retornam 404 UNKNOWN_MESSAGE

8 Aplica-se à mensagem criada; o webhook armazenado mantém nome e avatar próprios

Quando embeds está ausente, a chave singular embed é reescrita como array de um elemento, e embed null torna-se array vazio. Havendo ambos, embed é descartado.

Corpos multipart aceitam anexos pré-enviados e metadados de anexo multipart direto.

Corpo JSON de mensagem de webhook aceita esta estrutura de metadados. Todos os membros são opcionais; membros fora da tabela são descartados.

CampoTipoDescrição
id?snowflake | integerO ID do anexo
filename?stringNome do arquivo do anexo (1-1024 caracteres)
description?stringDescrição do anexo (1-4096 caracteres)
content_type?stringTipo de mídia (1-256 caracteres)
size?integerContagem de bytes como inteiro seguro não negativo
url?stringURL absoluta http ou https (máx. 2.048 caracteres)
proxy_url?stringURL absoluta http ou https (máx. 2.048 caracteres)
height?integerAltura em pixels
width?integerLargura em pixels
ephemeral?booleanSe o anexo é efêmero
duration?numberDuração de áudio em segundos
waveform?stringDados de forma de onda Base64 (1-256 caracteres)
flags?integerFlags de anexo

Entradas em corpos JSON são descartadas e não contam para limites de anexos nem verificação de mensagem não vazia.

Execução de webhook aceita o objeto de entrada de referência de mensagem. Restrições específicas de webhooks:

O campo channel_id é obrigatório para encaminhamentos e deve ser igual ao canal do webhook. Outros canais retornam 404 UNKNOWN_MESSAGE. Referências de resposta resolvem no próprio canal do webhook e ignoram este campo.

A mensagem referenciada deve existir no canal do webhook (ausentes retornam 404 UNKNOWN_MESSAGE). Respostas exigem mensagens comuns ou de resposta (outros tipos retornam 400 INVALID_FORM_BODY com código CANNOT_REPLY_TO_SYSTEM_MESSAGE).

Encaminhamentos não podem acompanhar conteúdo, embeds ou anexos (caso contrário: 400 INVALID_FORM_BODY com FORWARD_MESSAGES_CANNOT_CONTAIN_CONTENT). Faltando channel_id ou message_id, retorna FORWARD_REFERENCE_REQUIRES_CHANNEL_AND_MESSAGE.

Editar mensagem de webhook aceita este corpo JSON. Campos fornecidos substituem valores armazenados; omitidos os mantêm. Corpos sem content visível, embeds ou flags retornam 400 CANNOT_SEND_EMPTY_MESSAGE.

CampoTipoDescrição
content?1?stringConteúdo de substituição, ou null
embeds?2array[entrada de rich embed object]Coleção de embeds substituta
flags?integerFlags de mensagem substitutos
allowed_mentions??menções permitidas objectPolítica de análise de menções substituta, ou null

1 Aplica-se o mesmo tamanho máximo efetivo de Executar webhook

2 O array substitui a coleção inteira (vazio remove todos os embeds). Aplica-se o teto max_embeds_per_message

flags substitui apenas bits da máscara enviável; outros bits armazenados são mantidos.

Objetos aceitos por Executar webhook do Slack e conversão para embeds.

CampoTipoDescrição
text?1stringTexto da mensagem
username?stringSobreposição de nome do webhook (1-80 caracteres)
icon_url?2stringSobreposição de URL do avatar do webhook
attachments?array[anexo do Slack object]Anexos do Slack convertidos para embeds

1 Omitindo texto e convertendo ao menos um anexo, o conteúdo fica como string vazia

2 Usado apenas se for URL absoluta http/https de até 2.048 caracteres; outros valores são descartados

CampoTipoDescrição
fallback?1stringTexto alternativo
pretext?1stringTexto acima do anexo
text?1stringTexto principal do anexo
color?2stringCor da barra lateral
title?stringTítulo do anexo (mapeado para título do embed)
title_link?3stringURL do título (mapeado para URL do embed)
fields?4array[campo de anexo do Slack object]Campos mapeados para campos de embed
footer?stringTexto do rodapé (mapeado para rodapé do embed)
ts?5numberSegundos Unix (mapeado para timestamp do embed)
author_name?6stringNome do autor (mapeado para autor do embed)
author_link?3stringURL do autor (mapeado para URL do autor do embed)
author_icon?3stringURL do ícone do autor (mapeado para ícone do autor)
image_url?3stringURL da imagem principal (mapeado para imagem do embed)
thumb_url?3stringURL da miniatura (mapeado para miniatura do embed)

1 Descrição do embed une pretext e text por quebra de linha; fallback é usado se ambos estiverem ausentes

2 Mapeado para cor do embed apenas se for 6 dígitos hexadecimais (com # opcional)

3 Usado apenas se for URL absoluta http/https de até 2.048 caracteres

4 Convertido apenas se contiver título e valor

5 Aceito como número JSON ou string decimal (inteiro não negativo)

6 Autor do embed é emitido apenas com author_name

CampoTipoDescrição
title?stringTítulo do campo (mapeado para nome do campo)
value?stringValor do campo (mapeado para valor do campo)
short?booleanSe renderiza em linha (padrão false)

O schema do Slack limita apenas username (1-80 caracteres; outros retornam WEBHOOK_NAME_LENGTH_INVALID).

Conversões sem conteúdo ou embed retornam 400 CANNOT_SEND_EMPTY_MESSAGE. Conteúdo longo retorna CONTENT_EXCEEDS_MAX_LENGTH. Excesso de embeds retorna TOO_MANY_EMBEDS.

Estruturas aceitas por Executar webhook do GitHub.

CampoTipoDescrição
action?1?stringAção do evento do GitHub, ou null
answer??comentário do GitHub objectResposta de discussão aceita, ou null (validado, não renderizado)
check_run??execução de verificação do GitHub objectDados de execução de verificação, ou null
check_suite??suíte de verificação do GitHub objectDados de suíte de verificação, ou null
comment??comentário do GitHub objectComentário de issue, review, commit ou discussão, ou null
commits??array[commit do GitHub object]Commits de push, ou null
compare??stringURL de comparação absoluta, ou null
discussion??discussão do GitHub objectDados de discussão, ou null
forced??booleanSe o push foi forçado, ou null
forkee??serviço do GitHub objectRepositório de fork, ou null
head_commit??commit do GitHub objectCommit principal, ou null
issue??issue do GitHub objectDados da issue, ou null
member??usuário do GitHub objectDados de membro do repositório, ou null
pull_request?2?issue do GitHub objectRepresentação de pull request, ou null
ref_type?3?stringTipo de referência Git, ou null
ref??stringReferência Git, ou null
release??release do GitHub objectDados da release, ou null
repository?4?serviço do GitHub objectDados do repositório, ou null
review??review do GitHub objectDados de review de pull request, ou null
senderusuário do GitHub objectRemetente do evento

1 Eventos com ações obrigatórias em Tipos de eventos do GitHub renderizam apenas quando action coincidir

2 Pull requests usam a mesma representação de issues (apenas campos de issue do GitHub são consumidos)

3 Apenas branch e tag renderizam eventos de criação/exclusão

4 Eventos renderizados requerem repositório (ausência não renderiza mensagem)

pull_request no nível superior define o texto de issue_comment (pull request se presente, issue se ausente).

Strings aceitam até 152.133 caracteres. URLs devem ter até 2.048 caracteres (http/https). Valores malformados retornam 400 INVALID_FORM_BODY.

Títulos são truncados em 70 caracteres (exceto push comum, check run e check suite em 256). Descrições em 350 caracteres (exceto push forçado com link fixo). Entidades HTML são decodificadas antes do truncamento.

CampoTipoDescrição
idintegerID de usuário do GitHub de 32 bits não negativo (validado, não renderizado)
loginstringLogin do GitHub (autor do embed)
html_urlstringURL absoluta do perfil
avatar_urlstringURL absoluta do avatar
CampoTipoDescrição
idintegerID do repositório no GitHub (validado, não renderizado)
html_urlstringURL absoluta do repositório
name1stringNome do repositório
full_name1stringNome qualificado do repositório (com proprietário)

1 Push, check run e check suite usam name; outros usam full_name

CampoTipoDescrição
username??stringNome de usuário no GitHub, ou null (validado, não renderizado)
namestringNome de exibição do autor (renderizado ao lado de commits)
CampoTipoDescrição
id1stringIdentificador do commit
urlstringURL absoluta da API do commit
message2stringMensagem do commit
authorautor do GitHub objectAutor do commit

1 Reduzido para os primeiros 7 caracteres na renderização

2 Frases This reverts commit <sha>. com SHA de 40 caracteres são reescritas como link Markdown para o commit revertido

CampoTipoDescrição
idstring | integer (validado, não renderizado)ID de comentário de 64 bits (decimal string ou inteiro seguro)
html_urlstringURL absoluta do comentário
userusuário do GitHub objectAutor do comentário
commit_id?1?stringIdentificador do commit associado, ou null
bodystringCorpo do comentário

1 Obrigatório para eventos commit_comment

CampoTipoDescrição
titlestringTítulo da discussão
numberintegerNúmero da discussão (inteiro 32 bits não negativo)
html_urlstringURL absoluta da discussão
answer_html_url??stringURL absoluta da resposta aceita, ou null (validado, não renderizado)
body??stringCorpo da discussão, ou null
userusuário do GitHub objectAutor da discussão
CampoTipoDescrição
id1string | integerID da issue ou pull request de 64 bits
numberintegerNúmero da issue ou pull request
html_urlstringURL absoluta da issue ou pull request
user1usuário do GitHub objectAutor da issue ou pull request
titlestringTítulo da issue ou pull request
body?2?stringCorpo da issue ou pull request, ou null

1 Aceito e validado, nunca renderizado. O autor do embed vem do remetente do callback ou do comentário

2 Renderizado apenas para a ação opened

CampoTipoDescrição
idintegerID da release (validado, não renderizado)
tag_namestringNome da tag Git
html_urlstringURL absoluta da release
body??stringCorpo da release, ou null (validado, não renderizado)
CampoTipoDescrição
userusuário do GitHub objectAutor da review
body??stringCorpo da review, ou null
html_urlstringURL absoluta da review
state1stringEstado da review

1 Validado, mas aprovações, alterações solicitadas e comentários renderizam o mesmo embed

CampoTipoDescrição
numberintegerNúmero da pull request (validado, não renderizado)
CampoTipoDescrição
namestringNome da aplicação de verificação (renderizado no título do embed)
CampoTipoDescrição
conclusion?1?stringConclusão da verificação, ou null
head_branch??stringBranch principal, ou null
head_shastringSHA do commit principal
pull_requests??array[pull request de verificação do GitHub object]Pull requests associadas, ou null
appaplicação de verificação do GitHub objectAplicação de verificação

1 skipped suprime a mensagem; success renderiza embed verde; outros renderizam vermelho

Objeto de saída de execução de verificação do GitHub

Seção intitulada “Objeto de saída de execução de verificação do GitHub”
CampoTipoDescrição
title??stringTítulo da saída, ou null
summary??stringResumo da saída, ou null
CampoTipoDescrição
conclusion?1?stringConclusão da verificação, ou null
namestringNome da execução de verificação
html_urlstringURL absoluta da execução
check_suite2suíte de verificação do GitHub objectSuíte de verificação pai
details_url??stringURL de detalhes, ou null
output??saída de execução de verificação do GitHub objectSaída da verificação, ou null
pull_requests??array[pull request de verificação do GitHub object]Pull requests associadas, ou null

1 success renderiza embed verde; outros renderizam vermelho

2 Suíte pai com conclusão skipped não produz mensagem

Selecionados pelo cabeçalho X-GitHub-Event. Tipos não listados ou cabeçalhos ausentes são confirmados sem criar mensagem. Todos exigem repositório.

ValorDescrição
commit_commentComentário em commit (requer ação created e commit_id)
createCriação de branch ou tag (requer ref e ref_type)
deleteExclusão de branch ou tag (requer ref e ref_type)
forkCriação de fork (requer forkee)
issue_commentComentário em issue ou pull request (requer ação created, comment e issue)
issuesCiclo de vida da issue (requer issue e ação opened, closed ou reopened)
memberAdição de colaborador (requer ação added e member)
publicRepositório tornado público
pull_requestCiclo de vida do PR (requer pull_request e ação opened, closed ou reopened)
pull_request_reviewReview de PR (requer ação submitted, review e pull_request)
pull_request_review_commentComentário de review (requer ação created, comment e pull_request)
pushPush Git (requer ref)
releasePublicação de release (requer ação published e release)
watchEstrela no repositório (requer ação started)
check_runConclusão de verificação (requer ação completed e check_run)
check_suiteConclusão de suíte (requer ação completed e check_suite)
discussionNova discussão (requer ação created e discussion)
discussion_commentComentário em discussão (requer ação created, comment e discussion)
repositoryCriação de repositório (requer ação created)

Pushes comuns renderizam uma linha por commit.

Estruturas aceitas por Executar webhook do Instatus.

CampoTipoDescrição
meta??metadados do Instatus objectMetadados do callback, ou null
page?1?página do Instatus objectDados da página de status, ou null
incident?2?incidente do Instatus objectDados do incidente, ou null
maintenance?2?manutenção do Instatus objectDados da manutenção, ou null
component_update?2?atualização de componente do Instatus objectTransição de componente, ou null
component?2?componente do Instatus objectDados do componente, ou null

1 Fornece rodapé e URL padrão do embed

2 Selecionado na ordem: incidente, manutenção, transição de componente

CampoTipoDescrição
unsubscribe??stringValor de cancelamento de inscrição (máx. 2.048 caracteres), ou null
documentation??stringValor de documentação (máx. 2.048 caracteres), ou null
CampoTipoDescrição
id??stringID da página (máx. 256 caracteres), ou null
status_indicator??stringIndicador de status (máx. 256 caracteres), ou null
status_description??stringDescrição de status (máx. 1.024 caracteres), ou null
url??stringURL da página (máx. 2.048 caracteres), ou null

Itens retroativos adicionam Backfilled ao rodapé.

CampoTipoDescrição
id??stringID do componente (máx. 256 caracteres), ou null
name??stringNome do componente (máx. 1.024 caracteres), ou null
status??stringStatus do componente (máx. 256 caracteres), ou null
CampoTipoDescrição
id??stringID do componente (máx. 256 caracteres), ou null
name?1?stringNome do componente (máx. 1.024 caracteres), ou null
status?2?stringStatus do componente (máx. 256 caracteres), ou null
created_at?3?stringHorário de criação (máx. 64 caracteres), ou null

1 Sem nome renderiza A component

2 Status padrão da transição se new_status estiver ausente

3 Horário padrão do embed se created_at estiver ausente

CampoTipoDescrição
id??stringID da atualização (máx. 256 caracteres), ou null
incident_id??stringID do incidente (máx. 256 caracteres), ou null
markdown?1?stringCorpo em Markdown (máx. 65.536 caracteres), ou null
status??stringStatus da atualização (máx. 256 caracteres), ou null
created_at?1?stringHorário de criação (máx. 64 caracteres), ou null
updated_at??stringHorário de atualização (máx. 64 caracteres), ou null

1 A atualização com o created_at mais recente define o corpo do embed (truncado em 4.096 caracteres) e o timestamp

CampoTipoDescrição
id??stringID do incidente (máx. 256 caracteres), ou null
name?1?stringNome do incidente (máx. 1.024 caracteres), ou null
url??stringURL do incidente (máx. 2.048 caracteres), ou null
status?2?stringStatus do incidente (máx. 256 caracteres), ou null
backfilled?3?booleanSe foi retroativo, ou null
created_at?4?stringHorário de criação (máx. 64 caracteres), ou null
updated_at?4?stringHorário de atualização (máx. 64 caracteres), ou null
resolved_at??stringHorário de resolução (máx. 64 caracteres), ou null
incident_updates??array[atualização de incidente do Instatus object]Atualizações de incidente, ou null
affected_components??array[componente afetado do Instatus object]Componentes afetados, ou null

1 Nome torna-se o título do embed (truncado em 256 caracteres)

2 Define cor e campo Status através de Valores de status do Instatus

3 true adiciona Backfilled ao rodapé

4 Timestamp do embed usa o primeiro horário válido em: created_at da última atualização, updated_at do objeto, created_at do objeto

Objeto de atualização de manutenção do Instatus

Seção intitulada “Objeto de atualização de manutenção do Instatus”
CampoTipoDescrição
id??stringID da atualização (máx. 256 caracteres), ou null
maintenance_id??stringID da manutenção (máx. 256 caracteres), ou null
markdown?1?stringCorpo em Markdown (máx. 65.536 caracteres), ou null
created_at?1?stringHorário de criação (máx. 64 caracteres), ou null
updated_at??stringHorário de atualização (máx. 64 caracteres), ou null

1 A atualização mais recente define descrição (truncada em 4.096 caracteres) e timestamp

CampoTipoDescrição
id??stringID da manutenção (máx. 256 caracteres), ou null
name?1?stringNome da manutenção (máx. 1.024 caracteres), ou null
url??stringURL da manutenção (máx. 2.048 caracteres), ou null
status?2?stringStatus da manutenção (máx. 256 caracteres), ou null
maintenance_start_date?3?stringHorário de início (máx. 64 caracteres), ou null
maintenance_end_date?3?stringHorário de término (máx. 64 caracteres), ou null
backfilled??booleanSe foi retroativo, ou null
created_at?4?stringHorário de criação (máx. 64 caracteres), ou null
updated_at?4?stringHorário de atualização (máx. 64 caracteres), ou null
resolved_at??stringHorário de resolução (máx. 64 caracteres), ou null
maintenance_updates??array[atualização de manutenção do Instatus object]Atualizações de manutenção, ou null
affected_components??array[componente afetado do Instatus object]Componentes afetados, ou null

1 Nome torna-se título (truncado em 256 caracteres)

2 Ausente renderiza a cor de manutenção

3 Renderizados como timestamp completo no campo Window

4 Timestamp usa o primeiro valor válido entre a última atualização, updated_at e created_at

CampoTipoDescrição
created_at??stringHorário de criação (máx. 64 caracteres), ou null
new_status?1?stringNovo status do componente (máx. 256 caracteres), ou null
component_id??stringID do componente (máx. 256 caracteres), ou null

1 Prefere new_status, depois o status do componente, usando updated caso contrário

O Decoding Chat converte para maiúsculas e remove caracteres fora de A-Z.

ValorDescrição
UPRenderizado como All systems operational, cor neutra
HASISSUESRenderizado como Has issues, cor neutra
OPERATIONALRenderizado como Operational, cor de operacional
UNDERMAINTENANCERenderizado como Under maintenance, cor de manutenção
DEGRADEDPERFORMANCERenderizado como Degraded performance, cor de degradação
PARTIALOUTAGERenderizado como Partial outage, cor de queda parcial
MAJOROUTAGERenderizado como Major outage, cor de queda total
INVESTIGATINGRenderizado como Investigating, cor de queda total
IDENTIFIEDRenderizado como Identified, cor de queda parcial
MONITORINGRenderizado como Monitoring, cor de degradação
RESOLVEDRenderizado como Resolved, cor de operacional
NOTSTARTEDYETRenderizado como Scheduled, cor de manutenção
PLANNEDRenderizado como Planned, cor de manutenção
INPROGRESSRenderizado como In progress, cor de manutenção
COMPLETEDRenderizado como Completed, cor de operacional
GET/v1/guilds/{guild_id}/webhooksBot

Retorna array de objetos de webhook em um servidor. Requer permissão MANAGE_WEBHOOKS no nível do servidor.

CampoTipoDescrição
guild_idsnowflakeO ID do servidor cujos webhooks são retornados
StatusCorpoCondição
200array[webhook object]Webhooks foram retornados (array vazio se não houver)
400resposta de erroSnowflake inválido
400resposta de erroSem autenticador em servidor com MFA elevado (TWO_FACTOR_REQUIRED)
403resposta de erroCredencial bearer (ACCESS_DENIED), ação pendente (ACCOUNT_SUSPICIOUS_ACTIVITY), servidor indisponível (MISSING_ACCESS), ou sem permissão (MISSING_PERMISSIONS)
404resposta de erroServidor não existe (UNKNOWN_GUILD)

Um webhook é retornado apenas se o chamador possuir VIEW_CHANNEL e MANAGE_WEBHOOKS em seu canal.

40 requisições por 10 segundos para cada usuário autenticado e ID de servidor, no bucket webhook:list::guild_id.

GET/v1/channels/{channel_id}/webhooksBot

Retorna array de objetos de webhook em canal de texto/voz de servidor. Requer MANAGE_WEBHOOKS no servidor e no canal.

CampoTipoDescrição
channel_idsnowflakeO ID do canal de texto ou voz do servidor
StatusCorpoCondição
200array[webhook object]Webhooks foram retornados (array vazio se não houver)
400resposta de erroSnowflake inválido
400resposta de erroSem autenticador em servidor com MFA elevado (TWO_FACTOR_REQUIRED)
403resposta de erroCredencial bearer, ação pendente, servidor indisponível, sem acesso ao canal, sem permissão ou falta verificação de idade
404resposta de erroCanal (UNKNOWN_CHANNEL) ou servidor (UNKNOWN_GUILD) não existe

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

POST/v1/channels/{channel_id}/webhooksBotAudit reason

Cria um webhook em canal de texto/voz de servidor e retorna o webhook com seu token de execução. Requer MANAGE_WEBHOOKS no servidor e canal. Aceita motivo de auditoria. Emite Webhooks Update.

Limites: max_webhooks_per_guild (padrão 1000) e max_webhooks_per_channel (padrão 15).

CampoTipoDescrição
channel_idsnowflakeO ID do canal de texto ou voz do servidor
CampoTipoDescrição
namestringNome do webhook (1-80 caracteres)
avatar??base64 stringImagem de avatar codificada em Base64, ou null

O avatar deve ter no máximo 10 MiB (avatar_max_size). AVIF animado é rejeitado.

StatusCorpoCondição
200webhook objectO webhook foi criado
400resposta de erroCorpo/avatar inválido, limite de webhooks do servidor/canal atingido (MAX_WEBHOOKS_PER_GUILD/MAX_WEBHOOKS_PER_CHANNEL) ou sem autenticador (TWO_FACTOR_REQUIRED)
403resposta de erroCredencial bearer, ação pendente, nome/avatar bloqueado (CONTENT_BLOCKED), servidor indisponível, sem permissão ou falta verificação de idade
404resposta de erroCanal (UNKNOWN_CHANNEL) ou servidor (UNKNOWN_GUILD) não existe

Grava entrada WEBHOOK_CREATE no log de auditoria. Emite Webhooks Update para sessões do servidor que veem o canal.

10 requisições por minuto para cada usuário autenticado e ID de canal, no bucket webhook:create::channel_id.

GET/v1/webhooks/{webhook_id}Bot

Retorna um objeto de webhook. Requer ser membro do servidor e possuir MANAGE_WEBHOOKS no servidor e canal do webhook.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a retornar
StatusCorpoCondição
200webhook objectO webhook foi retornado
400resposta de erroSnowflake inválido ou sem autenticador em MFA elevado
403resposta de erroCredencial bearer, ação pendente ou falta de permissão
404resposta de erroWebhook (UNKNOWN_WEBHOOK) ou servidor (UNKNOWN_GUILD) não existe

100 requisições por 10 segundos para cada usuário autenticado e ID de webhook, no bucket webhook:read::webhook_id.

PATCH/v1/webhooks/{webhook_id}BotAudit reason

Atualiza um webhook e retorna o objeto de webhook modificado. Emite Webhooks Update.

  • Requer MANAGE_WEBHOOKS no servidor e nos canais de origem e destino (caso movido).
  • Aceita motivo de auditoria.
CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a atualizar
CampoTipoDescrição
name?stringNome de substituição (1-80 caracteres)
avatar??base64 stringAvatar de substituição em Base64, ou null para remover
channel_id?snowflakeCanal de texto/voz de destino no mesmo servidor
StatusCorpoCondição
200webhook objectO webhook foi atualizado
400resposta de erroCorpo/avatar inválido, canal de destino cheio (MAX_WEBHOOKS_PER_CHANNEL) ou sem autenticador (TWO_FACTOR_REQUIRED)
403resposta de erroCredencial bearer, ação pendente, nome/avatar bloqueado (CONTENT_BLOCKED), sem permissão ou falta verificação de idade
404resposta de erroWebhook (UNKNOWN_WEBHOOK), canal de destino (UNKNOWN_CHANNEL) ou servidor (UNKNOWN_GUILD) não existe

Grava entrada WEBHOOK_UPDATE no log de auditoria. Emite Webhooks Update.

20 requisições por 10 segundos para cada usuário autenticado e ID de webhook, no bucket webhook:update::webhook_id.

DELETE/v1/webhooks/{webhook_id}BotAudit reason

Exclui permanentemente um webhook e retorna 204 com corpo vazio. Requer MANAGE_WEBHOOKS no servidor e canal. Aceita motivo de auditoria. Emite Webhooks Update.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a excluir
StatusCorpoCondição
204vazioO webhook foi excluído
400resposta de erroSnowflake inválido ou sem autenticador (TWO_FACTOR_REQUIRED)
403resposta de erroCredencial bearer, ação pendente ou falta de permissão
404resposta de erroWebhook (UNKNOWN_WEBHOOK) ou servidor (UNKNOWN_GUILD) não existe

Grava entrada WEBHOOK_DELETE no log de auditoria. Emite Webhooks Update.

20 requisições por 10 segundos para cada usuário autenticado e ID de webhook, no bucket webhook:delete::webhook_id.

As rotas abaixo usam o ID do webhook e o token como credencial completa no caminho, dispensando o cabeçalho Authorization.

GET/v1/webhooks/{webhook_id}/{token}

Retorna um objeto de webhook de token. Permissões não são avaliadas.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a retornar
tokenstringToken de execução do webhook (1-256 caracteres)
StatusCorpoCondição
200webhook de token objectO webhook foi retornado
404resposta de erroPar de webhook e token não existe (UNKNOWN_WEBHOOK)

100 requisições por 10 segundos por identidade do chamador e ID de webhook, no bucket webhook:read::webhook_id.

PATCH/v1/webhooks/{webhook_id}/{token}

Atualiza um webhook e retorna o objeto de webhook de token modificado. Não permite mover o webhook nem aceita motivo de auditoria. Emite Webhooks Update.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a atualizar
tokenstringToken de execução do webhook (1-256 caracteres)
CampoTipoDescrição
name?stringNome de substituição (1-80 caracteres)
avatar??base64 stringAvatar de substituição em Base64, ou null para remover
StatusCorpoCondição
200webhook de token objectO webhook foi atualizado
400resposta de erroCaminho, corpo, avatar ou campo desconhecido inválido
403resposta de erroNome ou avatar bloqueado (CONTENT_BLOCKED)
404resposta de erroPar de webhook e token não existe (UNKNOWN_WEBHOOK)

20 requisições por 10 segundos por identidade e ID de webhook, no bucket webhook:update::webhook_id.

DELETE/v1/webhooks/{webhook_id}/{token}

Exclui permanentemente um webhook e retorna 204 com corpo vazio. Não aceita motivo de auditoria. Emite Webhooks Update.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a excluir
tokenstringToken de execução do webhook (1-256 caracteres)
StatusCorpoCondição
204vazioO webhook foi excluído
404resposta de erroPar de webhook e token não existe (UNKNOWN_WEBHOOK)

20 requisições por 10 segundos por identidade e ID de webhook, no bucket webhook:delete::webhook_id.

POST/v1/webhooks/{webhook_id}/{token}

Cria uma mensagem de autoria do webhook. Com wait=true, retorna a mensagem criada; caso contrário, retorna 204 com corpo vazio. Recusa chamadas do cliente web oficial (ver recusa de origem). Emite Message Create.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a executar
tokenstringToken de execução do webhook (1-256 caracteres)
CampoTipoDescrição
wait?booleanSe deve retornar a mensagem criada (padrão false)

Corpo JSON de mensagem de webhook. Corpos sem Content-Type: multipart/form-data são lidos como JSON.

CampoTipoDescrição
payload_json?stringJSON de mensagem de webhook
files[n]?binaryAnexo direto no índice baseado em zero n
content?stringConteúdo da mensagem (sobrepõe payload)
nonce?stringIdentificador do cliente (sobrepõe payload)
tts?stringSolicitação text-to-speech (sobrepõe payload)
flags?stringFlags de mensagem (sobrepõe payload)

Execuções multipart enviam arquivos como a conta criadora do webhook. Exige permissões VIEW_CHANNEL, SEND_MESSAGES e ATTACH_FILES.

StatusCorpoCondição
200mensagem objectMensagem criada e wait=true
204vazioMensagem criada e wait=false (ou omitido)
400resposta de erroEntrada inválida, mensagem vazia, conteúdo longo ou excesso de anexos/embeds
403resposta de erroOrigem do cliente web oficial (INVALID_API_ORIGIN) ou conteúdo bloqueado (CONTENT_BLOCKED)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK), canal (UNKNOWN_CHANNEL) ou mensagem referenciada (UNKNOWN_MESSAGE) não existe

60 requisições por minuto por identidade e ID de webhook, no bucket webhook:execute::webhook_id (isento do limite global).

GET/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Retorna uma mensagem criada pelo webhook. Recusa o cliente web oficial.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook autor da mensagem
tokenstringToken de execução do webhook (1-256 caracteres)
message_idsnowflakeO ID da mensagem a retornar
StatusCorpoCondição
200mensagem objectMensagem do webhook foi retornada
403resposta de erroOrigem do cliente web oficial (INVALID_API_ORIGIN) ou mensagem de outro autor (MISSING_PERMISSIONS)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK), canal (UNKNOWN_CHANNEL) ou mensagem (UNKNOWN_MESSAGE) não existe

60 requisições por minuto por identidade e ID de webhook, no bucket webhook:message_get::webhook_id.

PATCH/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Atualiza uma mensagem criada pelo webhook e retorna a mensagem modificada. Recusa o cliente web oficial. Emite Message Update.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook autor da mensagem
tokenstringToken de execução do webhook (1-256 caracteres)
message_idsnowflakeO ID da mensagem a atualizar

Corpo de edição de mensagem de webhook. Apenas mensagens DEFAULT e REPLY são editáveis.

StatusCorpoCondição
200mensagem objectMensagem do webhook foi atualizada
400resposta de erroEntrada inválida, mensagem vazia, conteúdo/embeds em excesso ou tipo não editável
403resposta de erroOrigem do cliente web (INVALID_API_ORIGIN), mensagem de outro autor (MISSING_PERMISSIONS) ou conteúdo bloqueado (CONTENT_BLOCKED)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK) ou mensagem (UNKNOWN_MESSAGE) não existe

30 requisições por minuto por identidade e ID de webhook, no bucket webhook:message_edit::webhook_id.

DELETE/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Exclui uma mensagem criada pelo webhook e retorna 204 com corpo vazio. Recusa o cliente web oficial. Emite Message Delete.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook autor da mensagem
tokenstringToken de execução do webhook (1-256 caracteres)
message_idsnowflakeO ID da mensagem a excluir
StatusCorpoCondição
204vazioA mensagem do webhook foi excluída
400resposta de erroParâmetros de caminho inválidos ou canal não é mais de servidor (CANNOT_EXECUTE_ON_DM)
403resposta de erroOrigem do cliente web (INVALID_API_ORIGIN) ou mensagem de outro autor (MISSING_PERMISSIONS)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK) ou mensagem (UNKNOWN_MESSAGE) não existe

30 requisições por minuto por identidade e ID de webhook, no bucket webhook:message_delete::webhook_id.

POST/v1/webhooks/{webhook_id}/{token}/github

Aceita callback do GitHub e cria uma mensagem formatada se o evento renderizar. Retorna sempre 204 com corpo vazio. Emite Message Create.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a executar
tokenstringToken de execução do webhook (1-256 caracteres)
CampoTipoDescrição
X-GitHub-Event?stringTipo de evento do GitHub
X-GitHub-Delivery?stringIdentificador de entrega usado para desduplicação

Objeto de callback do GitHub.

StatusCorpoCondição
204vazioCallback aceito, não renderizável ou duplicado no intervalo de 24h
403resposta de erroTexto de embed renderizado bloqueado (CONTENT_BLOCKED)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK) ou canal (UNKNOWN_CHANNEL) não existe

200 requisições por minuto por identidade e ID de webhook, no bucket webhook:github::webhook_id.

POST/v1/webhooks/{webhook_id}/{token}/slack

Aceita callback compatível com o Slack, converte para conteúdo e embeds do Decoding Chat e cria uma mensagem. Emite Message Create.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a executar
tokenstringToken de execução do webhook (1-256 caracteres)

Objeto de callback do Slack.

StatusCorpoCondição
200a string literal okMensagem do callback foi criada
400resposta de erroEntrada inválida, conversão sem conteúdo/embed, conteúdo longo ou excesso de embeds
403resposta de erroConteúdo ou embed convertido bloqueado (CONTENT_BLOCKED)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK) ou canal (UNKNOWN_CHANNEL) não existe

60 requisições por minuto por identidade e ID de webhook, no bucket webhook:execute::webhook_id.

POST/v1/webhooks/{webhook_id}/{token}/instatus

Aceita callback do Instatus e cria uma mensagem formatada se o callback renderizar. Retorna sempre 204 com corpo vazio. Emite Message Create.

CampoTipoDescrição
webhook_idsnowflakeO ID do webhook a executar
tokenstringToken de execução do webhook (1-256 caracteres)

Objeto de callback do Instatus.

StatusCorpoCondição
204vazioCallback aceito, não renderizável ou duplicado no intervalo de 24h
403resposta de erroTexto de embed renderizado bloqueado (CONTENT_BLOCKED)
404resposta de erroWebhook/token (UNKNOWN_WEBHOOK) ou canal (UNKNOWN_CHANNEL) não existe

200 requisições por minuto por identidade e ID de webhook, no bucket webhook:instatus::webhook_id.