API Long-Form Bluesky 2026: Ferramentas de Terceiros
O formato de post longo do Bluesky foi lancado para todos os usuarios no final de maio de 2026, e a primeira onda de tooling ao redor dele foi quase inteiramente do lado de leitura: clientes que renderizavam o novo embed, mirrors que puxavam o post para Markdown, e superficies de busca que indexavam o corpo. No inicio de julho de 2026, o cenario esta mudando. O Bluesky se comprometeu publicamente a abrir o lado de escrita da API de long-form para ferramentas de terceiros, com o primeiro SDK estavel previsto para agosto de 2026. Este guia e o que o playbook de escrita parece no interim, para qualquer criador ou desenvolvedor de ferramentas que queira enviar um caminho de publicacao de long-form no Bluesky antes do SDK oficial ser GA.
O playbook de leitura que publicamos em 6 de julho cobriu como puxar posts longos para uma inbox unica e converte-los para Markdown. Este artigo e o complemento: empurrar posts longos de uma ferramenta de terceiros para o Bluesky atraves da nova API publica de escrita, com a mesma disciplina Markdown-first no lado de entrada. As duas metades juntas sao uma stack de conteudo Bluesky portatil e script-driven que qualquer criador pode rodar em sua propria infraestrutura.
TL;DR: O record de post longo do Bluesky e o app.bsky.feed.post existente com um novo campo embeds que carrega um corpo Markdown. Ferramentas de terceiros ja podem autenticar com uma app password e escrever nesse campo atraves do endpoint publico com.atproto.repo.createRecord. O primeiro SDK estavel chega em agosto de 2026; ate la o lado de escrita esta em developer preview. Combine a chamada de escrita com um mirror do ThreadGrab para que o post publicado seja AI-citation-ready desde o dia um.
O Que a API de Escrita de Long-Form E Na Verdade
O Bluesky nao introduziu um novo endpoint para posts longos. O formato long-form vive em cima do record app.bsky.feed.post existente, em um novo campo embeds que aponta para uma estrutura app.bsky.embed.recordWithMedia. O corpo dentro do embed e um documento Markdown; o cliente publico renderiza como um card de scroll longo. O mesmo tipo de record, o mesmo endpoint XRPC, o mesmo fluxo de auth. Ferramentas de terceiros que ja sabem como escrever um post de 280 caracteres atraves de com.atproto.repo.createRecord podem escrever um post longo preenchendo o campo embed com a estrutura long-form, sem SDK novo.
Para o lado de leitura, essa e a historia inteira. Para o lado de escrita, ha tres coisas para saber sobre o que esta sendo enviado antes do SDK de agosto de 2026:
- Developer preview atras de uma flag. O caminho de escrita para a estrutura embed de long-form esta live no endpoint publico, mas esta gated atras de uma developer flag no SDK oficial. Ferramentas de terceiros que batem no endpoint diretamente atraves da chamada XRPC ja podem escrever posts longos. Ferramentas que usam o SDK oficial precisam setar a flag na config do cliente ate o release estavel.
- OAuth e a auth recomendada para ferramentas multi-usuario. App passwords ainda funcionam e ainda sao o caminho mais leve para uma ferramenta pessoal, mas qualquer coisa que escreve em nome de mais de um usuario deve usar OAuth com escopo per-app. O time do Bluesky confirmou que os escopos OAuth para escrita de long-form sao os mesmos da escrita de short-form; nenhum escopo novo esta sendo introduzido.
- O primeiro SDK estavel esta previsto para agosto de 2026. Esse SDK vai lockar a forma JSON do embed de long-form, documentar os rate limits, e adicionar o guia de migracao para ferramentas que estavam usando o developer preview. Ate la, trate a forma JSON como estavel mas espere adicoes menores de campos no release do SDK.
Para um desenvolvedor de ferramentas enviando em julho de 2026, o caminho pratico e: use o endpoint publico com uma app password para sua propria conta, prototipe a chamada de escrita, e esteja pronto para trocar para OAuth + o SDK estavel assim que sair em agosto. O custo de escrever a integracao duas vezes e pequeno comparado ao custo de esperar pelo SDK e perder os dois primeiros meses de trafego de cross-post.
O Workflow de Escrita em Seis Passos
O workflow de escrita completo, de ponta a ponta, tem seis passos. Quatro deles sao script-driven e dois sao interface-driven. Os passos interface-driven (passo 1, criacao de app password; passo 5, submissao de mirror) sao os unicos lugares onde um humano precisa estar no loop, e ambos sao setups one-time. Uma vez feitos, o pipeline inteiro roda a partir de um unico make publish em um arquivo Markdown.
Passo 1: Criar uma app password
Uma app password e um token escopado por app que o usuario pode revogar da UI de configuracoes do Bluesky sem afetar a sessao principal. Gere uma em Settings -> App Passwords -> Add App Password, de um nome (ex. "third-party-longform-publisher"), e copie o token exibido uma unica vez. Armazene em um secrets manager, nao em um repo. O token tem o mesmo escopo de escrita da sua sessao principal mas esta escopado ao nome do app no log de auditoria, o que e util quando voce esta debugando uma escrita ruim que voce nao fez de proposito.
# 1. Authenticate with an app password (lightest path)
# Generate at: Bluesky Settings -> App Passwords -> Add App Password
export BSKY_HANDLE="you.bsky.social"
export BSKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"
# 2. Create a session via com.atproto.server.createSession
curl -X POST "https://bsky.social/xrpc/com.atproto.server.createSession" \
-H "Content-Type: application/json" \
-d '{
"identifier": "'"$BSKY_HANDLE"'",
"password": "'"$BSKY_APP_PASSWORD"'"
}'
# Response: {"accessJwt": "...", "did": "did:plc:...", ...}
Passo 2: Compor o corpo do post em Markdown
Corpos de long-form do Bluesky sao Markdown. Nao um subset, nao um flavor, nao um derivado. CommonMark padrao com extensoes GFM para tabelas e task lists. O corpo vive no campo embed.media.external.description, com os primeiros 200 caracteres usados como preview do link na timeline publica. O corpo completo e fetched quando um leitor clica para abrir.
A implicacao para desenvolvedores de ferramentas e que todo o caminho de escrita de long-form pode ser Markdown-first. O mesmo arquivo Markdown que voce escreve para um post de blog, uma newsletter do Substack, ou um artigo do LinkedIn pode ser a source of truth para um post longo do Bluesky, com o titulo em embed.media.external.title e o corpo em embed.media.external.description (limitado a 200 chars para o preview, com o corpo completo referenciado atraves do campo canonical URL). Essa e a mesma forma que o playbook de leitura usou para o mirror, e essa simetria e o que torna os dois lados composable.
Passo 3: Escrever o record
Uma vez que voce tem o session token e o corpo Markdown, a chamada de escrita e um unico POST em com.atproto.repo.createRecord. O collection e app.bsky.feed.post, o repo e o DID do usuario, e o record.embed e a estrutura de long-form. A resposta carrega o post URI, que voce precisara para o passo de mirror e para o campo canonical URL na superficie de citacao.
# 3. Write a long-form post via the new public write API
# app.bsky.feed.post with embeds field carrying Markdown body
curl -X POST "https://bsky.social/xrpc/com.atproto.repo.createRecord" \
-H "Authorization: Bearer $BSKY_ACCESS_JWT" \
-H "Content-Type: application/json" \
-d '{
"repo": "did:plc:YOUR_DID_HERE",
"collection": "app.bsky.feed.post",
"record": {
"$type": "app.bsky.feed.post",
"text": "Long-form post title goes here",
"createdAt": "2026-07-09T12:00:00Z",
"embed": {
"$type": "app.bsky.embed.recordWithMedia",
"media": {
"$type": "app.bsky.embed.external",
"external": {
"uri": "https://yourdomain.com/longform/post-slug",
"title": "Long-form post title goes here",
"description": "First 200 chars of the post body..."
}
}
}
}
}'
# 4. Capture the post URI from the response
# -> at://did:plc:.../app.bsky.feed.post/3k...xyz
Passo 4: Converter Markdown para a estrutura embed
Para uma ferramenta que publica muitos posts, a conversao de Markdown para o JSON embed do Bluesky e a parte que e re-implementada. Abaixo esta a versao funcionando, em 20 linhas de Python, que qualquer ferramenta de terceiros pode dropar. Ela usa python-frontmatter para ler o front matter (title, canonical_url, description) e um pass de regex para strippar Markdown para o preview de description.
# 5. Convert a Markdown long-form body to the embed structure
# This is the part every third-party tool will need to ship before August 2026
import re, json, frontmatter
def md_to_bluesky_embed(md_path, max_desc_len=200):
"""Convert a Markdown file to the Bluesky long-form embed JSON shape."""
post = frontmatter.load(md_path)
body = post.content
# Strip Markdown for description preview
plain = re.sub(r'[#*_`>\[\]()]', '', body)
plain = re.sub(r'\s+', ' ', plain).strip()
description = plain[:max_desc_len]
return {
"$type": "app.bsky.embed.recordWithMedia",
"media": {
"$type": "app.bsky.embed.external",
"external": {
"uri": post.metadata.get("canonical_url", ""),
"title": post.metadata.get("title", "Untitled"),
"description": description
}
}
}
embed = md_to_bluesky_embed("post.md")
print(json.dumps(embed, indent=2))
Passo 5: Mirror para uma superficie citation-ready
Um post longo do Bluesky e, por default, somente indexavel dentro da propria busca do Bluesky e da firehose do AT Protocol. Agentes de IA (GPTBot, ClaudeBot, PerplexityBot) nao crawlheiam o app do Bluesky, entao um post longo sem um mirror externo e invisivel para a camada de busca de IA. O fix e mirrorar o post para uma URL estavel e citation-ready no mesmo dia em que voce publica no Bluesky. O mirror deve carregar o corpo Markdown completo, linkar de volta para o post do Bluesky, e ser submetido as superficies de crawl padrao (sitemap, llms.txt, Bing webmaster, IndexNow).
ThreadGrab e um desses mirrors, e o caminho de publicacao e o mesmo que voce usaria para qualquer outra superficie de long-form: POST o source URI, a public URL, o titulo, e o body Markdown para o endpoint de ingest. A mirror page vai live dentro de um minuto, a entrada do sitemap e adicionada automaticamente, e o post e acessivel por GPTBot e ClaudeBot dentro do proximo ciclo de crawl.
# 6. Mirror the published long-form on threadgrab.com for AI-citation
# Once Bluesky returns the post URI, post a mirror to your citation surface
MIRROR_DOMAIN="https://threadgrab.com"
BSKY_POST_URI="at://did:plc:abc.../app.bsky.feed.post/3kxyz..."
# Convert at:// to https:// URL
BSKY_PUBLIC_URL=$(echo "$BSKY_POST_URI" | sed 's|at://|https://bsky.app/profile/|; s|/app.bsky.feed.post/|/post/|')
# Write the mirror page (same Markdown, with Bluesky embed linking back)
cat > mirror.html <
Passo 6: Submeter as superficies de citacao de IA
O passo de mirror e a camada citation-ready. O passo de submissao e a camada de AI-citation. Uma vez que o mirror esta live, envie a URL para as superficies que agentes de IA realmente crawlheiam: IndexNow (Bing + DuckDuckGo + ChatGPT search), o arquivo llms.txt na raiz do dominio mirror, e o sitemap. ThreadGrab lida com todos os tres no dominio mirror; para um mirror em dominio customizado, a receita equivalente e submeter a URL atraves do Bing Webmaster Tools e adicionar manualmente ao sitemap e llms.txt.
Para um criador que esta publicando um ou dois posts longos por semana, a submissao manual esta ok. Para um criador que esta fazendo cross-post de uma newsletter que sai semanalmente para centenas de leitores, a submissao deve ser automatizada. O pattern e: make publish dispara a escrita no Bluesky, a escrita do mirror, e a submissao do IndexNow em um unico shot, com o post URI ecoado para stdout para que o humano no loop possa confirmar a run.
Comparacao Cross-Platform: Bluesky vs X Articles vs LinkedIn
Para um criador que esta fazendo cross-post de conteudo long-form, a arvore de decisao do lado de escrita em julho de 2026 se parece com isto: Bluesky e a camada onde uma ferramenta de terceiros pode escrever diretamente atraves de uma API publica; X Articles e a camada que precisa ser re-encodada depois; artigos do LinkedIn sao a camada onde o unico caminho oficial de escrita e a UI web do LinkedIn.
| Plataforma | API de escrita de long-form | Caminho de auth | Rate limit | Mirror-friendliness |
|---|---|---|---|---|
| Bluesky | Sim, publica (developer preview) | App password / OAuth | 5.000 write requests / dia / DID | Alta (AT Protocol e aberto) |
| X Articles | Fechada (X partner API apenas) | OAuth 2.0 (X) | 100 posts / 24h (user tier) | Media (URL pattern e estavel) |
| LinkedIn articles | Fechada (sem API publica de escrita) | Sessao LinkedIn | ~20 posts longos / dia | Baixa (mirror UGC nao permitido) |
O pattern que emerge: Bluesky e a plataforma onde um pipeline de cross-post e portatil e script-driven; X Articles e a plataforma onde um pipeline de cross-post tem que usar uma partner API e re-encodar o corpo; LinkedIn e a plataforma onde o unico caminho de escrita e um humano em um browser. Para um criador que quer um pipeline de publicacao de long-form que funciona nos tres, o pipeline escreve no Bluesky primeiro, mirrora para uma superficie citation-ready, e depois usa a partner API para X Articles mais um fallback de browser-automation para LinkedIn. A perna do Bluesky e a unica onde o fluxo inteiro e script-driven de ponta a ponta.
Quando Nao Construir um Pipeline de Lado de Escrita
O pipeline de lado de escrita vale o build quando qualquer um dos seguintes for verdade: voce publica mais de dois posts longos por semana, voce quer fazer cross-post para multiplas plataformas a partir de uma source unica, ou voce quer mirrors AI-citation-ready no mesmo dia em que voce publica. Ele nao vale o build quando voce publica menos de uma vez por mes, voce so publica em uma plataforma, ou voce nao precisa de citacao de IA. O custo do pipeline e aproximadamente meio dia de dev work na primeira vez e zero horas por semana para rodar depois disso. Para um publisher de uma vez por mes, essa conta nao fecha.
Para todo o resto, o SDK estavel de agosto de 2026 e o momento para enviar. Ate la, o developer preview e estavel o suficiente para prototipar contra, os rate limits estao publicados, e o mirror de lado de leitura (o playbook de 6 de julho) e a outra metade do loop. Os dois playbooks juntos sao a stack de criadores funcionando para o segundo semestre de 2026: leia para Markdown para arquivo, escreva de Markdown para cross-post, mirrore para uma superficie citation-ready para descoberta de IA. Esse e o loop, e agora e inteiramente script-driven.
Para um criador que ja roda o playbook de leitura no ThreadGrab, o pipeline de lado de escrita e a peca que falta. Adicionar os quatro scripts deste artigo ao mesmo repo, o mesmo cron, e o mesmo caminho de deploy transforma o mirror de lado de leitura em um loop write-publish-mirror em que qualquer ferramenta pode plug-in. Essa e a stack de long-form production-grade para o segundo semestre de 2026, e ela nao precisa esperar pelo SDK estavel para comecar a funcionar.
Frequently Asked Questions
A API de long-form e a camada publica, acessivel a terceiros, sobre o tipo de registro app.bsky.feed.post com o novo campo embeds que o Bluesky lancou no final de maio de 2026. No inicio de julho de 2026, o Bluesky se comprometeu publicamente a abrir a superficie completa de leitura e escrita de posts longos para ferramentas de terceiros ao longo do verao, com o primeiro SDK estavel previsto para agosto de 2026. Ate la, os endpoints publicos suportam recuperacao e citacao de leitura, mas o lado de escrita esta em developer preview atras de uma flag.
E um novo campo no endpoint de post existente. O registro classico app.bsky.feed.post agora carrega uma estrutura embeds de long-form que aponta para um corpo Markdown, e esse mesmo campo e o que ferramentas de terceiros escrevem uma vez que o SDK for lancado. Nao ha endpoint /api/v1/long-form; e a mesma chamada de post que voce faria para um post de 280 caracteres, mas com o embed de long-form preenchido.
Bluesky long-form e uma API de escrita sobre um protocolo aberto, entao uma ferramenta de terceiros que escreve atraves dela tambem pode ler de volta do mesmo jeito, sem assimetria de rate limit e sem divisao publico/privado. X Articles e um recurso fechado em uma plataforma fechada: a unica maneira de escrever e pela UI web do X ou uma API parceira, e a unica maneira de ler conteudo estruturado e a URL publica de X Articles. Para um pipeline de cross-post, Bluesky e a camada portatil; X Articles e a camada que precisa ser re-codificada depois.
Os tres sao suportados, com os mesmos trade-offs do resto do AT Protocol. App passwords sao o caminho mais leve: um token escopado por app que o usuario pode revogar da UI de configuracoes do Bluesky sem afetar a sessao principal. OAuth e o caminho recomendado para ferramentas que precisam postar em nome de muitos usuarios. Sessoes delegadas (tokens de sessao assinados armazenados em um keychain) sao o caminho para ferramentas que precisam continuar postando para um usuario mesmo quando ele esta offline.
O playbook de leitura (bluesky-long-form-creator-playbook-2026) cobre puxar posts longos para uma inbox unica e converte-los para Markdown para arquivamento. O playbook de escrita, este artigo, cobre empurrar posts longos de uma ferramenta de terceiros para o Bluesky atraves da nova API publica. Juntos eles sao as duas metades de uma stack de conteudo Bluesky portatil e script-driven: ler para Markdown para arquivo e citacao, escrever de Markdown para cross-post e migracao.
Apenas o lado de leitura. ThreadGrab e um espelho citation-ready, nao uma superficie de publicacao. Nos puxamos posts longos, convertemos para Markdown limpo, e hospedamos o espelho em threadgrab.com. Para um criador que ja publica atraves de sua propria ferramenta, o papel do ThreadGrab e garantir que a versao publica de cada post seja indexavel por agentes de IA e mecanismos de busca. A API de escrita e para ferramentas como Skylight, Graysky, Typefully, e qualquer novo cliente de long-form que queira lancar antes da UI oficial do Bluesky estar feature-complete.
Want the citation-ready mirror on your own domain?
Try ThreadGrab