Pular para o conteúdo
Decoding Chat API

Conexões

Uma conexão vincula uma conta do Decoding Chat a um domínio verificado ou a uma conta Bluesky. Conexões visíveis aparecem em connected_accounts no objeto de perfil completo do usuário.

As rotas de conexão requerem token de usuário. Tokens de bot e bearers OAuth2 recebem 403 ACCESS_DENIED, exceto que Listar conexões aceita um bearer com o escopo connections. Contas com uma ação obrigatória pendente recebem 403 ACCOUNT_SUSPICIOUS_ACTIVITY. IDs de conexão não são snowflakes.

Metadados do cliente Bluesky e JWKS são públicos e não contêm dados de conta.

Uma conta pode ter no máximo 20 conexões entre todos os tipos. Ultrapassar este limite retorna 400 CONNECTION_LIMIT_REACHED.

Iniciar conexão, Verificar e criar conexão e o callback do provedor que completa o fluxo de autorização Bluesky impõem o limite. Iniciar autorização Bluesky não impõe.

O par de tipo e id identifica uma conexão. Ambos os valores aparecem no caminho de toda operação por conexão. Uma conexão só existe após seu prova externa ter sido bem-sucedida ao menos uma vez.

CampoTipoDescrição
id1stringO ID da conexão, único dentro do seu tipo de conexão
typestringTipo de conexão
name2stringO domínio ou handle Bluesky exibido para a conexão
verified3booleanSe a prova mais recente foi bem-sucedida
visibility_flags4integerFlags de visibilidade da conexão
sort_order5integerA ordem de exibição na lista de conexões da conta (0-2147483647)

1 Um identificador domain tem 64 caracteres hexadecimais minúsculos e permanece o mesmo quando a conta recria aquela conexão de domínio. Um identificador bsky é um UUID atribuído na criação

2 Para uma conexão domain, o nome é o domínio enviado. Para uma conexão bsky, é o handle Bluesky, atualizado ao completar o fluxo de autorização

3 O Decoding Chat o define como true quando a prova é bem-sucedida e novamente cada vez que uma autorização Bluesky é completada. Nenhuma verificação posterior o define como false

4 O valor armazenado é o inteiro fornecido pelo cliente e não é mascarado contra os bits definidos

5 Inicialmente o número de conexões existentes. Use Atualizar conexão ou Reordenar conexões para alterar

ValorNomeDescrição
bsky1BLUESKYUma conta Bluesky autorizada por OAuth atproto
domainDOMAINUm domínio que a conta provou que controla

1 Use Iniciar autorização Bluesky. A rota de iniciação de domínio rejeita este tipo com 400 BLUESKY_OAUTH_NOT_ENABLED

As flags de uma conexão decidem quais visitantes do perfil do proprietário podem vê-la. O Decoding Chat as avalia contra um visitante com a mesma regra que as flags de privacidade de campo de perfil.

ValorNomeDescrição
1 << 0EVERYONEQualquer pessoa com permissão para ver o perfil pode ver a conexão
1 << 1FRIENDSAmigos podem ver a conexão
1 << 2MUTUAL_GUILDSMembros de um servidor em comum podem ver a conexão

Uma conexão criada sem valor explícito recebe EVERYONE. Um valor 0 oculta a conexão de todos os visitantes, incluindo a leitura do próprio perfil pelo proprietário. Um cliente DEVE ignorar um bit que não reconheça.

Uma conexão não verificada nunca é exibida em um perfil, independentemente das flags. Um visitante sem permissão de ver o perfil completo não vê conexão alguma. Listar conexões ignora as flags e retorna todas as conexões que a conta possui.

Retornado por Iniciar conexão. Nenhuma conexão existe até que Verificar e criar conexão seja bem-sucedido.

CampoTipoDescrição
token1stringO valor a publicar no domínio como prova de propriedade
typestringTipo de conexão
id2stringO domínio sendo verificado
instructions3stringAs instruções legíveis por humanos para publicar o token
initiation_token4stringO token assinado aceito por Verificar e criar conexão

1 O token tem 64 caracteres hexadecimais minúsculos. Repetir a operação para o mesmo destino retorna o mesmo token, portanto um cliente PODE manter um registro publicado entre tentativas

2 O valor é o identifier exatamente como enviado, sem trimming, normalização de capitalização ou outro tipo de transformação

3 As instruções nomeiam tanto o registro DNS TXT quanto o caminho well-known descrito em Prova de propriedade de domínio

4 Uma credencial opaca que expira 30 minutos após a emissão e pode ser usada apenas pela conta iniciante

Envie o domínio exatamente como deve ser verificado. Um domínio malformado pode passar pela iniciação, mas falhar na verificação de propriedade.

Publique um registro TXT em _fluxer.<domínio> cujo valor seja exatamente fluxer-verification=<token>. Se o registro tiver múltiplas strings, sua concatenação deve corresponder a esse valor. Aguarde a propagação das alterações DNS antes de verificar.

Como alternativa, sirva o token em https://<domínio>/.well-known/fluxer-verification. A resposta deve ter status 2xx e um corpo que corresponda ao token após remover espaços em branco. O corpo não pode exceder 16384 bytes. Até 5 redirecionamentos HTTP ou HTTPS são aceitos.

A URL HTTPS e cada redirecionamento devem usar um nome de domínio totalmente qualificado válido ou endereço IP público. Todos os endereços resolvidos devem ser publicamente acessíveis e permitidos pela política de URL de saída da instância. Redes privadas e reservadas não podem ser verificadas desta forma.

O Decoding Chat verifica a prova uma vez, na criação da conexão. Não há nova verificação posterior.

Retornado por Iniciar autorização Bluesky.

CampoTipoDescrição
authorize_urlstringURL a abrir para autorização. Sua origem depende do handle enviado
GET/v1/users/@me/connectionsconnections

Retorna todo objeto de conexão que a conta autenticada possui, em ordem ascendente de sort_order.1 Uma conta sem conexões retorna um array vazio.

Um bearer sem connections recebe 403 MISSING_OAUTH_SCOPE.

1 A ordenação é estável e não tem chave secundária, portanto duas conexões com o mesmo sort_order são retornadas na ordem armazenada, ascendente por tipo de conexão e depois descendente por id

StatusCorpoCondição
200array[conexão object]Coleção foi retornada, possivelmente como array vazio
403resposta de erroO token bearer não possui o escopo connections e a requisição retorna MISSING_OAUTH_SCOPE

60 requisições por minuto para cada usuário autenticado, no bucket connection:list.

POST/v1/users/@me/connections

Inicia a verificação de propriedade de domínio e retorna um objeto de verificação de conexão. Esta operação não cria nenhuma conexão.

Apenas o tipo domain é aceito. Uma conexão Bluesky é criada por Iniciar autorização Bluesky.

CampoTipoDescrição
typestringTipo de conexão, que deve ser domain
identifierstringO domínio cuja propriedade se deve provar (1-253 caracteres)
visibility_flags?1integerFlags de visibilidade da conexão (0-2147483647)

1 Ignorado aqui. Defina a visibilidade em Verificar e criar conexão

StatusCorpoCondição
201verificação de conexão objectA verificação foi iniciada
400resposta de erroO tipo solicitado é bsky e a requisição retorna BLUESKY_OAUTH_NOT_ENABLED
409resposta de erroJá existe uma conexão do mesmo tipo para aquele identificador (comparado sem distinção de maiúsculas) e a requisição retorna CONNECTION_ALREADY_EXISTS

Nenhum evento Gateway é emitido. Publique o token de verificação no domínio e chame Verificar e criar conexão antes que o token de iniciação expire.

5 requisições por minuto para cada usuário autenticado, no bucket connection:create, compartilhado com Iniciar autorização Bluesky.

POST/v1/users/@me/connections/verify

Verifica a prova de propriedade de domínio descrita por um token de iniciação assinado. Cria e retorna o objeto de conexão em caso de sucesso.

Use o token de iniciação retornado para este domínio e conta. O limite de conexões e as verificações de duplicidade ainda se aplicam quando a verificação for concluída.

CampoTipoDescrição
initiation_tokenstringO token de iniciação assinado retornado por Iniciar conexão
visibility_flags?1integerFlags de visibilidade da conexão (0-2147483647)

1 Um valor omitido armazena EVERYONE

StatusCorpoCondição
201conexão objectA prova foi bem-sucedida e a conexão foi criada
4001resposta de erroO token de iniciação não é utilizável e a requisição retorna CONNECTION_INITIATION_TOKEN_INVALID
403resposta de erroA prova falhou e a requisição retorna CONNECTION_VERIFICATION_FAILED
409resposta de erroO identificador já está vinculado (CONNECTION_ALREADY_EXISTS), ou a lista de conexões mudou durante a requisição (CONFLICT). Busque a lista antes de tentar novamente

1 Tokens de iniciação inválidos, expirados ou de conta errada retornam o mesmo código

Sucesso cria a conexão e envia a lista completa para as sessões do chamador em User Connections Update. Uma prova com falha não cria conexão e não emite evento.

O token de iniciação permanece utilizável até expirar, portanto um chamador que publicou sua prova tarde pode tentar novamente com o mesmo token.

5 requisições por minuto para cada usuário autenticado, no bucket connection:verify_and_create.

PATCH/v1/users/@me/connections/{type}/{connection_id}

Atualiza a visibilidade ou a ordem de exibição de uma conexão existente e retorna 204 com corpo vazio. Omitir um campo deixa o valor armazenado inalterado.

CampoTipoDescrição
typestringTipo de conexão
connection_idstringO ID da conexão, único dentro do seu tipo de conexão
CampoTipoDescrição
visibility_flags?integerFlags de visibilidade da conexão (0-2147483647)
sort_order?integerA nova ordem de exibição (0-2147483647)
StatusCorpoCondição
204vazioA conexão foi atualizada
4041resposta de erroNenhuma conexão daquele tipo e identificador pertence ao chamador e a requisição retorna CONNECTION_NOT_FOUND
409resposta de erroA conexão mudou durante a requisição (CONFLICT). Busque-a novamente antes de tentar outra vez

1 Ambos os parâmetros de caminho devem nomear a mesma conexão, portanto um identificador correto sob o tipo errado não corresponde

Envia a lista completa para as sessões do chamador em User Connections Update, mesmo que nenhum valor tenha mudado ou o corpo esteja vazio.

Atribuir um sort_order que outra conexão já possui é permitido. Listar conexões então resolve o empate pela ordem armazenada.

30 requisições por minuto para cada usuário autenticado, no bucket connection:update, compartilhado com Reordenar conexões.

DELETE/v1/users/@me/connections/{type}/{connection_id}

Remove permanentemente uma conexão e retorna 204 com corpo vazio.

CampoTipoDescrição
typestringTipo de conexão
connection_idstringO ID da conexão, único dentro do seu tipo de conexão
StatusCorpoCondição
204vazioA conexão foi excluída
404resposta de erroNenhuma conexão daquele tipo e identificador pertence ao chamador e a requisição retorna CONNECTION_NOT_FOUND
409resposta de erroA conexão ou lista de conexões mudou durante a requisição (CONFLICT). Busque a lista antes de tentar novamente

Envia a lista restante para as sessões do chamador em User Connections Update. As outras conexões mantêm seus valores de sort_order.

Excluir uma conexão bsky a remove do Decoding Chat, mas não revoga a autorização no Bluesky.

10 requisições por minuto para cada usuário autenticado, no bucket connection:delete.

PATCH/v1/users/@me/connections/reorder

Atribui a ordem de exibição das conexões listadas a partir de sua posição no array e retorna 204 com corpo vazio.

CampoTipoDescrição
connection_ids1 2array[string]Os IDs de conexão em sua nova ordem de exibição (1-20 entradas)

1 IDs desconhecidos são ignorados. Conexões omitidas mantêm sua ordem atual

2 As conexões são combinadas apenas por id. Para IDs repetidos, a última posição vence

StatusCorpoCondição
204vazioAs conexões foram reordenadas
409resposta de erroUma conexão mudou durante a requisição (CONFLICT). Busque a lista novamente antes de tentar outra vez

Cada conexão nomeada recebe seu índice baseado em zero no array como sort_order. A lista completa é enviada para as sessões do chamador em User Connections Update, mesmo que a ordem não tenha mudado.

A reordenação é atômica. Uma requisição que retorna 409 CONFLICT não altera nenhuma ordem e não emite nenhum evento. Quando o Decoding Chat salva a ordem e depois falha ao enviar User Connections Update, a requisição retorna erro mas a nova ordem permanece salva.

Um array parcial pode deixar duas conexões com o mesmo sort_order, que Listar conexões resolve pela ordem armazenada.

30 requisições por minuto para cada usuário autenticado, no bucket connection:update, compartilhado com Atualizar conexão.

POST/v1/users/@me/connections/bluesky/authorize

Inicia ou renova uma conexão Bluesky. O Bluesky deve estar habilitado na instância. Use este fluxo novamente quando a autorização expirar ou a conexão precisar de reautorização.

CampoTipoDescrição
handlestringHandle Bluesky ou URL de perfil (1-253 caracteres)
StatusCorpoCondição
200autorização Bluesky objectEnvie o usuário para authorize_url
400resposta de erroIndisponível (BLUESKY_OAUTH_NOT_ENABLED) ou falhou (BLUESKY_OAUTH_AUTHORIZATION_FAILED)

Envie o usuário para authorize_url. O Bluesky o retorna por /connections/bluesky/callback. Os clientes não devem chamar essa rota diretamente.

O navegador então chega em /connection-callback no aplicativo web com status=connected, ou status=error e um destes motivos:

ValorDescrição
not_enabledConexões Bluesky estão indisponíveis
state_invalidEstado de autorização inválido. Inicie um novo fluxo
callback_failedA autorização não pôde ser concluída. Inicie um novo fluxo
unknownA conexão não pôde ser salva

Sucesso cria ou atualiza a conexão verificada e publica User Connections Update. Completar o fluxo novamente também atualiza o handle Bluesky exibido.

5 requisições por minuto para cada usuário autenticado, no bucket connection:create, compartilhado com Iniciar conexão.

GET/connections/bluesky/client-metadata.jsonUnauthenticated

Retorna os metadados do cliente OAuth atproto da instância como JSON. Este endpoint deve ser publicamente acessível para autorização Bluesky.

StatusCorpoCondição
200documento de metadados do clienteO Bluesky está configurado
404{"error": "Bluesky OAuth is not enabled"}O Bluesky está indisponível

60 requisições por minuto para cada endereço IP do cliente, no bucket connection:bluesky:client_document, compartilhado com Obter JWKS Bluesky.

GET/connections/bluesky/jwks.jsonUnauthenticated

Retorna as chaves públicas de assinatura OAuth da instância como um JSON Web Key Set. Este endpoint deve ser publicamente acessível para autorização Bluesky.

StatusCorpoCondição
200JSON Web Key SetO Bluesky está configurado
404{"error": "Bluesky OAuth is not enabled"}O Bluesky está indisponível

60 requisições por minuto para cada endereço IP do cliente, no bucket connection:bluesky:client_document, compartilhado com Obter metadados do cliente Bluesky.