Relatórios Admin
Um relatório é uma denúncia registrada contra uma mensagem, uma conta ou um servidor (guild), juntamente com a evidência capturada quando foi registrado. Essas rotas listam e pesquisam relatórios, retornam essa evidência e resolvem um relatório com um comentário mostrado ao relator.
O envio de relatórios pertence ao recurso público Relatórios, que define os registros de categoria de onde category é extraído.
Os campos de contato do relator requerem report:view:reporter_pii além de report:view. Sem isso, reporter_email, reporter_full_legal_name e reporter_country_of_residence são nulos em todos os relatórios, então um campo redigido parece um campo que o relator nunca forneceu.
Objeto de relatório admin
Seção intitulada “Objeto de relatório admin”Um relatório é escrito uma vez, quando o relator o registra. Atualizar relatório o move de PENDING (pendente) para RESOLVED (resolvido) com um comentário opcional. Agendar exclusão de usuário por qualquer motivo diferente de uma solicitação do usuário também resolve todos os relatórios pendentes contra a conta excluída, sem comentário público e sem notificação ao relator.
Listar relatórios retorna esse objeto sem o contexto da mensagem. Obter relatório retorna o Objeto de detalhe do relatório admin, que o estende.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| report_id | snowflake | O ID do relatório |
| reporter_id1 | ?snowflake | A conta que registrou o relatório |
| reporter_tag1 2 | ?string | O nome de usuário do relator e o discriminador de quatro dígitos unidos por # |
| reporter_username1 2 | ?string | O nome de usuário do relator |
| reporter_global_name1 2 | ?string | O nome de exibição do relator, ou null quando não definido |
| reporter_discriminator1 2 | ?string | O discriminador do relator de quatro dígitos preenchido com zeros |
| reporter_email3 | ?string | O endereço de e-mail do relator |
| reporter_full_legal_name3 | ?string | O nome legal fornecido com um aviso da Lei de Serviços Digitais |
| reporter_country_of_residence3 | ?string | O país de residência fornecido com um aviso da Lei de Serviços Digitais |
| reported_at | ISO8601 timestamp | Quando o relatório foi enviado |
| status | integer | O status do relatório |
| report_type | integer | O tipo de relatório |
| category | ?string | A categoria sob a qual o relator registrou o relatório |
| additional_info | ?string | O detalhe em texto livre que o relator forneceu |
| reported_user_id | ?snowflake | A conta relatada, ou null para um relatório de servidor |
| reported_user_tag2 | ?string | O nome de usuário relatado e o discriminador de quatro dígitos unidos por # |
| reported_user_username2 | ?string | O nome de usuário da conta relatada |
| reported_user_global_name2 | ?string | O nome de exibição da conta relatada, ou null quando não definido |
| reported_user_discriminator2 | ?string | O discriminador da conta relatada de quatro dígitos preenchido com zeros |
| reported_user_avatar_hash4 | ?string | O hash do avatar da conta relatada, ou null quando não definido |
| reported_guild_id | ?snowflake | O servidor relatado, ou null quando o relatório não nomeia nenhum |
| reported_guild_name4 | ?string | O nome do servidor relatado |
| reported_guild_icon_hash4 | ?string | O hash do ícone do servidor relatado, ou null quando não definido |
| reported_message_id | ?snowflake | A mensagem relatada, ou null para um relatório de usuário ou servidor |
| reported_channel_id | ?snowflake | O canal no qual o conteúdo relatado foi enviado |
| reported_channel_name4 | ?string | O nome do canal, ou null para um canal de mensagem direta |
| reported_channel_nsfw5 | ?boolean | O estado NSFW efetivo do canal relatado |
| reported_guild_invite_code4 | ?string | O código de convite pelo qual o servidor relatado foi alcançado |
| reported_guild_nsfw_level6 | ?integer | O nível NSFW do servidor |
| reported_guild_nsfw?4 7 | ?boolean | Se o servidor relatado foi marcado como NSFW |
| reported_guild_content_warning_level?4 7 | ?integer | O nível de aviso de conteúdo do servidor |
| reported_guild_content_warning_text?4 7 | ?string | O texto de aviso de conteúdo do servidor (no máximo 200 caracteres) |
| reported_channel_nsfw_override?4 7 | ?boolean | A substituição NSFW definida no próprio canal relatado |
| reported_channel_content_warning_level?4 7 | ?integer | O nível de aviso de conteúdo definido no próprio canal |
| reported_channel_content_warning_text?4 7 | ?string | O texto de aviso de conteúdo definido no próprio canal (no máximo 200 caracteres) |
| reported_channel_effective_nsfw?7 8 | ?boolean | Se o canal era NSFW depois de aplicar a configuração do servidor |
| reported_channel_effective_content_warning_level?7 8 | ?integer | O nível de aviso de conteúdo do canal depois de aplicar a configuração do servidor |
| reported_channel_effective_content_warning_text?7 8 | ?string | O texto de aviso de conteúdo do canal depois de aplicar a configuração do servidor |
| resolved_at9 | ?ISO8601 timestamp | Quando o relatório foi resolvido |
| resolved_by_admin_id9 | ?snowflake | A conta Admin que resolveu o relatório |
| public_comment9 | ?string | O comentário mostrado ao relator (no máximo 512 caracteres) |
1 Nulo para um aviso anônimo da Lei de Serviços Digitais, que é registrado sem uma conta do Decoding Chat, portanto cada campo de identidade do relator é nulo exatamente quando reporter_id é nulo
2 Resolvido a partir da conta quando a resposta é produzida, e nulo quando a conta não pode mais ser lida
3 Nulo a menos que o chamador tenha report:view:reporter_pii, e nulo quando o relator não forneceu nenhum valor
4 Capturado quando o relatório foi registrado e nunca atualizado depois
5 O estado efetivo capturado quando o relatório gravou um, caso contrário, o estado NSFW atual do canal relatado
6 Derivado da flag NSFW do servidor capturada, onde true é o nível 3 e false é o nível 0. Caso contrário, é lido do servidor relatado, do servidor de registro ou do servidor do canal
7 Sempre emitido, então um membro ausente e um membro nulo significam a mesma coisa
8 Calculado quando o relatório foi registrado, aplicando a configuração do servidor sobre a configuração do canal
9 Nulo enquanto o relatório for PENDING e definido quando for movido para RESOLVED
Exemplo
Seção intitulada “Exemplo”{ "report_id": "1502771904419102720", "reporter_id": "1483920011884392448", "reporter_tag": "wren#0042", "reporter_email": null, "reported_at": "2026-03-04T18:22:10.441Z", "status": 0, "report_type": 0, "category": "harassment", "additional_info": "Repeated after being asked to stop.", "reported_user_id": "1490118377238528000", "reported_guild_id": "1471002884199612416", "reported_message_id": "1502771119476146176", "reported_channel_id": "1471002884199612420", "reported_channel_nsfw": false, "reported_guild_nsfw_level": 0, "resolved_at": null, "resolved_by_admin_id": null, "public_comment": null}Status do relatório
Seção intitulada “Status do relatório”| Valor | Nome | Descrição |
|---|---|---|
| 0 | PENDING | O relatório aguarda revisão |
| 1 | RESOLVED | O relatório foi revisado e resolvido |
Tipo de relatório
Seção intitulada “Tipo de relatório”| Valor | Nome | Descrição |
|---|---|---|
| 0 | MESSAGE | Uma mensagem foi relatada |
| 1 | USER | Um usuário foi relatado |
| 2 | GUILD | Um servidor foi relatado |
Objeto de detalhe de relatório admin
Seção intitulada “Objeto de detalhe de relatório admin”O objeto de detalhe estende o Objeto de relatório admin com as evidências grandes demais para retornar em uma página de lista. Obter relatório emite esses membros e Listar relatórios os omite.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| mutual_dm_channel_id1 | ?snowflake | O canal de mensagem direta compartilhado pelo relator e pela conta relatada |
| message_context2 | array[objeto de contexto de mensagem de relatório] | As mensagens capturadas em torno do conteúdo relatado |
| message_responses3 | array[objeto de mensagem] | O estado atual das mesmas mensagens, lido ao vivo |
1 Definido apenas para um relatório USER que tenha relator e uma conta relatada, e nulo quando os dois não compartilham nenhum canal de mensagem direta
2 Vazio para um relatório que não capturou contexto de mensagem, que é todo relatório de usuário e todo relatório de servidor
3 Resolvido quando a resposta é produzida, portanto uma mensagem editada difere de sua entrada capturada
Objeto de contexto de mensagem de relatório
Seção intitulada “Objeto de contexto de mensagem de relatório”Uma entrada de contexto preserva uma mensagem como estava quando o relatório foi registrado. Edições ou exclusões posteriores não a alteram, e a evidência de anexo sobrevive à exclusão do original.
Um relatório de mensagem captura a mensagem relatada juntamente com no máximo 25 mensagens antes e no máximo 25 depois dela, para um máximo de 51 entradas. Uma mensagem cuja conta de autor o Decoding Chat não pôde ler no momento da captura fica ausente do relatório.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID da mensagem |
| channel_id1 | string | O canal do qual as mensagens capturadas foram lidas |
| channel_nsfw2 | ?boolean | O estado NSFW atual daquele canal |
| channel_content_warning_level?3 4 | ?integer | O nível de aviso de conteúdo do canal |
| channel_content_warning_text?3 4 | ?string | O texto de aviso de conteúdo do canal |
| guild_id5 | ?snowflake | O servidor ao qual o relatório tem escopo, ou null quando o relatório não nomeia nenhum |
| guild_nsfw_level2 | ?integer | O nível NSFW atual do servidor |
| guild_nsfw?3 4 | ?boolean | Se o servidor está marcado como NSFW |
| guild_content_warning_level?3 4 | ?integer | O nível de aviso de conteúdo do servidor |
| guild_content_warning_text?3 4 | ?string | O texto de aviso de conteúdo do servidor |
| content | string | O conteúdo da mensagem capturada, vazio quando a mensagem não tinha nenhum |
| timestamp6 | ISO8601 timestamp | Quando a mensagem foi enviada |
| attachments7 | array[objeto de anexo de mensagem de relatório] | As cópias de anexo capturadas |
| author_id | snowflake | O autor da mensagem |
| author_username | string | O nome de usuário capturado do autor |
| author_global_name4 | ?string | O nome de exibição do autor |
| author_discriminator | string | O discriminador do autor de quatro dígitos preenchido com zeros capturado |
| author_avatar | ?string | O hash do avatar do autor capturado, ou null quando não definido |
| user_prior_ncmec_report_ids?3 8 | array[string] | Os IDs de relatórios da NCMEC arquivados anteriormente contra o autor |
1 O canal da entrada capturada, caso contrário o canal relatado. Uma string vazia quando nenhum deles grava um, então isso nem sempre analisa como um snowflake
2 Lido do canal ou servidor atual, e nulo quando o registro não pode mais ser lido
3 Sempre emitido, então um membro ausente e um membro nulo significam a mesma coisa
4 Sempre nulo, porque a captura não armazena valor para isso
5 O servidor relatado, ou o servidor a partir do qual o relatório foi arquivado, para que cada entrada de um relatório tenha o mesmo valor
6 Derivado do ID da mensagem
7 O Decoding Chat descarta uma cópia de evidência que não grava nenhum nome de arquivo, não resolve para nenhum canal ou não recebe nenhuma URL de download, então essa matriz pode ser mais curta do que a original
8 Classificado em ordem crescente, com no máximo 100 entradas, e vazio quando nenhum relatório da NCMEC foi arquivado contra o autor
Objeto de anexo de mensagem de relatório
Seção intitulada “Objeto de anexo de mensagem de relatório”Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | snowflake | O ID do anexo |
| filename | string | O nome de arquivo capturado |
| url9 | string | O URL de download para a cópia de evidência |
| nsfw | ?boolean | Se o anexo foi marcado como NSFW |
| content_type | ?string | O tipo MIME capturado, ou nulo quando desconhecido |
| width | ?integer | A largura em pixels, ou nulo para um anexo que não seja imagem |
| height | ?integer | A altura em pixels, ou nulo para um anexo que não seja imagem |
| size?3 | ?integer | O tamanho em bytes, ou nulo quando desconhecido |
| ncmec_status10 | string | O Status de envio à NCMEC |
| ncmec_report_id | ?string | O ID do relatório da NCMEC, ou nulo quando o anexo nunca foi enviado |
| ncmec_failure_reason | ?string | O detalhe da falha, ou nulo a menos que ncmec_status seja failed |
9 A URL expira após cinco minutos. Busque o relatório novamente para obter novos links de anexos
10 Um envio em trânsito é armazenado como submitting, um valor que o registro abaixo não lista
Status de envio à NCMEC
Seção intitulada “Status de envio à NCMEC”| Valor | Descrição |
|---|---|
| not_submitted | O anexo nunca foi enviado à NCMEC |
| submitted | O anexo foi enviado à NCMEC |
| failed | O envio à NCMEC foi tentado e falhou |
Objeto de resolução de relatório
Seção intitulada “Objeto de resolução de relatório”Uma resolução de relatório é a visualização reduzida que Atualizar relatório retorna. Tem os campos que a atualização grava e nada mais.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| report_id | snowflake | O ID do relatório |
| status | integer | O status do relatório, sempre RESOLVED em uma atualização bem-sucedida |
| resolved_at | ?ISO8601 timestamp | Quando o relatório foi resolvido |
| public_comment | ?string | O comentário mostrado ao relator, ou nulo quando nenhum for fornecido |
Exemplo
Seção intitulada “Exemplo”{ "report_id": "1502771904419102720", "status": 1, "resolved_at": "2026-03-05T11:04:53.902Z", "public_comment": "Thanks for the report. We actioned the account."}Listar relatórios
Seção intitulada “Listar relatórios”GET/v1/admin/reportsRetorna uma página de objetos Relatório admin sem contexto de mensagem. Requer report:view.
A operação possui estes ramos. Fornecer q, report_type, category, reporter_id, reported_user_id, reported_guild_id, reported_channel_id, guild_context_id ou resolved_by_admin_id pesquisa o índice de relatórios e retorna total, offset e limit ao lado da página. Não fornecer nenhum deles lista por status apenas e retorna apenas reports.
O ramo apenas de status padroniza como PENDING, de modo que uma solicitação sem string de consulta retorna apenas relatórios pendentes. O ramo de pesquisa não aplica filtro de status quando status é omitido. sort_by e sort_order atingem apenas o ramo de pesquisa. O ramo de apenas status sempre ordena por reported_at decrescente.
Uma instância sem backend de pesquisa retorna 403 FEATURE_TEMPORARILY_DISABLED em ambos os ramos.
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| q?1 | string | Consulta em texto livre para corresponder contra os campos de relatório pesquisáveis (1-1024 caracteres) |
| status? | pending | resolved | Restringir os resultados a um status de relatório |
| report_type? | message | user | guild | Restringir os resultados a um tipo de relatório |
| category? | string | Restringir os resultados a uma categoria enviada (1-128 caracteres) |
| reporter_id? | snowflake | Restringir os resultados a um relator |
| reported_user_id? | snowflake | Restringir os resultados a uma conta relatada |
| reported_guild_id? | snowflake | Restringir os resultados a um servidor relatado |
| reported_channel_id?2 | snowflake | Restringir os resultados a um canal relatado |
| guild_context_id? | snowflake | Restringir resultados a relatórios registrados de dentro de um servidor |
| resolved_by_admin_id? | snowflake | Restringir resultados a uma conta de Admin que resolveu |
| sort_by?3 | created_at | reported_at | resolved_at | Campo de ordenação (padrão reported_at) |
| sort_order? | asc | desc | Direção de ordenação, onde asc é o mais antigo primeiro (padrão desc) |
| limit? | integer | Máximo de relatórios a retornar (1-200, padrão 50) |
| offset?4 | integer | Relatórios a pular (0-10000, padrão 0) |
1 Correspondido apenas contra category, additional_info, reported_guild_name e reported_channel_name. Omiti-lo corresponde a todos os relatórios que satisfazem os filtros restantes
2 A rota aceita-o e fornecer sem outro filtro ainda seleciona o ramo de pesquisa. A pesquisa ignora o seu valor e retorna relatórios correspondentes de todos os canais
3 created_at ordena pelo tempo codificado no ID do relatório, e reported_at pelo tempo de envio armazenado no relatório
4 A próxima página é solicitada com um offset maior
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| reports1 | array[objeto de relatório admin] | Relatórios nesta página, sem contexto de mensagem |
| total?2 3 | integer | Acertos no índice correspondentes aos filtros, menos os acertos nesta página que não resolvem mais |
| offset?2 | integer | O deslocamento com o qual esta página foi lida |
| limit?2 | integer | O limite com o qual esta página foi lida |
1 Uma ocorrência de índice cujo registro de relatório não existe mais é descartada e a solicitação ainda é bem-sucedida, portanto, uma página completa pode conter menos entradas que o limit
2 Presente apenas no ramo de pesquisa, de modo que o ramo de apenas status não relata total
3 Reduzido apenas pelas correspondências irresolvíveis da página que foi lida, por isso é um limite superior para o que o chamador pode percorrer
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | Página de relatório foi retornada |
| 403 | resposta de erro | Nenhum backend de pesquisa configurado para a instância e a solicitação retorna FEATURE_TEMPORARILY_DISABLED |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação registra uma entrada de auditoria de Admin com a ação search_reports, o tipo de destino report e ID de destino 0 em ambos os ramos. As chaves de metadados são limit, offset, result_count para os relatórios nesta página e total. O ramo de pesquisa adiciona sort_by e sort_order. Um q fornecido adiciona has_query com o valor true, e o texto da pesquisa não é registrado. Os filtros fornecidos adicionam status, report_type, reported_user_id, reported_guild_id e reported_channel_id em seus próprios nomes, reporter_id como reporter_user_id, guild_context_id como context_guild_id e resolved_by_admin_id como resolved_by_admin_user_id. category não é registrada. Um 403 não registra nada.
Limite de taxa
Seção intitulada “Limite de taxa”200 solicitações por minuto para cada usuário autenticado, no bucket admin:lookup.
Obter relatório
Seção intitulada “Obter relatório”GET/v1/admin/reports/{report_id}Retorna um Objeto de detalhe do relatório admin, que adiciona o contexto de mensagem capturado e o estado atual dessas mensagens. Requer report:view.
A operação responde mesmo quando o índice de pesquisa de relatório não está disponível. Os campos de contato do relator são redigidos aqui exatamente como são em Listar relatórios.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| report_id | snowflake | O ID do relatório |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | Objeto de detalhe de relatório admin | Relatório foi retornado |
| 404 | resposta de erro | Relatório não existe e a requisição retorna UNKNOWN_REPORT |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação registra uma entrada de auditoria de Admin com a ação get_report, tipo de alvo report, o ID do relatório como ID do alvo e chaves de metadados report_type e status com os valores inteiros do relatório. Os URLs de download de anexos não são registrados. Um 404 não registra nada.
Limite de taxa
Seção intitulada “Limite de taxa”200 solicitações por minuto para cada usuário autenticado, no bucket admin:lookup.
Atualizar relatório
Seção intitulada “Atualizar relatório”PATCH/v1/admin/reports/{report_id}Resolve um relatório e retorna um objeto de resolução de relatório. Requer report:resolve.
status é obrigatório e resolved é o único valor que aceita, então essa rota não altera nenhum outro campo.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| report_id | snowflake | O ID do relatório |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| status | resolved | O status para mover o relatório |
| public_comment?1 | string | O comentário mostrado ao relator (0-512 caracteres) |
1 Armazenado como nulo quando omitido ou vazio, e mostrado ao relator no aviso de resolução caso contrário
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de resolução de relatório | O relatório foi resolvido |
| 400 | resposta de erro | O relatório já está resolvido e a requisição retorna REPORT_ALREADY_RESOLVED |
| 404 | resposta de erro | Relatório não existe e a requisição retorna UNKNOWN_REPORT |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O relatório move para RESOLVED e registra resolved_at, resolved_by_admin_id e o comentário público.
O Decoding Chat registra uma entrada de auditoria de Admin com tipo de alvo report, ID de alvo igual ao ID do relatório e ação resolve_report. Os metadados são report_id e report_type.
O Decoding Chat notifica o relator quando o relatório tem uma conta de relator que ainda existe. O relator recebe uma mensagem direta do sistema e um e-mail quando a conta tem um endereço. Um aviso anônimo da Lei de Serviços Digitais não tem conta de relator e é resolvido sem notificação.
Um relator que ainda não tenha o canal do sistema aberto recebe Channel Create, e todas as sessões do relator recebem Message Create. O Decoding Chat registra uma falha de entrega e a solicitação ainda é bem-sucedida.
Limite de taxa
Seção intitulada “Limite de taxa”200 solicitações por minuto para cada usuário autenticado, no bucket admin:lookup.

