Guia · APIs de redes sociais para desenvolvedores

API do Bluesky e agendamento: como publicar via código

Por Antoine Blanco··7 min de leitura

O Bluesky não tem agendamento. A API grava um post no momento em que você chama com.atproto.repo.createRecord, e o schema do record não define nenhum campo que o segure. Para agendar, você roda sua própria fila ou usa uma ferramenta que guarda o post por você. Todos os endpoints, limites e preços abaixo foram verificados em fontes oficiais em 17 de setembro de 2026.

Dá para agendar posts no Bluesky?

Não pelo protocolo. O schema do registro de post exige exatamente dois campos, text e createdAt, e os opcionais atuais são langs, facets, embed, reply, labels e tags. Não existe publishAt nem scheduledFor. A API separada app.bsky.draft só armazena rascunhos de forma privada, sem horário de publicação. createdAt é um timestamp que você mesmo escreve, e escrever um no futuro não coloca nada na fila: o registro está no seu repositório e na rede assim que a gravação é concluída.

O guia de timestamps do Bluesky diz que o próprio App View ordena um post cujo createdAt está no futuro pelo momento em que o servidor o indexou, nos feeds de autor, nas threads de respostas e em outros feeds cronológicos. Então agendar no Bluesky é sempre alguém segurando o post até um relógio dar o sinal. Ou o seu cron, ou o de um fornecedor.

A API do Bluesky em cinco minutos

Duas chamadas. Crie uma senha de app em Configurações, nunca use a senha da sua conta, e depois troque-a por uma sessão.

curl -X POST https://bsky.social/xrpc/com.atproto.server.createSession \
  -H "Content-Type: application/json" \
  -d '{"identifier": "you.bsky.social", "password": "xxxx-xxxx-xxxx-xxxx"}'

A resposta traz accessJwt (de curta duração) e refreshJwt. Depois grave o registro:

curl -X POST https://bsky.social/xrpc/com.atproto.repo.createRecord \
  -H "Authorization: Bearer $ACCESS_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "repo": "you.bsky.social",
    "collection": "app.bsky.feed.post",
    "record": {
      "$type": "app.bsky.feed.post",
      "text": "Posted from a cron job.",
      "createdAt": "2026-09-17T08:00:00.000Z",
      "langs": ["en"]
    }
  }'

Você recebe de volta a localização do registro e o hash dele:

{
  "uri": "at://did:plc:u5cwb2mwiv2bfq53cjufe6yn/app.bsky.feed.post/3k4duaz5vfs2b",
  "cid": "bafyreibjifzpqj6o6wcq3hejh7y4z4z2vmiklkvykc57tw3pcbx3kxifpm"
}

Essa é toda a superfície de publicação. Sem revisão de app, sem conta comercial, sem programa de parceiros. Comparado com o que o Instagram e o TikTok exigem, como mostra o guia de APIs de redes sociais, o Bluesky é, de longe, a API mais fácil desse segmento.

O que um registro de post do Bluesky aceita

Do lexicon, verificado em 17 de setembro de 2026.

Campo Limite
text 300 grafemas, 3.000 bytes
langs 3 entradas
tags 8 entradas, 64 grafemas cada
Imagens por post 4 com app.bsky.embed.images; o mais recente app.bsky.embed.gallery permite 20 no schema, mas orienta os apps a limitar a 10 por enquanto
Tamanho da imagem 2.000.000 bytes cada (antes eram 1.000.000)
Upload de blob (limite do servidor, na página de rate limits) 52.428.800 bytes (50 MB)

Duas armadilhas. Links e menções não são extraídos do seu texto: você mesmo anexa os intervalos de bytes em facets, ou sua URL aparece como texto puro. E os 300 são grafemas, não code points: o len() do Python conta a mais bandeiras, tons de pele e emojis combinados (um emoji de família conta como 7) e pode rejeitar um post que o Bluesky aceitaria. Conte grafemas e verifique o teto de 3.000 bytes separadamente.

Limites de requisição da API do Bluesky

A página de rate limits usa um orçamento de pontos para escritas, além dos limites de requisições por IP.

Limite Valor
Orçamento de escrita 5.000 pontos por hora, 35.000 pontos por dia
Custo de uma criação 3 pontos, ou seja, 1.666 criações por hora
Custo de uma atualização / exclusão 2 pontos / 1 ponto
Requisições à API no total 3.000 a cada 5 minutos, por IP
createSession 30 a cada 5 minutos, 300 por dia, por conta

Para um agendador, isso é tão generoso que chega a ser irrelevante: uma fila de publicação que posta dez vezes por dia usa 30 de 35.000 pontos. O que merece atenção é o createSession. Não autentique a cada job. Guarde a sessão em cache e renove-a, senão um loop de worker movimentado bate nos 30 em cinco minutos sem publicar nada.

Agendar por conta própria

O agendador mais barato é uma tabela e um cron. Guarde o texto, a mídia e um publish_at, e rode a cada minuto:

import os, requests, datetime as dt

BASE = "https://bsky.social/xrpc"

def session():
    r = requests.post(f"{BASE}/com.atproto.server.createSession", json={
        "identifier": os.environ["BSKY_HANDLE"],
        "password": os.environ["BSKY_APP_PASSWORD"],
    })
    r.raise_for_status()
    return r.json()

def publish(s, text):
    now = dt.datetime.now(dt.timezone.utc).isoformat().replace("+00:00", "Z")
    r = requests.post(f"{BASE}/com.atproto.repo.createRecord",
        headers={"Authorization": f"Bearer {s['accessJwt']}"},
        json={"repo": s["did"], "collection": "app.bsky.feed.post",
              "record": {"$type": "app.bsky.feed.post", "text": text, "createdAt": now}})
    r.raise_for_status()
    return r.json()["uri"]

Três regras que aprendi do jeito mais caro. Defina createdAt no momento da publicação, não quando o post entra na fila: o guia de timestamps do Bluesky diz que o App View ordena um post por createdAt quando esse horário está no passado, então um post marcado uma hora antes de sair fica uma hora mais abaixo. Torne o job idempotente, com uma linha e um lock, senão um retry publica o post duas vezes. E registre o uri retornado, porque ele é a sua prova de que o post existe.

Ferramentas que agendam posts no Bluesky para você

Preços tirados da página de preços de cada fornecedor em 17 de setembro de 2026.

Ferramenta Preço Bluesky Hospedado Ideal para
Buffer Plano gratuito: 3 canais, 10 posts agendados por canal. Essentials a US$ 5 por canal por mês, cobrado anualmente, US$ 60 por ano Sim Sim Uma pessoa, poucos canais
Postiz US$ 29 por mês para 5 canais, US$ 49 para 30, ou hospede você mesmo a versão open source Sim Ambos Equipes que querem ter a opção de self-hosting
Mixpost Licença única: Lite grátis, Pro US$ 299, Enterprise US$ 1.199. O Bluesky está no Pro Sim Self-hosted, mais o Mixpost Cloud (sem preço público) Compre uma vez, rode no seu próprio servidor
Ayrshare US$ 149 por mês para 1 perfil, US$ 299 para 10, a partir de US$ 599 para 30 Sim, valor de plataforma bluesky Sim Produtos API-first que revendem publicação
Blotato US$ 29 por mês para 20 contas, US$ 97 para 40 Sim, listado na página inicial Sim Fluxos de conteúdo com IA em nove redes
PlugKit US$ 29 por mês para 5 contas conectadas, US$ 97 para 30 Não Sim Agentes no Instagram, TikTok, LinkedIn, X, YouTube, Facebook, WhatsApp, Telegram
Seu próprio cron Só o custo do servidor Sim Auto-hospedado Uma conta, controle total, zero abstração

Se o Bluesky é a única rede em que você publica, não vale a pena pagar por nenhuma dessas ferramentas. A API é um POST com um bearer token e o limite é de 1.666 criações por hora. Escreva o cron.

Onde o PlugKit se encaixa, e onde não se encaixa

O PlugKit não suporta o Bluesky, por enquanto. As oito plataformas são Instagram, Facebook, LinkedIn, TikTok, YouTube, X, WhatsApp e Telegram, listadas em plugkit.co hoje de manhã. Se a sua lista de contas é Bluesky mais Mastodon, use o Buffer ou um script e pare de ler aqui.

Onde ele se justifica é no caso oposto: as APIs que dão trabalho. O app review da Meta, o escopo Direct Post do TikTok, o X cobrando por chamada. Uma chave, um servidor MCP hospedado em https://api.plugkit.co/mcp, adicionado com claude mcp add -t http plugkit https://api.plugkit.co/mcp, e seu agente publica no Instagram, Facebook, LinkedIn, TikTok, YouTube, X e Telegram, lê e responde mensagens no Instagram, Facebook, WhatsApp e Telegram, e responde comentários e roda automações de comentário para DM no Instagram e no Facebook. São US$ 29 por mês para 5 contas conectadas, cancele quando quiser. Os limites por plataforma estão na referência de rate limits, a configuração do agente no guia do Hermes Agent, e a comparação entre hospedado e self-hosted em alternativas ao Postiz.

Para ver outra API jovem, desta vez da Meta, confira a API do Threads.

Perguntas frequentes

Dá para agendar posts no Bluesky?

Não nativamente. O registro de post do AT Protocol não tem campo de agendamento, e um createdAt definido no futuro não atrasa a publicação. O agendamento vem de algo que segura o post fora do Bluesky: seu próprio cron job ou uma ferramenta como Buffer, Postiz ou Mixpost.

A API do Bluesky é gratuita?

Sim, para uso normal. A documentação para desenvolvedores do Bluesky lista rate limits, mas nenhum plano, preço ou taxa por chamada, e você se autentica com uma senha de app gratuita e fica dentro de 5.000 pontos de escrita por hora, o que dá cerca de 1.666 posts. É o oposto do X, que cobra cada leitura e cada publicação.

Como faço a autenticação na API do Bluesky?

Crie uma senha de app nas configurações do Bluesky e depois envie via POST seu handle e essa senha para com.atproto.server.createSession. Você recebe um accessJwt para enviar como bearer token e um refreshJwt para renová-lo. Nunca use sua senha real e guarde a sessão em cache: createSession é limitado a 30 chamadas a cada 5 minutos.

Qual é o limite de caracteres de um post no Bluesky?

300 grafemas, com um teto rígido de 3.000 bytes. Um emoji conta como um grafema, mas ocupa de 4 a 25 bytes, então o teto de bytes só pesa em textos cheios de emojis combinados, como famílias ou casais. Com o embed de imagens, você pode anexar até quatro imagens de 2.000.000 bytes cada.

O PlugKit suporta Bluesky?

Não. O PlugKit cobre Instagram, Facebook, LinkedIn, TikTok, YouTube, X, WhatsApp e Telegram. Se você precisa do Bluesky hoje, escreva um script direto no AT Protocol ou use uma ferramenta que o ofereça, e deixe o PlugKit para as plataformas em que OAuth, revisão de app e cobrança por chamada fazem uma API hospedada valer o preço.

AB
Antoine BlancoFundador da PlugKit. Gerencia as próprias contas de Instagram, YouTube e X pela API e pelo servidor MCP descritos aqui.

Um plug para cada plataforma que seu agente usa

$29 por mês para 5 contas conectadas, cancele quando quiser. Todos os recursos em todos os planos.

Pegue sua chave de API →
Português ▾