Blog

· 3 min de leitura

Como postar no Bluesky com uma API (e agendar) em 10 linhas

Publique e agende posts no Bluesky a partir do seu app com uma única chamada REST. Sem cadastrar app de desenvolvedor. Com cURL, JavaScript e Python.

O Bluesky é uma das redes sociais mais simples de automatizar. Não há app de desenvolvedor para cadastrar nem fila de revisão para esperar. Mas “simples” ainda significa cuidar de sessões, do formato dos records, dos facets de links e menções e dos blobs de imagem — e o Bluesky não tem agendamento nativo.

Este guia mostra como publicar e agendar posts no Bluesky com uma única chamada REST usando a Hapi. A mesma requisição também pode postar no X e no LinkedIn ao mesmo tempo.

Passo 1: Crie uma senha de app no Bluesky

No Bluesky, vá em Configurações → Privacidade e segurança → Senhas de app → Adicionar senha de app. Dê um nome como hapi e copie a senha.

Senhas de app não conseguem trocar a senha da conta nem excluí-la, então são a credencial certa para entregar a uma integração.

Passo 2: Conecte a conta na Hapi

Crie uma conta grátis na Hapi, abra Accounts → Connect → Bluesky e cole seu handle e a senha de app. A Hapi criptografa a credencial em repouso (AES-256-GCM), e ela nunca volta para o navegador.

Depois, crie uma chave de API em API keys. Ela aparece uma única vez, então coloque no ambiente:

bash
export HAPI_API_KEY="hapi_live_..."

Passo 3: Publique um post

cURL

bash
curl -X POST https://hapi.tools/v1/posts \
  -H "Authorization: Bearer $HAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Olá, Bluesky — publicado por uma API 🦋",
    "platforms": ["bluesky"]
  }'

JavaScript

js
const res = await fetch("https://hapi.tools/v1/posts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HAPI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    content: "Olá, Bluesky — publicado por uma API 🦋",
    platforms: ["bluesky"],
  }),
});
console.log(await res.json());

Python

python
import os, requests

res = requests.post(
    "https://hapi.tools/v1/posts",
    headers={"Authorization": f"Bearer {os.environ['HAPI_API_KEY']}"},
    json={"content": "Olá, Bluesky — publicado por uma API 🦋", "platforms": ["bluesky"]},
)
print(res.json())

É isso. Você recebe um 201 com o post e o status de cada conta.

Passo 4: Agende para depois

O Bluesky não aceita posts agendados nativamente, então o caminho comum é montar o próprio agendador de jobs. Com a Hapi, basta acrescentar scheduledAt:

json
{
  "content": "Isso sai na segunda de manhã",
  "platforms": ["bluesky"],
  "scheduledAt": "2026-11-16T09:00:00-03:00"
}

O agendador da Hapi publica no horário e dispara um webhook assinado post.published (ou post.failed), para o seu app saber o resultado.

Passo 5: Poste no Bluesky, no X e no LinkedIn de uma vez

A mesma requisição, com mais plataformas:

json
{
  "content": "Acabamos de lançar a v2 🚀",
  "platforms": ["bluesky", "x", "linkedin"],
  "platformOptions": {
    "bluesky": { "content": "Acabamos de lançar a v2 🚀 (o Bluesky fica com a versão curta)" }
  }
}

platformOptions deixa você ajustar o texto por rede. Isso ajuda porque o Bluesky limita os posts a 300 caracteres.

Não publique em dobro quando tentar de novo

Quedas de rede acontecem. Envie o header Idempotency-Key e a Hapi devolve o post original em vez de criar um duplicado:

bash
-H "Idempotency-Key: release-v2-announcement"

Isso pesa ainda mais quando quem chama a API é um agente de IA.

O que você deixou de construir

  • Criação e renovação de sessão no AT Protocol
  • Montar na mão os facets de links e menções
  • Enviar blobs de imagem e anexá-los aos records
  • Um agendador, novas tentativas e avisos de falha

Comece o teste de 15 dias → O teste de US$ 5 inclui 5 contas conectadas e 300 posts ao longo de 15 dias.