Pular para o conteúdo
Decoding Chat API

Instância

Descubra os endpoints de uma implantação, os recursos disponíveis e os limites, consulte a localização aproximada do cliente ou baixe o documento OpenAPI.

Obter descoberta de instância é o ponto de entrada da API. Um cliente que conhece apenas uma origin do Decoding Chat lê /.well-known/fluxer primeiro, e essa única resposta não autenticada tem todos os campos do objeto de descoberta de instância. Esses valores incluem as URLs base da API, a URL WebSocket do Gateway principal e a URL base do Media Proxy. Eles substituem os padrões de caminho do endpoint que uma implantação serviria da sua origin pública canônica.

Toda rota aqui é não autenticada. Uma credencial não altera nenhum corpo de resposta. Uma que resolve para uma conta move o bucket de rate limit do endereço IP do cliente para essa conta.

Cada uma das rotas responde com Access-Control-Allow-Origin: *, substituído pela Origin da requisição quando a política de requisições de origem cruzada da implantação permite aquela origin. A API Admin de Instância define o lado do operador da mesma configuração.

O documento de descoberta é a descrição pública completa de uma implantação. Todo campo está sempre presente.

CampoTipoDescrição
api_code_version1integerA versão do código do servidor de API que esta implantação executa
endpointsendpoints de instância objectEndpoints públicos de serviço desta implantação
captchaconfiguração de CAPTCHA objectConfiguração pública de CAPTCHA
featuresrecursos de instância objectEstado público de recursos da implantação
gifprovedor de GIF objectO provedor de GIF ativo e seu requisito de atribuição
ssostatus de SSO objectEstado público de autenticação única
registrationpolítica de registro objectPolítica pública de registro
communitypolítica de comunidade objectPadrões da comunidade e política de mensagens diretas
servicesdisponibilidade de serviço objectDisponibilidade resolvida de integrações de terceiros
limitsconfiguração de limites objectRegras de limite ordenadas e nomes de traits que a implantação declara
pushconfiguração de push objectIdentidade pública de Web Push
app_publicconfiguração pública de aplicação objectConfiguração pública do cliente

1 O valor é um inteiro simples que aumenta quando a API introduz uma mudança que um cliente deve observar, e o valor atual é 1

Cada valor é uma URL absoluta fornecida pelo operador. Um valor pode ser uma origin simples ou uma origin com prefixo de caminho, pois uma implantação pode servir várias funções de uma única origin pública canônica. Um cliente que recebe dois endpoints que compartilham uma origin NÃO DEVE inferir host, esquema ou porta separados para nenhum deles.

CampoTipoDescrição
api1stringURL base para requisições autenticadas à API
api_client1stringURL base para requisições da API do cliente
api_publicstringURL base para requisições públicas à API
gateway2stringURL WebSocket do Gateway principal
mediastringURL base do Media Proxy, também usada como base do relay de upload de anexos
static_cdn3stringURL base de assets estáticos
marketingstringURL base do site de marketing
adminstringURL base do aplicativo admin
invitestringURL base de links de convite
giftstringURL base de links de presente
webappstringURL base do aplicativo web

1 Ambos os campos são o mesmo endpoint de API do cliente configurado, que o aplicativo web de primeira parte lê. api_public é o endpoint de API pública configurado separadamente, que um bot, biblioteca ou outro cliente de terceiros lê. Uma implantação pode apontar os dois para uma origin, e a instância hospedada pelo Decoding Chat não faz isso

2 O valor é o endpoint Gateway configurado e seu esquema é ws ou wss conforme o operador configurou

3 Quando uma implantação configura um domínio de assets estáticos separado, o valor é https:// seguido daquele domínio, sem porta

Cada valor é a origin exata que a implantação anuncia, incluindo seu esquema e qualquer porta explícita, e uma implantação deliberadamente HTTP simples publica valores http e ws aqui.

O operador configura uma origin pública canônica com esquema exato http ou https, host e porta explícita opcional. O aplicativo web é servido nessa própria origin, e os outros endpoints padrão para um caminho sob ela:

EndpointCaminho padrão
HTTP API/api
Media Proxy/media
Aplicativo admin/admin
Site de marketing/marketing
Links de convite/invite
Links de presente/gift
Gateway/gateway

O esquema do Gateway é ws ou wss. Uma porta que equivale ao padrão para seu esquema é omitida.

Uma implantação pode configurar um domínio separado de assets estáticos, de convite e de presente, e pode substituir qualquer endpoint por um override exato.

{
"api": "https://api.example.com",
"api_client": "https://api.example.com",
"api_public": "https://public.example.com",
"gateway": "wss://gateway.example.com",
"media": "https://media.example.com",
"static_cdn": "https://cdn.example.com",
"marketing": "https://example.com",
"admin": "https://admin.example.com",
"invite": "https://example.com/invite",
"gift": "https://example.com/gift",
"webapp": "https://app.example.com"
}

Qual provedor de CAPTCHA esta implantação usa e as chaves de site que um cliente precisa para renderizar o desafio.

CampoTipoDescrição
provider1stringO provedor de CAPTCHA selecionado
hcaptcha_site_key2?stringA chave de site hCaptcha configurada, ou null quando nenhuma está configurada
turnstile_site_key2?stringA chave de site Turnstile configurada, ou null quando nenhuma está configurada

1 O valor é none quando a chave de site ou secreta do provedor configurado está ausente

2 Apenas a chave que corresponde a provider é não null, portanto ambas são null enquanto provider é none

ValorDescrição
noneA implantação não exige CAPTCHA
hcaptchaDesafios hCaptcha protegem as operações que o requerem
turnstileDesafios Cloudflare Turnstile protegem as operações que o requerem

O handshake completo de desafio, incluindo os cabeçalhos de requisição X-Captcha-Token e X-Captcha-Type, é definido em Tratamento de CAPTCHA.

Switches em toda a implantação que um cliente lê antes de oferecer um recurso, além de indicar se a implantação se define como auto-hospedada.

CampoTipoDescrição
voice_enabledbooleanSe chamadas de voz e vídeo estão habilitadas
stripe_enabledbooleanSe o faturamento via Stripe está habilitado
self_hostedbooleanSe esta implantação se identifica como auto-hospedada
presigned_attachment_uploadsbooleanSe um cliente pode solicitar URLs de upload de anexo pré-assinadas
emails_enabled1booleanSe a implantação envia e-mail

1 O valor é true apenas quando o e-mail está ativado e o transporte está completamente configurado

Uma implantação que reporta emails_enabled como false não envia verificação, recuperação de senha ou mensagem de autorização por IP, e os fluxos que dependem disso ficam inutilizáveis.

O provedor de GIF que esta implantação vinculou e se um cliente mostra sua marca de atribuição.

CampoTipoDescrição
providerstringNome de máquina estável do provedor de GIF ativo
display_namestringNome legível do provedor que um cliente exibe
attribution_required1booleanSe um cliente deve exibir a atribuição do provedor

1 Um cliente que renderiza resultados de GIF exibe a marca de atribuição do provedor ao lado deles quando este valor é true

Os campos descrevem o provedor que uma implantação vinculou mesmo quando a disponibilidade de serviço reporta gif_enabled como false. Um cliente lê gif_enabled para decidir se oferece o seletor. Uma implantação que não vinculou nenhum provedor de GIF ainda publica os valores padrão klipy, Klipy e false.

Quem pode registrar uma conta nesta implantação.

CampoTipoDescrição
modestringO modo de registro
admin_registration_urls_enabled1booleanSe um código de URL de registro emitido por administrador é aceito

1 Quando true, Registrar uma conta aceita registration_url_code; um código válido admite registro mesmo enquanto mode é closed, e o requisito de aprovação próprio do código substitui o que o modo definiria

ValorDescrição
openQualquer pessoa pode se registrar e recebe uma sessão imediatamente
approvalO registro é bem-sucedido, mas a conta aguarda aprovação do administrador antes de poder entrar
closedO registro público é recusado

Se esta implantação funciona como uma única comunidade e se mensagens diretas existem nela.

CampoTipoDescrição
single_communitybooleanSe esta implantação funciona como uma única comunidade que toda conta ingressa
single_community_guild_id1?snowflakeO ID do servidor que toda conta ingressa no modo de comunidade única, ou null
direct_messages_disabledbooleanSe mensagens diretas e pedidos de amizade estão desabilitados para toda a implantação

1 O identificador é publicado apenas enquanto single_community é true e a implantação designou um servidor de comunidade

Cada campo indica se uma integração opcional está disponível nesta implantação.

CampoTipoDescrição
gif_enabledbooleanSe o seletor de GIF está disponível
youtube_enabledbooleanSe o enriquecimento de links do YouTube está disponível
bluesky_enabledbooleanSe conexões Bluesky estão disponíveis

A identidade pública de Web Push desta implantação.

CampoTipoDescrição
public_vapid_key1?stringA chave pública VAPID de Web Push da implantação, ou null

1 Null quando a implantação não configurou nenhuma identidade de Web Push

As regras ordenadas que um cliente avalia para determinar os limites aplicáveis a uma conta ou servidor.

CampoTipoDescrição
versionintegerA versão do formato de wire, sempre 2
traitDefinitions1array[string]Os nomes de traits que esta implantação declara
rulesarray[regra de limite object]As regras a avaliar
defaultsHash2stringUm hash dos valores padrão de limite embutidos no release

1 Uma configuração hospedada padrão publica o único nome premium, que é computado a partir do estado premium da conta

2 O valor é computado apenas a partir dos valores padrão do release, portanto um operador editando uma regra não o altera. Ele muda quando um release altera os padrões, o que invalida uma resolução que um cliente armazenou em cache com os valores anteriores

Cada regra publica apenas as chaves cujos valores diferem dos padrões do release. Os próprios padrões não são publicados neste documento, portanto um cliente DEVE manter sua própria cópia deles. Antes de resolver qualquer coisa, um cliente DEVE também reconstruir cada regra em um mapa de limite completo, tomando o valor padrão de cada chave de limite e sobrepondo os overrides daquela regra.

O cliente começa com o valor padrão de cada chave. Avalia as regras do menos específico ao mais específico, onde a especificidade é o número total de nomes de trait e de recurso de servidor nos filtros de uma regra. Duas regras de igual especificidade mantêm sua ordem publicada. Uma regra corresponde quando todo trait que ela nomeia está presente no contexto de avaliação e todo recurso de servidor que ela nomeia está presente.

Uma regra que não nomeia nenhum trait nem recurso de servidor substitui o valor atual de cada chave que tem. Uma que nomeia pelo menos um eleva o valor atual ao seu próprio valor quando este é maior. Como uma regra reconstruída tem cada chave, uma regra não filtrada retorna cada chave que não substituiu ao padrão. Uma regra filtrada correspondente eleva cada chave que não substituiu ao menos ao padrão.

Os contextos de avaliação estão listados abaixo. Um cliente lê o escopo da chave e os filtros da regra para decidir quais chaves uma avaliação aplica. O registro de chaves de limite declara o escopo de cada chave.

EscopoAvaliação do usuárioAvaliação do servidor
userAplicadaAplicada apenas quando a regra não tem filtro de recurso de servidor
guildNão aplicadaAplicada quando a regra tem filtro de recurso de servidor, ou quando a regra não tem filtro de trait
bothAplicadaAplicada

Nada valida o filtro traits de uma regra contra traitDefinitions, portanto uma regra pode filtrar por um nome que aquela coleção omite. Uma implantação auto-hospedada cujo modo premium é everyone publica uma coleção vazia e não tem nenhuma regra que filtre por premium.

Uma regra da configuração de limites, com os filtros que a selecionam e os valores que ela define.

CampoTipoDescrição
idstringO identificador estável da regra
filters?filtros de limite objectAs traits e recursos de servidor que selecionam a regra, omitido quando a regra sempre corresponde
overrides1map[string, integer]Valores inteiros com chave por chave de limite

1 Uma entrada cujo valor é negativo ou não é um número finito é ignorada quando a regra é aplicada

{
"id": "premium",
"filters": {"traits": ["premium"]},
"overrides": {
"max_message_length": 4000,
"max_guild_emojis": 250
}
}

As traits e recursos de servidor que uma regra de limite requer antes de corresponder.

CampoTipoDescrição
traits?array[string]Nomes de traits que devem estar todos presentes para a regra corresponder
guildFeatures?array[string]Nomes de recursos de servidor que devem estar todos presentes para a regra corresponder

Uma coleção vazia ou omitida não impõe condição. Uma regra cujo objeto de filtros não tem nenhuma das coleções sempre corresponde, e substitui o valor atual de cada chave exatamente como uma regra que omite filters.

Cada chave nomeia um limite. Uma chave cujo nome começa com feature_ é um gate de recurso cujo valor é 0 quando o recurso está indisponível e 1 quando está disponível. O valor de toda outra chave é um limite na unidade nomeada por sua descrição.

ValorDescrição
avatar_max_sizeTamanho máximo de arquivo para uploads de avatar em bytes, no escopo user
emoji_max_sizeTamanho máximo de arquivo para uploads de emoji em bytes, no escopo guild
feature_animated_avatarPermitir uploads de avatar animado, no escopo user
feature_animated_bannerPermitir uploads de banner animado, no escopo user
feature_custom_discriminatorPermitir seleção de discriminador personalizado, no escopo user
feature_custom_notification_soundsPermitir sons de notificação personalizados, no escopo user
feature_early_accessAcesso a recursos beta, no escopo user
feature_global_expressionsUsar expressões em todos os servidores, no escopo user
feature_higher_video_qualityAcesso a maior qualidade de transmissão de vídeo, no escopo user
feature_per_guild_profilesPerfil diferente por servidor, no escopo user
feature_voice_entrance_soundsReproduzir som ao entrar em canal de voz, no escopo user
max_attachment_file_sizeTamanho máximo de cada arquivo de anexo em bytes, no escopo user e guild
max_attachments_per_messageNúmero máximo de anexos de arquivo por mensagem, no escopo user e guild
max_bio_lengthMáximo de caracteres em uma biografia de usuário, no escopo user
max_bookmarksMáximo de mensagens marcadas, no escopo user
max_channels_per_categoryMáximo de canais por categoria, no escopo guild
max_custom_backgroundsMáximo de fundos de perfil personalizados, no escopo user
max_embeds_per_messageNúmero máximo de embeds por mensagem, no escopo user e guild
max_favorite_meme_tagsMáximo de tags de meme a rastrear, no escopo user
max_favorite_memesMáximo de memes marcados como favoritos, no escopo user
max_group_dm_recipientsMáximo de membros por mensagem direta em grupo, no escopo user
max_group_dms_per_userMáximo de mensagens diretas em grupo que um usuário pode possuir, no escopo user
max_guild_channelsMáximo de canais por servidor, no escopo guild
max_guild_emojisMáximo total de emojis por servidor, no escopo guild
max_guild_emojis_animated1Alias de compatibilidade para clientes mais antigos, no escopo guild
max_guild_emojis_animated_more1Alias de compatibilidade para clientes mais antigos, no escopo guild
max_guild_emojis_static1Alias de compatibilidade para clientes mais antigos, no escopo guild
max_guild_emojis_static_more1Alias de compatibilidade para clientes mais antigos, no escopo guild
max_guild_invitesMáximo de convites ativos por servidor, no escopo guild
max_guild_membersMáximo de membros por servidor, no escopo guild
max_guild_rolesMáximo de cargos por servidor, no escopo guild
max_guild_stickersMáximo de stickers por servidor, no escopo guild
max_guild_stickers_more2Alias de compatibilidade para clientes mais antigos, no escopo guild
max_guildsNúmero máximo de servidores que um usuário pode entrar, no escopo user
max_message_lengthNúmero máximo de caracteres por mensagem, no escopo user e guild
max_private_channels_per_userMáximo de canais de mensagem direta por usuário, no escopo user
max_reactions_per_messageMáximo de reações distintas por mensagem, no escopo guild
max_relationshipsMáximo de relacionamentos de amigos e bloqueados, no escopo user
max_users_per_message_reactionMáximo de usuários que podem usar a mesma reação em uma mensagem, no escopo guild
max_voice_message_durationDuração máxima de mensagem de voz em segundos, no escopo user e guild
max_webhooks_per_channelMáximo de webhooks por canal, no escopo guild
max_webhooks_per_guildMáximo de webhooks por servidor, no escopo guild
sticker_max_sizeTamanho máximo de arquivo para uploads de sticker em bytes, no escopo guild

1 Os limites de emoji são aplicados como um total compartilhado contra max_guild_emojis, e os aliases existem apenas para clientes mais antigos. O padrão de cada alias é igual ao padrão de max_guild_emojis

2 Os limites de sticker são aplicados como um total compartilhado contra max_guild_stickers

Onde uma regra define max_guild_emojis, max_guild_stickers ou um dos aliases de compatibilidade, ela republica aquela chave em seus próprios overrides mesmo quando o valor corresponde ao padrão.

Identidade visual, estado de configuração, documentos legais e campos de registro que um cliente lê antes de um acesso de conta.

CampoTipoDescrição
brandingidentidade visual pública objectIdentidade pública da instância
setupestado público de configuração objectEstado de configuração inicial
legalconfiguração legal pública objectURLs de documentos legais de registro
registrationcampos públicos de registro objectPolítica de coleta de campos de registro

A identidade da instância que um cliente renderiza: seu nome, imagens, cor de tema e links de página de status.

CampoTipoDescrição
product_namestringO nome da instância configurado que um cliente exibe
icon_url?stringURL completo do ícone da aplicação, ou null
symbol_url?stringURL do símbolo compacto da aplicação, ou null
logo_url?stringURL do logotipo da aplicação, ou null
wordmark_url?stringURL da logomarca da aplicação, ou null
favicon_url?stringURL do favicon do navegador, ou null
theme_color?stringCor de tema do navegador, ou null
status_page_url?stringURL da página de status pública, ou null
status_page_incident_history_url?stringURL do histórico de incidentes da página de status, ou null

Se a implantação concluiu sua configuração inicial e onde um operador vai para continuá-la.

CampoTipoDescrição
configuredbooleanSe a configuração inicial da implantação está completa
admin_url1?stringA URL do aplicativo admin usada para continuar a configuração, ou null

1 O valor é o endpoint admin configurado da implantação, e é null quando nenhum endpoint admin está configurado

As URLs públicas que um cliente vincula no formulário de registro.

CampoTipoDescrição
terms_url?stringURL pública dos termos de serviço, ou null
privacy_url?stringURL pública da política de privacidade, ou null

Quais campos extras o registro público coleta.

CampoTipoDescrição
collect_date_of_birthbooleanSe o registro público coleta e valida uma data de nascimento

A localização aproximada que o Decoding Chat resolveu para a requisição, junto com as regiões onde conteúdo adulto é restrito por verificação de idade ou está indisponível.

CampoTipoDescrição
countryCode1 2?stringO código de país ISO 3166-1 alpha-2 detectado, ou null
regionCode1 2?stringO código de subdivisão ISO 3166-2 dentro do país detectado, ou null
latitude1 3?stringA latitude aproximada, ou null
longitude1 3?stringA longitude aproximada, ou null
ageRestrictedGeosarray[entrada geo object]Localizações onde conteúdo adulto requer verificação de idade
ageBlockedGeosarray[entrada geo object]Localizações onde conteúdo adulto está indisponível

1 Todos os campos detectados são null quando a localização é desconhecida. Uma localização conhecida ainda pode omitir o código de subdivisão ou as coordenadas

2 O valor é em maiúsculas

3 O valor é uma string decimal

As coleções geo são fixadas pelo release, portanto são idênticas em toda resposta. Um cliente resolve seu próprio país e subdivisão a partir dos campos detectados e então seleciona a entrada correspondente ele mesmo.

{
"countryCode": "GB",
"regionCode": "ENG",
"latitude": "51.5074",
"longitude": "-0.1278",
"ageRestrictedGeos": [{"countryCode": "US", "regionCode": "TX"}],
"ageBlockedGeos": []
}

Uma entrada geo nomeia um país inteiro quando seu regionCode é null e nomeia uma subdivisão caso contrário.

CampoTipoDescrição
countryCodestringO código de país ISO 3166-1 alpha-2
regionCode?stringO código de subdivisão ISO 3166-2 dentro do país, ou null quando a entrada cobre o país inteiro
GET/.well-known/fluxerUnauthenticated

Retorna o objeto de descoberta de instância descrevendo esta implantação.

O caminho não tem prefixo /v1.

StatusCorpoCondição
200descoberta de instância objectO documento de descoberta foi retornado

60 requisições por minuto para cada usuário autenticado, ou para cada endereço IP do cliente quando a requisição não tem credencial, no bucket instance:info. Obter documento OpenAPI compartilha este bucket.

GET/v1/ipUnauthenticated

Retorna o objeto de geolocalização para o endereço do cliente da requisição.

Uma consulta que não resolve nada ainda retorna 200 com countryCode, regionCode, latitude e longitude todos null. Trate isso como localização desconhecida.

StatusCorpoCondição
200geolocalização objectA localização foi resolvida, total, parcialmente ou não

30 requisições por minuto para cada usuário autenticado, ou para cada endereço IP do cliente quando a requisição não tem credencial, no bucket ip:geo_lookup.

GET/v1/openapi.jsonUnauthenticated

Retorna o documento OpenAPI 3.1 da implantação como JSON com Content-Type: application/json; charset=utf-8.

O documento não tem ETag. Sua URL de servidor é o endpoint api_client da implantação seguido de /v1. Cada caminho é relativo a essa URL.

StatusCorpoCondição
200documento OpenAPI 3.1O documento foi retornado

60 requisições por minuto para cada usuário autenticado, ou para cada endereço IP do cliente quando a requisição não tem credencial, no bucket instance:info. A cota é compartilhada com Obter descoberta de instância.