· 3 Min. Lesezeit
Per API auf Bluesky posten (und planen) in 10 Zeilen
Veröffentliche und plane Bluesky-Beiträge aus deiner App mit einem einzigen REST-Aufruf. Keine Entwickler-App, die du registrieren musst. Mit cURL, JavaScript und Python.
Bluesky gehört zu den sozialen Netzwerken, die sich am leichtesten automatisieren lassen. Es gibt keine Entwickler-App, die du registrieren musst, und keine Review-Warteschlange, in der du wartest. „Leicht“ heißt aber immer noch: Sessions, Record-Formate, Facets für Links und Mentions und Bild-Blobs. Und Bluesky kann von Haus aus überhaupt nicht planen.
Diese Anleitung zeigt, wie du Bluesky-Beiträge mit einem REST-Aufruf über Hapi veröffentlichst und planst. Dieselbe Anfrage kann gleichzeitig auf X und LinkedIn posten.
Schritt 1: Ein App-Passwort bei Bluesky anlegen
Geh in Bluesky zu Einstellungen → Datenschutz und Sicherheit → App-Passwörter → App-Passwort hinzufügen (auf Englisch: Settings → Privacy and security → App passwords → Add app password). Gib ihm einen Namen wie hapi und kopier es.
App-Passwörter können weder dein Kontopasswort ändern noch dein Konto löschen. Deshalb sind sie der richtige Zugang für eine Integration.
Schritt 2: Das Konto in Hapi verbinden
Lege ein kostenloses Hapi-Konto an, öffne Accounts → Connect → Bluesky und füg deinen Handle und das App-Passwort ein. Hapi verschlüsselt die Zugangsdaten im Ruhezustand (AES-256-GCM). An den Browser werden sie nie zurückgegeben.
Dann erstellst du unter API keys einen API-Key. Er wird nur einmal angezeigt, also leg ihn in deine Umgebung:
export HAPI_API_KEY="hapi_live_..."Schritt 3: Einen Beitrag veröffentlichen
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())Mehr brauchst du nicht. Du bekommst eine 201 mit dem Beitrag und dem Status pro Konto.
Schritt 4: Für später planen
Bluesky unterstützt geplante Beiträge nicht nativ. Normalerweise würdest du dir dafür einen eigenen Job-Runner bauen. Mit Hapi ergänzt du scheduledAt:
{
"content": "This goes out Monday morning",
"platforms": ["bluesky"],
"scheduledAt": "2026-11-16T09:00:00-03:00"
}Der Scheduler von Hapi veröffentlicht pünktlich und schickt einen signierten Webhook post.published (oder post.failed), damit deine App das Ergebnis kennt.
Schritt 5: Gleichzeitig auf Bluesky, X und LinkedIn posten
Dieselbe Anfrage, mehr Plattformen:
{
"content": "We just shipped v2 🚀",
"platforms": ["bluesky", "x", "linkedin"],
"platformOptions": {
"bluesky": { "content": "We just shipped v2 🚀 (Bluesky gets the short version)" }
}
}Mit platformOptions passt du den Text pro Netzwerk an. Das ist praktisch, weil Bluesky Beiträge bei 300 Zeichen kappt.
Beim Wiederholen nicht doppelt posten
Netzwerkaussetzer passieren. Schick einen Idempotency-Key-Header, dann liefert Hapi den ursprünglichen Beitrag zurück, statt ein Duplikat anzulegen:
-H "Idempotency-Key: release-v2-announcement"Das zählt umso mehr, wenn ein KI-Agent die API aufruft.
Was du dir ersparst, weil du es nicht selbst baust
- Sessions gegen das AT Protocol anlegen und erneuern
- Facets für Links und Mentions von Hand bauen
- Bild-Blobs hochladen und an Records hängen
- einen Scheduler, Wiederholungen und Fehlerbenachrichtigungen
Starte deine 15-tägige Testphase → Die Testphase für 5 $ umfasst 5 verbundene Konten und 300 Beiträge über 15 Tage.