Listas de bloqueio (Blocklists)
O Decoding Chat possui nove listas de bloqueio para acesso à conta e conteúdo do usuário. Cada uma define seus valores aceitos, regras de correspondência e metadados. O Decoding Chat normaliza um valor quando o adiciona e novamente quando o verifica.
Cada lista possui suas próprias ACLs Admin. Uma leitura requer a permissão check da lista selecionada, uma adição ou atualização requer sua permissão add e uma remoção requer sua permissão remove. Uma conta que possui ban:ip:add grava na lista ip e em nenhuma outra. Toda operação registra o motivo da auditoria nas entradas de auditoria Admin que produz, e cada leitura produz uma entrada. Uma entrada sobre uma lista possui um tipo de alvo construído a partir do nome da lista com cada hífen escrito como um sublinhado, portanto as entradas de url-domain usam url_domain. email-domain-suspicious é a única exceção e usa email_domain.
O Decoding Chat constrói cada nome de permissão a partir de ban:, do nome da lista com cada hífen escrito como um sublinhado e do verbo, portanto a lista url-domain usa ban:url_domain:check, ban:url_domain:add e ban:url_domain:remove. A lista email-domain-suspicious é a única exceção e usa suspicious_email_domain:check, suspicious_email_domain:add e suspicious_email_domain:remove.
Tipos de lista de bloqueio
Seção intitulada “Tipos de lista de bloqueio”ip, email e email-domain-suspicious controlam o acesso e o registro da conta. phrase, url, url-domain, file-sha, avatar-hash e profile-substring controlam o que uma conta pode postar, vincular, enviar ou exibir. email e email-domain-suspicious não armazenam nada além do valor. Uma linha ip também armazena um tipo de banimento, um motivo, uma expiração e seu momento de criação.
| Valor | Descrição |
|---|---|
| ip1 | Endereços IPv4, endereços IPv6 e intervalos CIDR com serviço negado |
| email2 | Endereços de email exatos bloqueados de registro e de serem configurados em uma conta |
| email-domain-suspicious2 3 | Domínios de email que permitem o registro e exigem que a nova conta verifique um número de telefone primeiro |
| phrase4 | Frases bloqueadas no conteúdo |
| url5 | URLs absolutos http e https bloqueados de serem postados |
| url-domain6 | Domínios bloqueados de serem vinculados |
| file-sha7 | Hashes SHA-256 bloqueados de serem enviados (uploaded) |
| avatar-hash8 | Hashes de avatar bloqueados de serem configurados |
| profile-substring4 9 | Substrings bloqueadas a partir de um campo de perfil nomeado |
1 O Decoding Chat recusa um endereço com 400 IP_BAN_DECLINED quando ele está na lista de isenção de instâncias, ou quando os dados de pesquisa de IP mostram que um único endereço está em uma rede de operadora de celular, e registra ambas as recusas no log de auditoria Admin
2 Armazenado em letras minúsculas, de modo que um valor com maiúsculas e minúsculas não cria uma segunda linha
3 O Decoding Chat nunca mostra a lista ao titular da conta, que vê apenas a restrição do telefone verificado. Um domínio deve corresponder a ^[a-zA-Z0-9][a-zA-Z0-9\-.]*\.[a-zA-Z]{2,}$
4 Canonizado por normalização NFKC, remoção de caracteres de controle, formatação e seleção de variação, conversão para minúsculas e corte de espaços. Quando o Decoding Chat verifica a correspondência de um valor, ele também normaliza espaços em branco inseridos, pontuação e caracteres de compatibilidade
5 Canonizado antes do armazenamento. Um valor que o Decoding Chat não pode canonizar retorna 400 INVALID_FORM_BODY nomeando url
6 Armazenado em minúsculas e comparado ao hostname em minúsculas de um URL enviado. match_subdomains é armazenado na linha e o padrão é true, e a correspondência do hostname é exata independentemente do seu valor
7 Armazenado como hexadecimal em minúsculas
8 Armazenado como o hash de 8 caracteres com qualquer prefixo de animação a_ removido e o resto em minúsculas, de modo que as formas animada e estática de um avatar sejam a mesma linha
9 A única lista com escopo. Escopo e substring juntos identificam uma linha, de modo que a mesma substring possa ser armazenada uma vez por escopo
Os campos e as operações que uma lista aceita diferem de lista para lista. Leia o array fields e as flags supports_ de um objeto blocklist antes de gravar em uma lista.
Categorias das listas de bloqueio de conteúdo
Seção intitulada “Categorias das listas de bloqueio de conteúdo”Toda linha de url, url-domain, file-sha e avatar-hash tem uma categoria que nomeia de onde veio. Uma linha criada por meio deste recurso sem uma categoria explícita é armazenada como manual.
| Valor | Descrição |
|---|---|
| manual | Adicionado por um Admin por meio deste recurso |
| urlhaus | Importado do URLhaus |
| phishtank | Importado do PhishTank |
| google_safe_browsing | Importado do Google Safe Browsing |
| malware_bazaar | Importado do MalwareBazaar |
| ncmec | Importado de um conjunto de hashes da NCMEC |
| gifct | Importado de um conjunto de hashes do GIFCT |
| stop_ncii | Importado de um conjunto de hashes do StopNCII |
O campo de solicitação é uma string livre de 1 a 64 caracteres, de forma que um valor fora deste registro é aceito e armazenado literalmente. Tolere uma categoria armazenada fora do registro.
Severidades das listas de bloqueio de conteúdo
Seção intitulada “Severidades das listas de bloqueio de conteúdo”Toda linha de url, url-domain, file-sha e avatar-hash tem uma severidade. Uma linha criada sem uma severidade explícita é armazenada como 2.
| Valor | Nome | Descrição |
|---|---|---|
| 0 | ALLOW | Registra a correspondência e não toma nenhuma ação |
| 1 | WARN | Registra a correspondência, avisa e permite o conteúdo |
| 2 | BLOCK | Recusa o conteúdo |
| 3 | BLOCK_AND_REPORT | Recusa o conteúdo e gera uma denúncia |
Escopos de substring de perfil
Seção intitulada “Escopos de substring de perfil”| Valor | Descrição |
|---|---|
| username | Compara a substring com o nome de usuário da conta |
| global_name | Compara a substring com o nome de exibição da conta |
| nickname | Compara a substring com o apelido de uma guilda |
| bio | Compara a substring com a biografia do perfil |
| pronouns | Compara a substring com os pronomes do perfil |
Objeto Blocklist
Seção intitulada “Objeto Blocklist”Uma entrada do catálogo de listas de bloqueio retornada por List blocklists. O catálogo é fixo em cada versão e não reporta contagens.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio que esta entrada descreve |
| description | string | O resumo legível sobre o que a lista de bloqueio corresponde e como |
| value_field1 | string | O campo do corpo da solicitação que contém o valor ao adicionar |
| fields2 | array[string] | Os nomes dos campos que as linhas desta lista de bloqueio aceitam além do valor (no máximo 8) |
| scoped3 | boolean | Se as linhas têm o escopo de um campo de perfil e toda operação tem um escopo |
| supports_bulk_create4 | boolean | Se Bulk add blocklist entries é aceito |
| supports_bulk_delete5 | boolean | Se Bulk remove blocklist entries é aceito |
| supports_update6 | boolean | Se Update blocklist entry é aceito |
1 ip nomeia ip, email nomeia email, email-domain-suspicious e url-domain nomeiam domain, phrase nomeia phrase, url nomeia url, file-sha nomeia sha256_hex, avatar-hash nomeia hashes e profile-substring nomeia substrings
2 Vazio para ip, email, email-domain-suspicious e phrase. url nomeia category, severity, source_url e notes. url-domain adiciona match_subdomains, file-sha adiciona content_type e avatar-hash adiciona reason. profile-substring nomeia scope, reason e notes
3 Verdadeiro apenas para profile-substring
4 Verdadeiro apenas para file-sha
5 Verdadeiro apenas para avatar-hash e profile-substring
6 Verdadeiro para url, url-domain, file-sha, avatar-hash e profile-substring, que é exatamente o conjunto cujo array fields não está vazio
Exemplo
Seção intitulada “Exemplo”{ "list_type": "url-domain", "description": "Domains blocked from being linked, optionally covering every subdomain rooted at the domain.", "value_field": "domain", "fields": ["match_subdomains", "category", "severity", "source_url", "notes"], "scoped": false, "supports_bulk_create": false, "supports_bulk_delete": false, "supports_update": true}Objeto Blocklist entry
Seção intitulada “Objeto Blocklist entry”Uma linha armazenada de uma lista de bloqueio. Todo campo está presente em toda entrada, e um campo que a lista de bloqueio da linha não armazena é nulo.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio à qual a linha pertence |
| value1 | string | O valor canônico armazenado (1-2048 caracteres) |
| scope2 | ?string | O escopo da substring do perfil no qual a linha está armazenada |
| category3 | ?string | A categoria da lista de bloqueio de conteúdo sob a qual a linha foi registrada |
| severity3 | ?integer | A severidade da lista de bloqueio de conteúdo aplicada quando a linha corresponde |
| source_url3 | ?string | O URL do feed ou evidência a partir do qual a linha foi registrada |
| notes4 | ?string | A nota interna armazenada juntamente com a linha |
| content_type5 | ?string | A dica do tipo de mídia registrada junto com uma linha de file-sha |
| match_subdomains6 | ?boolean | Se uma linha de url-domain está sinalizada para cobrir subdomínios |
| reason7 | ?string | O motivo armazenado na linha |
| expires_at7 | ?ISO8601 timestamp | Quando a linha expira |
| created_at8 | ?ISO8601 timestamp | Quando a linha foi adicionada |
| created_by_user_id8 | ?snowflake | A conta Admin que adicionou a linha, ou nulo quando desconhecido |
1 A string exata que as operações de entrada única e o cursor after aceitam para aquela linha
2 Não nulo apenas em profile-substring
3 Não nulo apenas em url, url-domain, file-sha e avatar-hash, onde category e severity são sempre definidos
4 Não nulo apenas em url, url-domain, file-sha, avatar-hash e profile-substring
5 Não nulo apenas em file-sha
6 Não nulo apenas em url-domain
7 Não nulo apenas em ip. Um endereço adicionado por meio de Add blocklist entry é escrito como um banimento permanente, portanto ele é lido de volta com o motivo platform_admin_enforcement e um expires_at nulo
8 Ambos nulos em email, email-domain-suspicious e phrase, que não armazenam nada além do valor. created_by_user_id também é nulo em ip
Exemplo
Seção intitulada “Exemplo”{ "list_type": "url-domain", "value": "malicious.example.com", "scope": null, "category": "urlhaus", "severity": 2, "source_url": "https://urlhaus.example.com/entry/912", "notes": null, "content_type": null, "match_subdomains": true, "reason": null, "expires_at": null, "created_at": "2026-01-22T07:41:19.003Z", "created_by_user_id": "1483920011884392448"}Objeto Blocklist check
Seção intitulada “Objeto Blocklist check”A decisão que Check blocklist entry retorna para um valor.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| banned1 | boolean | Se o valor está atualmente bloqueado pela lista de bloqueio nomeada |
1 Relata a decisão que o caminho de execução tomaria para esse valor
Objeto Blocklist entry creation
Seção intitulada “Objeto Blocklist entry creation”O corpo de Add blocklist entry possui uma forma por lista de bloqueio, e o segmento de caminho list_type seleciona a forma. O campo que possui o valor difere por lista de bloqueio, e dois dos nove aceitam um array, então uma solicitação pode adicionar até 1000 hashes de avatar ou substrings de perfil.
Campo de valor
Seção intitulada “Campo de valor”| Lista de bloqueio | Campo | Valor aceito |
|---|---|---|
| ip | ip | Endereço IPv4, endereço IPv6 ou intervalo CIDR de 1 a 45 caracteres |
| Endereço de e-mail de 1 a 254 caracteres | ||
| email-domain-suspicious | domain | Domínio de 1 a 253 caracteres correspondente a ^[a-zA-Z0-9][a-zA-Z0-9\-.]*\.[a-zA-Z]{2,}$ |
| phrase | phrase | Frase de 1 a 500 caracteres |
| url | url | URL absoluto http ou https de 1 a 2048 caracteres |
| url-domain | domain | Domínio de 1 a 253 caracteres |
| file-sha | sha256_hex | Exatamente 64 caracteres hexadecimais |
| avatar-hash1 | hashes | 1 a 1000 hashes, cada um de 8 a 10 caracteres correspondentes a ^(a_)?[0-9a-fA-F]{8}$ |
| profile-substring1 2 | substrings | 1 a 1000 substrings, cada uma de 1 a 500 caracteres |
1 Cada valor é canonizado e gravado como sua própria linha com sua própria entrada de auditoria Admin
2 scope é obrigatório no mesmo corpo
Cada campo é uma string, exceto hashes e substrings, que são array[string].
avatar-hash desduplica o array após a canonização. profile-substring não o faz, então uma substring repetida em uma solicitação é gravada uma vez e auditada uma vez por ocorrência. Um valor de profile-substring que seja canonizado para uma string vazia é ignorado.
Campos adicionais
Seção intitulada “Campos adicionais”| Campo | Tipo | Descrição |
|---|---|---|
| scope3 | string | O escopo de substring de perfil para armazenar as linhas |
| category?4 | string | A categoria da lista de bloqueio de conteúdo (1-64 caracteres, padrão manual) |
| severity?4 | integer | A severidade da lista de bloqueio de conteúdo (0-3, padrão 2) |
| match_subdomains?5 | boolean | Se a linha está sinalizada como cobrindo subdomínios (padrão true) |
| content_type?6 | string | A dica do tipo de mídia (1-128 caracteres) |
| source_url?4 | string | O URL do feed ou evidência (1-2048 caracteres) |
| reason?7 | string | O motivo (1-1024 caracteres) |
| notes?8 | string | A nota interna (1-1024 caracteres) |
3 Exigido por profile-substring. Todas as outras listas de bloqueio removem scope
4 Aceito apenas por url, url-domain, file-sha e avatar-hash
5 Aceito apenas por url-domain
6 Aceito apenas por file-sha
7 Aceito apenas por avatar-hash e profile-substring, e gravado nos metadados da entrada de auditoria
8 Aceito apenas por url, url-domain, file-sha, avatar-hash e profile-substring
List blocklists
Seção intitulada “List blocklists”GET/v1/admin/blocklistsRetorna um objeto blocklist para cada lista de bloqueio que esta instância mantém. Requer qualquer uma das permissões check.
A resposta é idêntica para todos os Admins.
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| items1 | array[objeto blocklist] | Toda lista de bloqueio exposta por esta instância |
1 Sempre o catálogo completo em uma resposta. Não há cursor, nem has_more, e nem next_after
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | O catálogo foi retornado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação registra uma entrada de auditoria Admin com a ação list_blocklists, o tipo de alvo blocklist, o ID do alvo 0 e a chave de metadados result_count.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
List blocklist entries
Seção intitulada “List blocklist entries”GET/v1/admin/blocklists/{list_type}/entriesRetorna uma página de cursor ordenada por valor de objetos blocklist entry. Exige a permissão check da lista selecionada.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio |
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| limit? | integer | Máximo de entradas a serem retornadas (1-200, padrão 50) |
| after?1 | string | Retorna as entradas ordenadas estritamente depois desse valor (1-2048 caracteres) |
| scope?2 | string | O escopo da substring do perfil a listar |
1 Comparado como uma string em relação ao valor armazenado canônico. O Decoding Chat não o valida contra a lista de bloqueio selecionada, de modo que um cursor impossível não retorna nenhuma entrada
2 Obrigatório para profile-substring e rejeitado por todas as outras listas de bloqueio
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| items | array[objeto blocklist entry] | Entradas nesta página, ordenadas pelo valor ascendente |
| has_more | boolean | Se outra página pode ser obtida com next_after |
| next_after3 | ?string | O valor da entrada armazenado a ser enviado como after, ou nulo na última página |
3 Um cursor de valor, portanto é retornado textualmente como after
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | A página de entradas foi retornada |
| 400 | resposta de erro | scope é fornecido em uma lista de bloqueio sem escopo ou omitido em profile-substring, e a solicitação retorna INVALID_FORM_BODY |
O custo de uma página não diminui conforme o cursor avança, então percorra uma lista grande com o maior limit que a operação aceitar.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação registra uma entrada de auditoria Admin com a ação list_blocklist_entries, o tipo de alvo da lista selecionada, ID do alvo 0 e chaves de metadados list_type, limit, result_count para as entradas nesta página e has_more. profile-substring adiciona scope, e se after for fornecido adiciona has_after. O valor do cursor e os valores de entrada não são gravados. Um 400 não registra nada.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Add blocklist entry
Seção intitulada “Add blocklist entry”POST/v1/admin/blocklists/{list_type}/entriesCanoniza o valor ou os valores submetidos e os escreve na lista de bloqueio selecionada. Retorna 204 com um corpo vazio. Exige a permissão add da lista selecionada.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio |
Corpo JSON
Seção intitulada “Corpo JSON”O corpo é um objeto de criação de blocklist entry. list_type seleciona a forma, então um corpo válido para uma lista de bloqueio falhará na validação em outra.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Os valores foram gravados |
| 400 | resposta de erro | INVALID_FORM_BODY porque o valor não é válido para a lista ou um campo que a lista não aceita foi fornecido |
Um campo de corpo que a lista de bloqueio selecionada não aceita é removido e nunca produz esse 400. Um url que o Decoding Chat não pode canonizar retorna 400 INVALID_FORM_BODY nomeando url no array errors.
O Decoding Chat se recusa a adicionar um ip com 400 IP_BAN_DECLINED quando o endereço está na lista de isenções da instância e quando um único endereço é classificado como uma rede de operadora móvel de alto raio de explosão. O Decoding Chat executa essa verificação da rede da operadora apenas para um único endereço, de modo que a verificação nunca recusa um intervalo CIDR. Quando a pesquisa de IP para a verificação falha, o Decoding Chat trata o endereço como de baixo risco e o escreve.
A resposta não tem corpo, portanto não reporta a forma canônica que foi armazenada. Leia-a de volta com List blocklist entries.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat verifica as solicitações posteriores contra as linhas gravadas. Para toda lista exceto email e email-domain-suspicious, outros nós veem as linhas após um curto atraso de propagação. Nenhum Gateway Dispatch é emitido.
O Decoding Chat registra uma entrada de auditoria Admin por valor escrito, com esse valor em seus metadados. Ele também registra uma entrada para um ip recusado, sob a ação ban_ip_skipped_exempt ou ban_ip_skipped_cgnat, antes de retornar o 400.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Bulk add blocklist entries
Seção intitulada “Bulk add blocklist entries”PUT/v1/admin/blocklists/{list_type}/entriesEnfileira um trabalho em segundo plano que adiciona até 10.000 hashes SHA-256 à lista de bloqueio file-sha e retorna o ID do trabalho imediatamente. Requer ban:file_sha:add.
Apenas file-sha aceita essa operação, reportada como supports_bulk_create por List blocklists. Qualquer outro tipo de lista retorna 400 INVALID_FORM_BODY.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio, que aqui é file-sha |
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| sha256_list1 | array[string] | Os hashes SHA-256 a adicionar (1-10.000 itens de exatamente 64 caracteres) |
1 O corpo impõe o comprimento de cada item. O trabalho verifica o alfabeto e registra um item não hexadecimal como uma falha invalid_sha256
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| job_id | snowflake | O trabalho em segundo plano aplicando os hashes |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | O trabalho foi enfileirado |
| 400 | resposta de erro | O tipo de lista não é file-sha e a solicitação retorna INVALID_FORM_BODY |
A operação retorna antes que qualquer hash seja gravado. Leia o progresso e as contagens finais em Get job e pare o trabalho com Cancel job. O trabalho relata o progresso a cada 50 hashes e termina com um resumo informando quantos foram escritos e quantos falharam.
Cada hash é gravado com a categoria manual, a severidade 2 e um tipo de conteúdo, URL de origem e nota nulos. O caminho em massa não aceita metadados, portanto um hash que precisa de qualquer um desses dados passa por Add blocklist entry ou um futuro Update blocklist entry.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Cada hash é convertido em minúsculas e substitui qualquer entrada existente. As alterações se tornam visíveis em toda a instância quando o trabalho é interrompido, tendo sido executado até o final ou cancelado, de forma que um trabalho cancelado ainda aplica os hashes que já gravou. Nenhum Gateway Dispatch é emitido.
A solicitação registra uma entrada de auditoria Admin com a ação queue_bulk_job, tipo de alvo bulk_job, o ID do trabalho como ID do alvo e chaves de metadados task e entity_count. task é ban_file_shas e entity_count é o número de hashes enviados.
O trabalho registra uma entrada de auditoria Admin por hash escrito sob a ação ban_file_sha, com o hash em seus metadados, exatamente como em Add blocklist entry. Depois, ele registra uma entrada agregada sob a ação bulk_ban_file_shas, com as contagens de submetidos, processados, bem-sucedidos e falhos. Um trabalho cancelado registra as entradas para os hashes gravados e uma entrada agregada marcada como cancelled.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Bulk remove blocklist entries
Seção intitulada “Bulk remove blocklist entries”DELETE/v1/admin/blocklists/{list_type}/entriesCanoniza até 1000 valores e remove suas linhas da lista de bloqueio selecionada. Retorna 204 com um corpo vazio. Exige a permissão remove da lista selecionada.
Apenas avatar-hash e profile-substring aceitam esta operação, reportada como supports_bulk_delete por List blocklists. Qualquer outro tipo de lista retorna 400 INVALID_FORM_BODY.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio, que aqui é avatar-hash ou profile-substring |
Corpo JSON
Seção intitulada “Corpo JSON”O corpo é selecionado por list_type.
| Campo | Tipo | Descrição |
|---|---|---|
| hashes1 | array[string] | Hashes de avatar a serem removidos (1-1000 itens de 8 a 10 caracteres correspondentes a ^(a_)?[0-9a-fA-F]{8}$) |
| scope2 | string | O escopo da substring de perfil em que as substrings estão armazenadas |
| substrings2 | array[string] | Substrings a serem removidas (1-1000 itens de 1 a 500 caracteres) |
1 Apenas para avatar-hash, onde ele é o corpo inteiro
2 Apenas para profile-substring, onde ambos são necessários. reason e notes são aceitos, mas ignorados
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Os valores foram processados |
| 400 | resposta de erro | A lista não aceita remoção em massa ou a validação do corpo falha, e a solicitação retorna INVALID_FORM_BODY |
A operação é idempotente e não relata contagens. Um valor sem nenhuma linha armazenada ainda retorna 204. Leia a lista antes e depois para distinguir uma remoção de um não-operacional (no-op).
avatar-hash desduplica o array após a canonização. profile-substring não o faz, então uma substring repetida em uma solicitação é removida uma vez e auditada uma vez por ocorrência. Um valor de profile-substring que seja canonizado para uma string vazia é ignorado.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Depois que a remoção atinge cada nó, o Decoding Chat não verifica mais as solicitações posteriores contra as entradas removidas. Um valor pode permanecer bloqueado por outra entrada correspondente. Nenhum Gateway Dispatch é emitido.
A operação registra uma entrada de auditoria Admin por valor canônico processado.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Check blocklist entry
Seção intitulada “Check blocklist entry”GET/v1/admin/blocklists/{list_type}/entries/{entry_value}Informa se um valor está atualmente bloqueado pela lista de bloqueio selecionada e retorna um objeto blocklist check. Exige a permissão check da lista selecionada.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio |
| entry_value1 | string | O valor codificado por porcentagem (percent-encoded) a verificar (1-2048 caracteres) |
1 A codificação por porcentagem é necessária porque um valor canônico pode conter uma barra. O Decoding Chat verifica o valor apenas pelo comprimento, de modo que um valor no formato errado retorna 200 com banned false
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| scope?2 | string | O escopo da substring de perfil para verificar o valor contra |
2 Exigido por profile-substring e rejeitado por qualquer outra lista de bloqueio
Regra de correspondência por lista de bloqueio
Seção intitulada “Regra de correspondência por lista de bloqueio”| Lista de bloqueio | Regra |
|---|---|
| ip3 4 | O próprio endereço, qualquer intervalo CIDR armazenado que o contenha e qualquer endereço armazenado que a instância trata como da mesma origem |
| Correspondência exata no endereço em minúsculas | |
| email-domain-suspicious5 | Correspondência exata no domínio em minúsculas |
| phrase | Correspondência de frase normalizada, então uma forma disfarçada de uma frase armazenada ainda é lida como bloqueada |
| url6 | Correspondência exata no URL canonizado |
| url-domain | Correspondência exata no hostname em minúsculas |
| file-sha | Correspondência exata no hash hexadecimal em minúsculas |
| avatar-hash | Correspondência exata após o prefixo a_ ser removido e o hash ser convertido para minúsculas |
| profile-substring | Correspondência de substring normalizada dentro do escopo nomeado |
3 Qualquer valor que não seja um único endereço, incluindo um intervalo CIDR, sempre lê como não bloqueado. Um endereço na lista de isenção da instância é lido como não bloqueado, mesmo quando existe uma linha
4 Dois endereços são a mesma origem quando eles compartilham uma chave de decisão, que é o endereço exato para IPv4 e o prefixo /64 para IPv6
5 Um domínio que a política de contas da instância marca como isento de verificações de reputação é lido como não bloqueado mesmo enquanto existe uma linha
6 Esta verificação não lê a lista url-domain, portanto, um URL que um domínio armazenado bloqueia será lido como não bloqueado. Verifique o hostname separadamente
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto blocklist check | O valor foi verificado |
| 400 | resposta de erro | scope é fornecido em uma lista de bloqueio sem escopo ou omitido em profile-substring, e a solicitação retorna INVALID_FORM_BODY |
Um valor sem nenhuma linha e nenhuma correspondência de cobertura retorna 200 com banned false, portanto esta operação nunca informa se uma linha específica existe. Use List blocklist entries para isso.
Para toda lista exceto email e email-domain-suspicious, uma linha gravada em outro nó se torna visível aqui após um curto atraso de propagação.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A operação registra uma entrada de auditoria Admin com a ação check_blocklist_entry, o tipo de alvo da lista selecionada, ID de alvo 0 e chaves de metadados list_type e banned. profile-substring adiciona scope. O valor verificado não é registrado. Um 400 não registra nada.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Update blocklist entry
Seção intitulada “Update blocklist entry”PATCH/v1/admin/blocklists/{list_type}/entries/{entry_value}Reescreve os campos armazenados de uma linha sem removê-la e readicioná-la. Retorna 204 com um corpo vazio. Exige a permissão add da lista selecionada.
Apenas url, url-domain, file-sha, avatar-hash e profile-substring aceitam esta operação, reportada como supports_update por List blocklists. Uma lista sem campos armazenados não tem nada para atualizar e retorna 400 INVALID_FORM_BODY.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio |
| entry_value | string | O valor canônico percent-encoded da linha a ser gravada (1-2048 caracteres) |
Corpo JSON
Seção intitulada “Corpo JSON”O corpo é o formato de criação da lista de bloqueio selecionada com o campo de valor removido, portanto a mesma lista de campos e os mesmos limites se aplicam.
| Campo | Tipo | Descrição |
|---|---|---|
| scope1 | string | O escopo de substring de perfil para gravar a linha sob ele |
| category?2 | string | A categoria da lista de bloqueio de conteúdo (1-64 caracteres, padrão manual) |
| severity?2 | integer | A severidade da lista de bloqueio de conteúdo (0-3, padrão 2) |
| match_subdomains?3 | boolean | Se a linha está sinalizada para cobrir subdomínios (padrão true) |
| content_type?4 | string | A dica de tipo de mídia (1-128 caracteres) |
| source_url?2 | string | O URL do feed ou evidência (1-2048 caracteres) |
| reason?5 | string | O motivo (1-1024 caracteres) |
| notes?6 | string | A nota interna (1-1024 caracteres) |
1 Requerido por profile-substring. Esta operação não aceita parâmetros de consulta, portanto, o escopo vai no corpo, e qualquer outra lista de bloqueio o ignora lá
2 Aceito apenas por url, url-domain, file-sha e avatar-hash
3 Aceito apenas por url-domain
4 Aceito apenas por file-sha
5 Aceito apenas por avatar-hash e profile-substring, e gravado nos metadados da entrada de auditoria
6 Aceito apenas por url, url-domain, file-sha, avatar-hash e profile-substring
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | A linha foi gravada |
| 400 | resposta de erro | A lista não aceita atualização ou a validação do corpo falha, e a solicitação retorna INVALID_FORM_BODY |
Na lista de bloqueio url, um entry_value que o Decoding Chat não pode canonizar retorna 400 INVALID_FORM_BODY nomeando url no array errors.
A gravação é um upsert no valor canônico, de forma que um valor sem uma linha existente é criado. Esta operação nunca retorna 404. Uma url bloqueada apenas por uma linha mais ampla em url-domain não tem linha própria, e atualizá-la pelo URL cria silenciosamente uma nova linha de URL exato.
Mudar o scope de uma linha profile-substring grava uma segunda linha sob o novo escopo e mantém a original em seu lugar. A remoção do original exige a ação Remove blocklist entry.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Depois que a alteração atinge todos os nós, correspondências posteriores usam os campos atualizados. Nenhum Gateway Dispatch é emitido.
A gravação registra uma entrada de auditoria Admin sob a mesma ação de uma adição, com o valor canônico mas sem os valores prévios dos campos alterados.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Remove blocklist entry
Seção intitulada “Remove blocklist entry”DELETE/v1/admin/blocklists/{list_type}/entries/{entry_value}Remove uma linha da lista de bloqueio selecionada. Retorna 204 com um corpo vazio. Requer a permissão remove da lista selecionada.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| list_type | string | O tipo de lista de bloqueio |
| entry_value1 | string | O valor canônico percent-encoded da linha a ser removida (1-2048 caracteres) |
1 Canonizado do mesmo modo que foi no momento da adição e com correspondência exata, portanto, um url bloqueado apenas por uma linha mais ampla em url-domain não pode ser removido através da URL
Parâmetros de consulta
Seção intitulada “Parâmetros de consulta”| Campo | Tipo | Descrição |
|---|---|---|
| scope?2 | string | O escopo de substring de perfil no qual a linha está armazenada |
2 Exigido por profile-substring e rejeitado por qualquer outra lista de bloqueio
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | O valor foi processado |
| 400 | resposta de erro | scope é fornecido em uma lista de bloqueio sem escopo ou omitido em profile-substring, e a solicitação retorna INVALID_FORM_BODY |
Na lista de bloqueio url, um entry_value que o Decoding Chat não pode canonizar retorna 400 INVALID_FORM_BODY nomeando url no array errors.
A remoção é idempotente. Um valor sem linha armazenada retorna 204 e ainda registra uma entrada de auditoria Admin, portanto esta operação nunca retorna 404 e nunca reporta se algo foi removido.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A linha removida para de afetar as decisões subsequentes da lista de bloqueio. Para toda lista exceto email e email-domain-suspicious, outros nós param de aplicá-la após um curto atraso de propagação. Um valor pode permanecer bloqueado por outra linha que faça correspondência, como um único endereço coberto por um intervalo CIDR armazenado. Nenhum Gateway Dispatch é emitido.
A remoção registra uma entrada de auditoria Admin, com o valor canônico nos seus metadados.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.
Block a user’s current avatar
Seção intitulada “Block a user’s current avatar”POST/v1/admin/users/{user_id}/avatar-blockAdiciona o hash de avatar atual da conta à lista de bloqueio avatar-hash e retorna o hash armazenado. Requer ban:avatar_hash:add.
Isto é um atalho para Add blocklist entry para bloquear um avatar que um Admin esteja verificando. A operação lê o hash do avatar atual e remove qualquer prefixo de animação a_, portanto o valor armazenado é a forma de 8 caracteres. Ele grava a mesma linha que a operação adicionar, com a categoria manual, a severidade 2 e um URL de origem nulo. Ele não bane, suspende ou age de outra forma na conta.
Parâmetros de caminho
Seção intitulada “Parâmetros de caminho”| Campo | Tipo | Descrição |
|---|---|---|
| user_id | snowflake | A conta cujo avatar atual é bloqueado |
Corpo JSON
Seção intitulada “Corpo JSON”Ambos os campos são opcionais, de modo que um corpo vazio e {} são solicitações válidas.
| Campo | Tipo | Descrição |
|---|---|---|
| reason?1 | string | O motivo (1-1024 caracteres) |
| notes?2 | string | A nota interna (1-1024 caracteres) |
1 Gravado nos metadados da entrada de auditoria Admin, portanto nenhuma leitura da linha o retorna
2 Armazenado na linha. Omiti-lo armazena a nota gerada banned via user shortcut user_id=<user_id>
Corpo da resposta
Seção intitulada “Corpo da resposta”| Campo | Tipo | Descrição |
|---|---|---|
| hash_short | string | O hash do avatar armazenado de 8 caracteres |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | corpo da resposta | O hash de avatar foi escrito |
| 404 | resposta de erro | UNKNOWN_USER quando a conta não existe, ou NOT_FOUND quando a conta não tem avatar |
A conta mantém o avatar bloqueado até que ela defina um novo. Limpá-lo é uma solicitação separada nomeando avatar no array fields de Clear user profile fields.
O hash do avatar são os primeiros 8 caracteres do digest MD5 da imagem, de forma que toda conta usando aquela imagem tem o mesmo hash de avatar, logo o bloqueio do hash bloqueia a imagem para toda conta.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O hash bloqueia uploads de avatar subsequentes depois que a mudança se propaga por toda a instância. Nenhum Gateway Dispatch é emitido.
O Decoding Chat registra uma entrada de auditoria Admin sob a ação ban_avatar_hash, com o hash armazenado e o motivo fornecido.
Limite de taxa
Seção intitulada “Limite de taxa”60 solicitações por minuto para cada usuário autenticado, no bucket admin:ban:operation.

