BestPost für Entwickler
Mit der Schnittstelle arbeiten deine Programme und KI-Assistenten in deinem BestPost-Konto: Medien hochladen, Beiträge vorbereiten, Texte und Untertitel erstellen lassen, einplanen. Was dort entsteht, siehst du sofort im Planer und im Kalender.
Die Schnittstelle gibt es in den Tarifen Pro und Business.
1. Schlüssel anlegen
In BestPost unter Einstellungen, Konto, „API und MCP". Ein Schlüssel darf entweder nur vorbereiten oder vorbereiten und einplanen. Er beginnt mit bp_ und wird nur einmal angezeigt. Je Konto gehen 5 Schlüssel. Mit einem Schlüssel lässt sich weder anmelden noch ein Kanal verbinden oder die Abrechnung ändern.
curl https://bestpost.app/api/open/v1/me \
-H "Authorization: Bearer $BESTPOST_API_KEY"Die Antwort zeigt, was der Schlüssel darf, wie viel von deinem Tarif verbraucht ist und welche Regeln für dein Konto gelten.
2. Mit Claude und anderen Assistenten (MCP)
Ein Assistent mit MCP kann BestPost als Werkzeug benutzen. Du sagst dann zum Beispiel: „Lade den Ordner Herbst als Karussell für Instagram hoch und plane ihn für morgen 18 Uhr."
Ohne Installation
Die Adresse des MCP-Dienstes ist https://bestpost.app/api/mcp. Trage sie in deinem Assistenten als MCP-Dienst ein (in der Claude-App heißt das Connector). Beim Verbinden meldest du dich bei BestPost an und bestätigst, was der Assistent darf. Einen Schlüssel brauchst du dafür nicht.
Verbundene Assistenten siehst und trennst du in BestPost unter Einstellungen, Konto, „API und MCP".
Wer lieber einen Schlüssel benutzt, gibt ihn als Kopfzeile mit. In Claude Code zum Beispiel:
claude mcp add --transport http bestpost https://bestpost.app/api/mcp \
--header "Authorization: Bearer $BESTPOST_API_KEY"Dieser Weg kennt keine Dateien auf deinem Gerät. Er arbeitet mit Medien, die schon in BestPost liegen, oder mit öffentlichen Adressen.
Auf dem eigenen Rechner, mit Zugriff auf Ordner
Lade den Dienst als eine Datei herunter. Er braucht Node ab Version 20.
curl -o bestpost-mcp.mjs https://bestpost.app/api/open/v1/mcp/bestpost-mcp.mjsTrage ihn dann in dein Programm ein, zum Beispiel in Claude Desktop oder Claude Code:
{
"mcpServers": {
"bestpost": {
"command": "node",
"args": ["/pfad/zu/bestpost-mcp.mjs"],
"env": { "BESTPOST_API_KEY": "bp_live_..." }
}
}
}Der Dienst liest nur Bilder und Videos, nichts anderes von deinem Rechner.
3. Mit eigenen Programmen (API)
Alle Adressen beginnen mit https://bestpost.app/api/open/v1. Der Schlüssel steht in der Kopfzeile Authorization: Bearer …. Zeiten immer mit Zeitzone.
Beitrag aus einer Datei
Ein Video, ein Bild oder 2 bis 35 Bilder als Karussell. Der Beitrag entsteht als Entwurf. Mit Idempotency-Key legt eine wiederholte Anfrage nichts doppelt an. Texte folgen den festen Einstellungen der Marke: Gedankenstriche ersetzt BestPost, Hashtags und Emojis fallen weg, wenn die Marke auf „keine" steht.
curl -X POST https://bestpost.app/api/open/v1/posts \
-H "Authorization: Bearer $BESTPOST_API_KEY" \
-H "Idempotency-Key: reel-2026-10-12" \
-F "media=@video.mp4" \
-F 'data={
"platforms": {
"instagram": { "text": "Neu im Shop #neu", "firstComment": "Link in der Bio" },
"facebook": { "text": "Neu im Shop" }
},
"scheduledAt": "2026-10-12T18:00:00+02:00"
}'Beitrag aus Adressen, gleich eingeplant
Statt Dateien gehen öffentliche https-Adressen. BestPost holt die Medien selbst ab. Mit schedule wird der Beitrag im selben Aufruf eingeplant, wenn alle seine Plattformen das erlauben.
curl -X POST https://bestpost.app/api/open/v1/posts \
-H "Authorization: Bearer $BESTPOST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaUrls": ["https://example.com/bild-1.jpg", "https://example.com/bild-2.jpg"],
"platforms": { "instagram": { "text": "Zwei Bilder, ein Karussell" } },
"scheduledAt": "2026-10-12T18:00:00+02:00",
"schedule": true
}'Texte von BestPost
BestPost hört und sieht sich das Medium an und schreibt je Plattform einen Text, dazu den Titel für YouTube und einen ersten Kommentar. Das zählt wie in der App als ein Text in deinem Tarif. Die Texte sind Vorschläge: Lies sie, bevor du einplanst.
# 1. anfordern
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/texts -H "Authorization: Bearer $BESTPOST_API_KEY"
# 2. abholen, bis "status" nicht mehr "running" ist
curl https://bestpost.app/api/open/v1/posts/POST_ID/texts -H "Authorization: Bearer $BESTPOST_API_KEY"
# 3. in den Entwurf schreiben (nur leere Felder)
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/texts/apply -H "Authorization: Bearer $BESTPOST_API_KEY"Untertitel
Erst erstellen und lesen, dann fest einfügen. Das Einfügen lässt sich nicht zurücknehmen und geht je Video einmal. Ohne style gilt der Stil, den du in BestPost als Standard gespeichert hast.
# 1. erstellen: die Antwort trägt die Untertitel als SRT
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/subtitles -H "Authorization: Bearer $BESTPOST_API_KEY"
# 2. fest ins Video einfügen, hier mit hervorgehobenem Wort
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/subtitles/burn \
-H "Authorization: Bearer $BESTPOST_API_KEY" -H "Content-Type: application/json" \
-d '{ "style": { "preset": "karaoke" } }'
# 3. Stand abfragen, bis "status" gleich "burned" ist
curl https://bestpost.app/api/open/v1/posts/POST_ID/subtitles -H "Authorization: Bearer $BESTPOST_API_KEY"Einplanen
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/schedule \
-H "Authorization: Bearer $BESTPOST_API_KEY" -H "Content-Type: application/json" \
-d '{ "scheduledAt": "2026-10-12T18:00:00+02:00" }'Alle Adressen
| GET | /me | Konto, Rechte des Schlüssels, Verbrauch im Tarif, Regeln |
| GET | /channels | Marken und verbundene Kanäle |
| GET | /channels/{id} | Was die Plattform für diesen Kanal gerade erlaubt |
| GET | /posts | Beiträge auflisten |
| POST | /posts | Beitrag aus Dateien oder Adressen anlegen |
| GET | /posts/{id} | Einen Beitrag lesen |
| PATCH | /posts/{id} | Texte, Termin, Name, Plattformen ändern |
| DELETE | /posts/{id} | Beitrag löschen |
| POST | /posts/{id}/schedule | Entwurf einplanen |
| POST | /posts/{id}/unschedule | Eingeplanten Beitrag zurückholen |
| POST | /posts/{id}/texts | Texte von BestPost anfordern |
| GET | /posts/{id}/texts | Stand und Vorschläge |
| POST | /posts/{id}/texts/apply | Vorschläge in den Entwurf schreiben |
| POST | /posts/{id}/subtitles | Untertitel erstellen |
| GET | /posts/{id}/subtitles | Stand, Text, Fortschritt |
| PUT | /posts/{id}/subtitles | Korrigierte Untertitel speichern |
| DELETE | /posts/{id}/subtitles | Untertitel verwerfen |
| POST | /posts/{id}/subtitles/burn | Untertitel fest ins Video einfügen |
Die vollständige Beschreibung mit allen Feldern gibt es als OpenAPI: https://bestpost.app/api/open/v1/openapi.json
4. Regeln
- Nie sofort. Der früheste Termin liegt 10 Minuten in der Zukunft. So lässt sich ein Fehler noch zurückholen.
- TikTok und YouTube. Beide verlangen vor jedem Beitrag Angaben von dir. Ein Beitrag mit einer dieser Plattformen bleibt deshalb ein Entwurf (
confirmInApp), bis du ihn im Planer mit einem Klick bestätigst. Was für dein Konto gilt, steht unterrulesin der Antwort von/me. - Dein Tarif gilt auch hier. Texte, Untertitel, Entwürfe und Speicher zählen wie in der App. Den Stand liefert
/meunterusage. - Grenze je Kanal und Tag. Ein Programm plant je Kanal nur eine begrenzte Zahl von Beiträgen am Tag ein. Die Zahlen stehen unter
rules.maxPerChannelPerDay. - Fehler erklären sich. Jede Ablehnung trägt einen Satz und einen festen Code:
{ "error": "X: „text" ist 301 Zeichen lang, erlaubt sind 280.", "code": "TEXT_ZU_LANG" }Es gelten die Bedingungen der Schnittstelle. Fragen beantworten wir unter info@bestpost.app.