PT EN ID

API Long-Form Bluesky 2026: Ferramentas de Terceiros

9 de Julho, 2026 · 10 min de leitura · Guia

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:

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.

PlataformaAPI de escrita de long-formCaminho de authRate limitMirror-friendliness
BlueskySim, publica (developer preview)App password / OAuth5.000 write requests / dia / DIDAlta (AT Protocol e aberto)
X ArticlesFechada (X partner API apenas)OAuth 2.0 (X)100 posts / 24h (user tier)Media (URL pattern e estavel)
LinkedIn articlesFechada (sem API publica de escrita)Sessao LinkedIn~20 posts longos / diaBaixa (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

O que e a API de posts longos do Bluesky para ferramentas de terceiros, e quando ela sera lancada?

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.

A API de escrita de long-form e um endpoint separado, ou um novo campo no endpoint de post existente?

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.

Como a API de escrita de long-form do Bluesky se compara ao X Articles para cross-post?

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.

Ferramentas de terceiros precisam de OAuth, app password, ou sessao delegada para usar a API de escrita de long-form?

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.

Como isso se encaixa com o playbook de leitura que voce publicou em 6 de julho?

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.

O ThreadGrab vai expor um endpoint de escrita de long-form para terceiros, ou apenas o lado de leitura?

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