· 3 min di lettura
Come pubblicare su Bluesky con un’API (e programmarlo) in 10 righe
Pubblica e programma i post su Bluesky dalla tua app con una sola chiamata REST. Nessuna app sviluppatore da registrare. Con cURL, JavaScript e Python.
Bluesky è uno dei social più facili da automatizzare. Non c’è un’app sviluppatore da registrare e non c’è una coda di revisione in cui aspettare. “Facile”, però, vuol dire comunque gestire sessioni, formato dei record, facet per link e menzioni, e i blob delle immagini. E Bluesky non ha alcuna programmazione nativa.
Questa guida mostra come pubblicare e programmare i post su Bluesky con una sola chiamata REST, usando Hapi. La stessa richiesta può pubblicare anche su X e LinkedIn, nello stesso momento.
Passo 1: Crea una password per app su Bluesky
In Bluesky vai su Settings → Privacy and security → App passwords → Add app password. Dalle un nome, per esempio hapi, e copiala.
Le password per app non possono cambiare la password dell’account né cancellarlo, quindi sono la credenziale giusta da affidare a un’integrazione.
Passo 2: Collega l’account in Hapi
Crea un account Hapi gratuito, apri Accounts → Connect → Bluesky e incolla l’handle e la password per app. Hapi cifra la credenziale a riposo (AES-256-GCM) e non la restituisce mai al browser.
Poi crea una chiave API sotto API keys. Viene mostrata una sola volta: mettila nell’ambiente.
export HAPI_API_KEY="hapi_live_..."Passo 3: Pubblica un post
cURL
curl -X POST https://hapi.tools/v1/posts \
-H "Authorization: Bearer $HAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello Bluesky, posted from an API 🦋",
"platforms": ["bluesky"]
}'JavaScript
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: "Hello Bluesky, posted from an API 🦋",
platforms: ["bluesky"],
}),
});
console.log(await res.json());Python
import os, requests
res = requests.post(
"https://hapi.tools/v1/posts",
headers={"Authorization": f"Bearer {os.environ['HAPI_API_KEY']}"},
json={"content": "Hello Bluesky, posted from an API 🦋", "platforms": ["bluesky"]},
)
print(res.json())Tutto qui. Ricevi un 201 con il post e lo stato di ogni account.
Passo 4: Programmalo per dopo
Bluesky non supporta i post programmati, quindi di solito dovresti costruirti il processo che pubblica all’ora giusta. Con Hapi aggiungi scheduledAt:
{
"content": "This goes out Monday morning",
"platforms": ["bluesky"],
"scheduledAt": "2026-11-16T09:00:00-03:00"
}Lo scheduler di Hapi pubblica all’orario richiesto e invia un webhook firmato post.published (oppure post.failed), così la tua app sa com’è andata.
Passo 5: Pubblica su Bluesky, X e LinkedIn insieme
Stessa richiesta, più piattaforme:
{
"content": "We just shipped v2 🚀",
"platforms": ["bluesky", "x", "linkedin"],
"platformOptions": {
"bluesky": { "content": "We just shipped v2 🚀 (Bluesky gets the short version)" }
}
}platformOptions ti permette di adattare il testo a ogni network. Serve, perché Bluesky ferma i post a 300 caratteri.
Niente post doppi quando riprovi
I contrattempi di rete capitano. Invia un header Idempotency-Key e Hapi restituisce il post originale, invece di crearne un duplicato:
-H "Idempotency-Key: release-v2-announcement"Conta ancora di più se a chiamare l’API è un agente AI.
Cosa ti sei risparmiato a non costruirlo da solo
- Creazione e refresh della sessione sull’AT Protocol
- Costruire a mano le facet per link e menzioni
- Caricare i blob delle immagini e allegarli ai record
- Uno scheduler, i retry e le notifiche quando qualcosa fallisce
Inizia la prova di 15 giorni → La prova a 5 $ include 5 account collegati e 300 post in 15 giorni.