Veröffentliche und plane Posts, Threads, Bilder und Video auf X (Twitter) über einen einzigen REST-Endpunkt. Verbinde dein X-Konto einmal: Du brauchst weder ein X-Entwicklerkonto noch einen eigenen X-API-Tarif.
Base-URL https://api.so-me.studio/v1 · Auth X-API-Key · socialMedia: TWITTER
Sende einen dieser Werte als postType. Jeder Beitrag braucht Text, und Fotos oder Videos werden per fileId aus deiner Medienbibliothek angehängt.
TEXT
Ein reiner Text-Post.
IMAGE
Ein Bild.
CAROUSEL
2 bis 4 Bilder in einem Post.
VIDEO
Ein Video.
Lade die Medien hoch und erstelle dann den Beitrag. Lass scheduledAt weg, um sofort zu veröffentlichen.
POST /v1/media/presign-upload legt die Datei in deiner Medienbibliothek an und liefert eine fileId und eine Presigned-URL namens uploadUrl.
curl -X POST https://api.so-me.studio/v1/media/presign-upload \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"files":[{"filename":"onboarding.png","mimetype":"image/png","size":412300}]}'
# → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]Sende die Bytes per PUT an uploadUrl, mit genau dem Content-Type, den du angegeben hast. Die URL ist eine Stunde lang gültig.
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: image/png" \
--upload-file ./onboarding.pngPOST /v1/posts mit der fileId. Die Antwort ist der Beitrag mit dem Status SCHEDULED, und er wird zum Zeitpunkt scheduledAt über eine Queue veröffentlicht, die bei Fehlern erneut versucht.
curl -X POST https://api.so-me.studio/v1/posts \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"socialMedia": "TWITTER",
"postType": "IMAGE",
"text": "Wir haben unser Onboarding neu gebaut. 3 Erkenntnisse:",
"fileIds": ["<fileId>"],
"threadParts": [
{ "text": "1. Pro Bildschirm nur eine Sache abfragen." },
{
"text": "2. Das Ergebnis zeigen, bevor die Einrichtung beginnt."
},
{
"text": "3. Den Abbruch pro Schritt messen, nicht pro Funnel."
}
],
"scheduledAt": "2026-11-06T13:00:00Z"
}'accountId ist optional, wenn der Workspace ein X-Konto hat. Andernfalls übergib eine ID aus GET /v1/accounts.
Mit fileIds angehängte Dateien werden gegen die X-Limits unten geprüft, bevor etwas in die Queue kommt. Verstößt eine Datei gegen eine Regel, kommt 400 mit einem Bericht pro Datei zurück.
Die Felder, die ändern, wie ein Beitrag auf X veröffentlicht wird.
| Feld | Was es bewirkt |
|---|---|
| threadParts | Die folgenden Posts in Reihenfolge, veröffentlicht als Antwortkette unter dem ersten. Bis zu 24 Teile mit je 280 Zeichen, jeweils mit bis zu 4 fileIds. |
| firstComment | Eine Antwort, die unter dem Post oder unter dem letzten Teil eines Threads gepostet wird, sobald er live ist. Bis zu 280 Zeichen, und X zählt jeden Link als 23. |
| accountId | Das X-Konto, von dem aus gepostet wird. Optional, wenn der Workspace nur eines hat. |
Social media studio prüft jede Datei vor der Veröffentlichung gegen diese Limits. Es sind unsere konfigurierten Limits, keine Zusage von X: GET /v1/media/rules liefert die aktuelle Tabelle, und POST /v1/media/validate prüft eine Datei, ohne sie zu posten.
Beitragstyp TEXT
Nur Text, keine Medien
Beitragstyp IMAGE
Beitragstyp CAROUSEL
Beitragstyp VIDEO
Die Veröffentlichung läuft asynchron. Abonniere post.published und post.failed oder frage GET /v1/posts/:id ab, bis postStatus POSTED oder FAILED ist.
curl -X POST https://api.so-me.studio/v1/webhooks/subscriptions \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/social",
"categories": ["post"],
"events": ["post.published", "post.failed"]
}'
# The response includes the secret that signs every delivery.POST /hooks/social
X-Webhook-Event: post.published
X-Webhook-Signature: <hex HMAC-SHA256 of the raw body>
{
"event": "post.published",
"category": "post",
"timestamp": "2026-11-03T15:00:07.412Z",
"data": { "postId": "…", "platform": "TWITTER" }
}Jede Zustellung wird mit HMAC-SHA256 in X-Webhook-Signature signiert. post.failed wird nach dem letzten Retry ausgelöst; behebe die Ursache und rufe POST /v1/posts/:id/retry auf. Ein erster Kommentar meldet sich separat mit post.first_comment_posted oder post.first_comment_failed.
Derselbe API-Key steuert einen MCP-Server mit 200+ Tools und eine CLI, sodass ein Agent auf X posten kann, ohne selbst geschriebene HTTP-Aufrufe.
Füge den Server mit deinem API-Key zu Claude, Cursor oder einem beliebigen MCP-Client hinzu. OAuth funktioniert ebenfalls. Für X ruft der Agent diese Tools mit denselben Feldern wie die REST-Anfrage auf:
{
"mcpServers": {
"so-me-studio": {
"url": "https://api.so-me.studio/mcp",
"headers": { "X-API-Key": "sk_live_…" }
}
}
}Installiere sie mit npm i -g @social-media-scheduler/cli. Sie lädt lokale Dateien für dich hoch und gibt JSON aus, sodass ein Skript oder ein CI-Job einen X-Beitrag mit einem Befehl planen kann.
so-me posts:create --platform TWITTER --post-type IMAGE \
-m ./onboarding.png \
-c "Wir haben unser Onboarding neu gebaut. 3 Erkenntnisse:" \
--thread "1. Pro Bildschirm nur eine Sache abfragen." \
--thread "2. Das Ergebnis zeigen, bevor die Einrichtung beginnt." \
-s 2026-11-06T13:00:00ZAPI-, CLI- und MCP-Zugriff ist in jedem kostenpflichtigen Tarif enthalten: Lite, Creator, Standard, Advanced und Lifetime. Tarife und Limits ansehen
Ja. Setze den ersten Post in text und den Rest in threadParts. Jeder Teil kann eigenen Text und eigene fileIds enthalten. Schlägt ein späterer Teil fehl, bleiben die bereits veröffentlichten Teile online, und der Beitrag hält fest, wie viele veröffentlicht wurden.
Nein. Du verbindest dein X-Konto einmal mit Social media studio, und die Veröffentlichung läuft über die X-Integration von Social media studio. Dein Code sendet nur deinen API-Key von Social media studio.
Nein. Du verbindest das X-Konto einmal im Dashboard von Social media studio über die X-Anmeldung. Die Tokens werden bei uns verschlüsselt gespeichert und aktualisiert, und dein Code sendet nur deinen API-Key von Social media studio im Header X-API-Key.
Nein. Der Aufruf kehrt zurück, sobald der Beitrag in der Queue ist. Die Veröffentlichung läuft in einem Worker, der bei Fehlern erneut versucht, also lausche auf post.published und post.failed oder frage GET /v1/posts/:id ab.
Die REST-API, die CLI und der MCP-Server sind in jedem kostenpflichtigen Tarif enthalten: Lite, Creator, Standard, Advanced und Lifetime. Lite, Creator, Standard und Advanced beginnen mit einem 7-Tage-Test (Karte erforderlich), und Lifetime ist eine Einmalzahlung.
Schluss mit dem Tab-Chaos, entwirf, passe an und veröffentliche auf 20 Plattformen aus einem einzigen Kalender.