Quando você usa o Mastodon, cada ação — publicar, impulsionar, seguir — é enviada como uma mensagem ActivityPub. Essas mensagens trafegam entre endpoints de inbox e outbox em cada servidor. Entender como esses endpoints funcionam ajuda a depurar problemas de federação, inspecionar fluxos de atividade brutos e construir ferramentas que interagem com o Mastodon programaticamente. Este artigo explica o que são endpoints de inbox e outbox, como ler seus conteúdos e quais erros comuns evitar ao trabalhar com os internos do ActivityPub.
Principais Conclusões: Endpoints Inbox vs Outbox no Mastodon Explicados
- Endpoint outbox (https://instancia.exemplo/usuarios/nome/outbox): Lista atividades públicas criadas por um usuário, como publicações, impulsionamentos e seguidores, em ordem cronológica reversa.
- Endpoint inbox (https://instancia.exemplo/usuarios/nome/inbox): Recebe atividades recebidas de outros servidores; seu conteúdo não é publicamente legível por questões de privacidade.
- Endpoint sharedInbox (https://instancia.exemplo/inbox): Um inbox de todo o servidor que recebe atividades não direcionadas a um usuário específico, normalmente usado para mensagens de transmissão como delete e update.
Endpoints ActivityPub: O Que Inbox e Outbox Realmente Fazem
ActivityPub é um protocolo de rede social descentralizado. Cada ator do Mastodon — um usuário, um grupo ou um bot — tem dois endpoints principais: um inbox e um outbox. Esses endpoints são URLs expostas no perfil JSON-LD do ator, que você pode recuperar buscando a URI do ator com um cabeçalho Accept: application/activity+json.
O outbox é uma coleção de atividades que o ator publicou. Para um usuário do Mastodon, isso inclui atividades Create para novas publicações, Announce para impulsionamentos e Follow. O outbox é paginado e publicamente legível, embora publicações privadas ou diretas não sejam incluídas.
O inbox é onde as atividades recebidas de outros atores chegam. Quando outro servidor envia uma atividade Follow para um usuário, essa atividade vai para o inbox do usuário. O inbox não é publicamente legível; o Mastodon retorna um erro 401 Unauthorized se você tentar acessá-lo sem autenticação. Isso é uma medida de privacidade deliberada.
SharedInbox: O Inbox no Nível do Servidor
O Mastodon também implementa um endpoint SharedInbox. Esta é uma única URL que recebe atividades para todos os usuários no mesmo domínio. Por exemplo, quando um servidor remoto envia uma atividade Delete para uma publicação, geralmente vai para o SharedInbox em vez do inbox pessoal de cada usuário. O SharedInbox também não é publicamente legível.
Como os Endpoints São Descobertos
O perfil de cada ator do Mastodon contém um documento JSON-LD com os seguintes campos quando buscado com o cabeçalho Accept adequado:
inbox: URL do inbox pessoal do usuáriooutbox: URL do outbox do usuáriosharedInbox: URL do inbox compartilhado do servidor
Você pode descobrir esses endpoints para qualquer perfil público do Mastodon. Por exemplo, buscar https://mastodon.social/users/Gargron com o cabeçalho correto retorna o objeto ator contendo essas URLs.
Lendo o Endpoint Outbox: Passo a Passo
Para ler o outbox de um usuário do Mastodon, envie uma requisição HTTP GET para a URL do outbox com o cabeçalho Accept apropriado. O outbox retorna uma OrderedCollectionPage de atividades. Cada atividade contém um id, type, actor, object e timestamp published.
- Obtenha a URL do perfil do ator
Abra o perfil do usuário do Mastodon em um navegador. Copie a URL da barra de endereços. Por exemplo,https://mastodon.social/@Gargron. - Busque o JSON do ator com uma ferramenta como curl
Execute este comando no terminal:curl -H "Accept: application/activity+json" https://mastodon.social/users/Gargron
Substitua a URL pela URI real do ator (o caminho @username resolve para /users/username). - Localize a URL do outbox na resposta
No JSON retornado, encontre o campooutbox. Ele será algo como"outbox": "https://mastodon.social/users/Gargron/outbox". - Busque a coleção outbox
Execute:curl -H "Accept: application/activity+json" https://mastodon.social/users/Gargron/outbox
A resposta é uma OrderedCollection com um linkfirstpara a primeira página. - Siga o link da primeira página
Use a URL no campofirstpara obter a página inicial de atividades. Cada item no arrayorderedItemsé uma atividade ActivityPub. - Inspecione atividades individuais
Cada atividade inclui um campotype. Tipos comuns sãoCreate(nova publicação),Announce(impulsionamento),Like(favorito) eFollow. O campoobjectcontém a publicação ou o ator alvo.
Lendo o Outbox com Python
Se preferir scripts, use a biblioteca requests do Python. Aqui está um exemplo mínimo:
import requests
headers = {"Accept": "application/activity+json"}
profile_url = "https://mastodon.social/users/Gargron"
profile = requests.get(profile_url, headers=headers).json()
outbox_url = profile["outbox"]
outbox = requests.get(outbox_url, headers=headers).json()
first_page = requests.get(outbox["first"], headers=headers).json()
for activity in first_page["orderedItems"]:
print(activity["type"], activity["object"].get("id", ""))
Equívocos e Limitações Comuns ao Ler Endpoints
O Endpoint Inbox Retorna 401 Unauthorized
Esse é um comportamento esperado. O Mastodon não expõe o conteúdo do inbox para requisições não autenticadas. Mesmo com autenticação, a API do Mastodon não fornece uma maneira direta de ler o inbox de um usuário. O inbox é usado apenas internamente pelo servidor para processar atividades recebidas. Se você precisar ver atividades enviadas a um usuário, use o endpoint de notificações da API do Mastodon.
A Paginação do Outbox é Limitada a Atividades Recentes
O outbox do Mastodon retorna apenas atividades dos últimos 30 dias por padrão. Atividades mais antigas não são acessíveis pelo outbox do ActivityPub. Isso é um limite do lado do servidor. Se você precisar de dados históricos, use o endpoint de status da API do Mastodon, que pode ir mais longe dependendo da configuração do servidor.
Nem Todas as Atividades Aparecem no Outbox
O outbox contém apenas atividades que são publicamente visíveis. Menções privadas, publicações apenas para seguidores e mensagens diretas são excluídas. Além disso, algumas atividades do lado do servidor, como exclusão automática de conta, podem não aparecer no outbox.
Confusão entre SharedInbox e Inbox Pessoal
Ao ler o perfil de um ator do Mastodon, você verá os campos inbox e sharedInbox. O inbox compartilhado é usado para mensagens de transmissão. Se você estiver construindo uma aplicação federada, sempre envie atividades para o shared inbox primeiro, porque a documentação do Mastodon recomenda isso para eficiência. O inbox pessoal é reservado para atividades explicitamente direcionadas àquele usuário específico.
Mastodon Inbox vs Outbox vs SharedInbox: Principais Diferenças
| Item | Inbox | Outbox | SharedInbox |
|---|---|---|---|
| Propósito | Recebe atividades recebidas para um único usuário | Lista atividades enviadas publicadas por um usuário | Recebe atividades de transmissão para todos os usuários do servidor |
| Legível publicamente | Não (retorna 401) | Sim (paginado, últimos 30 dias) | Não (retorna 401) |
| Autenticação necessária para ler | Sim (apenas interno) | Não | Sim (apenas interno) |
| Atividades típicas recebidas | Follow, Like, Announce, Create | Create, Announce, Like, Follow | Delete, Update, Undo |
| Escopo | Por usuário | Por usuário | Por servidor |
Conclusão
Agora você consegue distinguir entre inbox, outbox e shared inbox de um usuário do Mastodon. O outbox é o único endpoint que você pode ler sem autenticação, e ele mostra atividades públicas dos últimos 30 dias. Se precisar depurar problemas de federação, comece lendo o outbox do usuário afetado. Para inspeção de atividades recebidas, use o endpoint de notificações da API do Mastodon ou ative o log de depuração no seu servidor. Como dica avançada, defina o cabeçalho Accept como application/activity+json ao buscar qualquer URI de ator para obter o perfil JSON-LD completo com todas as URLs de endpoint.