Entwickler

Öffentliche Veröffentlichungs-API

Lade Medien hoch, erstelle Beiträge und veröffentliche auf Facebook, Instagram, TikTok, LinkedIn, Threads und Pinterest, jeweils auf ein Produkt beschränkt über einen Arbeitsbereichs-API-Schlüssel. Der empfohlene Weg zur Integration ist die Connect-API, eine kleine, flache/api/connect/v1-Oberfläche, die die meisten Planungstools direkt verwenden können.

Brauchst du volle Kontrolle, explizite Veröffentlichung, Abfrage von Job-Läufen, signierte Webhooks, Batch-Verarbeitung, kanalspezifische Einstellungen? Die erweiterte /api/public/v1-API weiter unten stellt all das bereit. Beide teilen sich Authentifizierung, Produkte und Veröffentlichungspipeline; verwende ausschließlich diese versionierten öffentlichen Routen (interne App-Routen erfordern Firebase-Nutzerauthentifizierung und sind nicht Teil des öffentlichen Vertrags).

Facebook, Instagram und TikTok sind über die API grundsätzlich manuell. Beiträge für diese Kanäle nutzen standardmäßig die manual_reminder-Zustellung: Markaestro ruft niemals die API der Plattform für sie auf. Das Veröffentlichen verschiebt den Beitrag in die „Zu veröffentlichen“-Warteschlange des Arbeitsbereichs. Übergib deliveryMode: "direct_publish", um die offizielle API-Veröffentlichung zu aktivieren. Bei TikTok wird standardmäßig die Posteingangsübergabe genutzt, außer settings.postMode ist direct_post. LinkedIn, Threads und Pinterest veröffentlichen standardmäßig programmatisch.

Arbeitsbereiche können mehrere Produkte haben. Jeder API-Schlüssel ist bei der Erstellung an ein Produkt gebunden, sodass Aufrufe automatisch dieses Produkt ansteuern und Anfragen für jedes andere Produkt abgelehnt werden.

Baust du einen KI-Agenten?

Beginne stattdessen mit dem Leitfaden für KI-Agenten. Er enthält fertige Tool-Schemas zum Kopieren, eine System-Prompt-Kurzübersicht, die Wiederholungs- und Fehlerbehandlungsregeln, die ein Agent braucht, sowie einen Schnellstart mit vier Befehlen. Dein Agent kann auch direkt /llms.txt lesen.

Maschinenlesbare Spezifikation

Jeder Endpunkt, jedes Request- und Response-Format und jeder Fehlercode als OpenAPI 3.1. Generiert aus denselben Schemata, gegen die die API validiert, also kann sie keine API beschreiben, die es nicht gibt.

Connect-API
Empfohlen
Der Standardweg zur Integration: eine flache snake_case-Oberfläche unter /api/connect/v1, die die meisten Planungstools direkt verwenden können. Sie bildet die gängige create-upload-url → PUT → post-Konvention auf denselben Arbeitsbereich, dieselbe Authentifizierung, Produkte und Veröffentlichungspipeline ab wie die vollständige API unten. Setze die Basis-URL des Clients auf /api/connect und authentifiziere dich mit einem produktbeschränkten Arbeitsbereichs-API-Schlüssel (Berechtigungen posts.read, posts.write, media.write).
GET/api/connect/v1/social-accounts

Listet verbundene Facebook-, Instagram-, TikTok- und LinkedIn-Ziele als flache Konten auf, jeweils mit ihrem Produkt gekennzeichnet, damit Clients gruppieren und unterscheiden können. Jeder Kanal hat seinen eigenen Pfad, kein kanalübergreifendes Fan-out.

GET/api/connect/v1/products

Listet Marken (API-Name: products) mit ihren verbundenen Konten verschachtelt auf, eine markenzentrierte Auswahl.

POST/api/connect/v1/media/create-upload-url

Gibt eine kurzlebige, einmal verwendbare signierte PUT-URL sowie eine Medien-ID zurück.

PUT<upload_url>

Lädt die rohen Bild-Bytes an die signierte URL hoch. Kein API-Schlüssel nötig, die Signatur autorisiert die Anfrage.

POST/api/connect/v1/posts

Erstellt einen Entwurf pro ausgewähltem Konto. Setze is_draft=false mit scheduled_at, um die Zustellung zu planen; TikTok nutzt die Posteingangsübergabe des Creators.

GET/api/connect/v1/posts

Listet Arbeitsbereichsbeiträge mit flachem Status, Text und Medien-URLs auf.

# 1. List connected accounts
curl "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

# 2. Request a signed upload url, then PUT the bytes
curl -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "slide-1.png" }'
curl -X PUT "<upload_url>" -H "Content-Type: image/png" --data-binary @slide-1.png

# 3. Create a draft post for one or more accounts
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "caption": "New drop",
    "media": ["ast_111", "ast_222"],
    "social_accounts": ["prod_123#instagram:instagram:ig_123"]
  }'

Jedes Konto aus /social-accounts ist mit seinem product beschriftet, dem API-Namen für eine Marke (dasselbe Konto kann unter mehreren Marken erscheinen), und seine id kodiert productId#destinationId, gib sie unverändert in social_accounts zurück, und die Anfrage verteilt sich auf einen Beitrag pro Konto. Jeder Schlüssel ist an eine Marke gebunden, sieht und postet also nur für diese Marke. Facebook-, Instagram- und TikTok-Beiträge sind grundsätzlich manuell, sie werden als Entwürfe erstellt und vom Arbeitsbereichsinhaber nativ aus der „Zu veröffentlichen“-Warteschlange von Markaestro veröffentlicht, niemals über die API der Plattform. LinkedIn, Threads und Pinterest veröffentlichen programmatisch nach einer expliziten Veröffentlichungsaktion. Der Status eines Beitrags ist entweder draft, processing, posted oder failed. Facebook, Instagram, LinkedIn, TikTok und Threads sind jeweils eigene dedizierte Ziele, das Veröffentlichen auf einem verteilt sich niemals auf ein anderes. Verfolge den Veröffentlichungsstatus über GET /api/connect/v1/posts.

Erweitert: vollständige öffentliche API

Die vollständige /api/public/v1-Oberfläche, explizite Veröffentlichung, asynchrone Job-Läufe, signierte Webhooks, Batch-Erstellung und kanalspezifische Einstellungen. Nutze sie, wenn die Connect-API nicht ausreicht.

Meta & TikTok sind grundsätzlich manuell
Facebook-, Instagram- und TikTok-Beiträge nutzen standardmäßig die manuelle „Zu veröffentlichen“-Warteschlange, kein Plattform-API-Aufruf, der Arbeitsbereichsinhaber postet nativ und bestätigt. Aktiviere die API-Veröffentlichung pro Beitrag mit deliveryMode.
Instagram Login unterstützt
Marken können eigenständige professionelle Instagram-Konten anbieten, auch wenn keine Facebook-Seite verknüpft ist.
TikTok unterstützt zwei Opt-in-Wege
API-Veröffentlichung nutzt standardmäßig die Posteingangsübergabe. Setze settings.postMode mit Datenschutzstufe auf direct_post, wenn deine TikTok-App dafür freigegeben ist.
Asynchron per Design
Jede Veröffentlichung gibt eine Lauf-ID zurück. Frage Läufe ab oder abonniere signierte Webhooks, statt einen synchronen Abschluss anzunehmen.
Marken und Ziele
Entdecke die Marken und Veröffentlichungsziele, die für den API-Schlüssel verfügbar sind. Marken werden im API-Format products genannt: Pfade und Nutzdaten verwenden aus Kompatibilitätsgründen products/productId, und POST-Bodies akzeptieren auch brandId als Alias.
GET/api/public/v1/products

Listet die Marken des Schlüssels sowie die aktuell verfügbaren Kanäle für jede auf.

GET/api/public/v1/products/:id/destinations

Listet die Veröffentlichungsziele dieser Marke auf, einschließlich eigenständigem Instagram Login, Facebook-Seite, Threads, LinkedIn-Profil/-Seite und verbundenen TikTok-Zielen.

Medien
Lade Bilder oder Videos in den von Markaestro verwalteten Speicher hoch, bevor du Beiträge erstellst.
POST/api/public/v1/media/upload-sessions

Erstellt aus Dateiname, Inhaltstyp und exakter Größe eine 15-minütige direkte Upload-Sitzung.

PUT<uploadSession.uploadUrl>

Lädt Rohdaten mit dem zurückgegebenen Content-Type direkt in den Speicher; keinen API-Schlüssel senden.

POST/api/public/v1/media/upload-sessions/:id/finalize

Prüft Typ und Größe und gibt das Medien-Asset zurück; abgeschlossene Sitzungen sind wiederholbar.

POST/api/public/v1/media

Kompatibler Multipart-Upload. Gibt eine Asset-ID und gehostete URL zurück.

Beiträge
Erstelle, liste, prüfe, veröffentliche und lösche Beiträge für Facebook, Instagram, LinkedIn, Threads, Pinterest und TikTok.
POST/api/public/v1/posts

Erstellt einen Entwurf im Arbeitsbereich. Facebook, Instagram und TikTok nutzen standardmäßig manuelle Veröffentlichung (deliveryMode manual_reminder); übergib deliveryMode direct_publish, um einen Beitrag für die API-Veröffentlichung zu aktivieren.

GET/api/public/v1/posts

Listet Beiträge auf, neueste zuerst. Filtere mit ?status=scheduled, um zu sehen, was eingereiht ist, und ?productId=, um auf eine Marke zu beschränken. Ein markengebundener Schlüssel ist immer auf seine eigene Marke beschränkt und kann productId weglassen.

GET/api/public/v1/posts/:id

Gibt den aktuellen Beitragsstatus, den Zustellmodus und die Veröffentlichungsergebnisse zurück.

POST/api/public/v1/posts/:id/publish

Reiht einen asynchronen Veröffentlichungslauf ein. Manuelle Beiträge landen zur nativen Veröffentlichung in der „Zu veröffentlichen“-Warteschlange des Arbeitsbereichs; LinkedIn, Threads und Pinterest veröffentlichen direkt; aktivierte Meta-Beiträge werden über die offizielle API veröffentlicht, und aktivierte TikTok-Beiträge nutzen die Posteingangsübergabe.

DELETE/api/public/v1/posts/:id

Löscht den Beitrag aus Markaestro. Nutzt die vorhandene Berechtigung posts.write. Gibt 400 VALIDATION_POST_IS_PUBLISHING zurück, während ein Veröffentlichungslauf läuft. Das Löschen eines bereits veröffentlichten Beitrags entfernt nicht die aktive Kopie auf der Plattform.

Läufe und Webhooks
Verfolge asynchrone Arbeit durch Abfrage oder signierte Webhook-Zustellung.
GET/api/public/v1/job-runs/:id

Gibt queued, running, succeeded oder failed zurück.

POST/api/public/v1/webhook-endpoints

Registriert ein Webhook-Ziel; maximal 25 aktive Endpunkte pro Arbeitsbereich.

GET/api/public/v1/webhook-endpoints

Listet registrierte Webhook-Ziele für den Geltungsbereich dieses API-Schlüssels auf.

DELETE/api/public/v1/webhook-endpoints/:id

Deaktiviert ein Webhook-Ziel.

1. Produkte auflisten
Entdecke, auf welche Produkte dieser API-Schlüssel zugreifen kann.
curl "$MARKAESTRO_URL/api/public/v1/products" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
2. Ziele prüfen
Sieh dir die verknüpften Seiten und Konten eines Produkts an, bevor du den Beitrag erstellst. Verwende die zurückgegebene destinationId, wenn ein Produkt mehrere Ziele hat, etwa ein LinkedIn-Profil plus Seiten.
curl "$MARKAESTRO_URL/api/public/v1/products/prod_123/destinations" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
3. Medien hochladen
Jeder Beitrag referenziert zuvor hochgeladene Medien-Assets.
# 1. Create a 15-minute upload session
UPLOAD=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"launch-1.jpg","contentType":"image/jpeg","sizeBytes":184320}')

# 2. PUT bytes directly to uploadSession.uploadUrl with its returned headers
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @launch-1.jpg

# 3. Finalize; the response contains asset.id for mediaAssetIds
curl -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions/<session_id>/finalize" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
4. Beitrag erstellen
Erstelle einen Entwurf mit diesen Asset-IDs. Instagram nutzt standardmäßig manuelle Veröffentlichung; füge "deliveryMode": "direct_publish" hinzu, um diesen Beitrag für die offizielle API-Veröffentlichung zu aktivieren.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-001" \
  -d '{
    "channel": "instagram",
    "caption": "Launch day carousel",
    "mediaAssetIds": ["ast_123", "ast_124"],
    "productId": "prod_123",
    "destinationId": "instagram:instagram:ig_123"
  }'
TikTok-Beispiel
TikTok-Beiträge landen als Markaestro-Entwürfe und nutzen standardmäßig die manuelle Veröffentlichung aus der „Zu veröffentlichen“-Warteschlange. Mit deliveryMode: "platform_inbox" (oder direct_publish) sendet eine explizite Veröffentlichung den Entwurf stattdessen an den Posteingang des Creators auf TikTok.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-tt-001" \
  -d '{
    "channel": "tiktok",
    "caption": "Spring drop teaser",
    "mediaAssetIds": ["ast_vid_123"],
    "productId": "prod_123",
    "destinationId": "tiktok:tiktok:tt_open_123"
  }'
5. Veröffentlichung einreihen
Das Veröffentlichen erstellt einen asynchronen Lauf. Manuelle Beiträge (der Standard bei Facebook/Instagram/TikTok) wandern in die „Zu veröffentlichen“-Warteschlange und lösen post.action_required aus; LinkedIn, Threads, Pinterest und aktivierte Meta-Beiträge veröffentlichen direkt; aktivierte TikTok-Beiträge reihen die Posteingangsübergabe ein.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts/pst_123/publish" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Idempotency-Key: publish-001"
6. Zeitplan prüfen und abbrechen
Liste auf, was für eine Marke eingereiht ist, und lösche alles, was nicht mehr veröffentlicht werden soll. Beide nutzen Berechtigungen, die bestehende Schlüssel bereits haben: posts.read und posts.write.
# The key is already bound to one brand
curl "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

# Cancel one
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
Beispiel für Webhook-Payload
Zustellungen sind mit HMAC über dein Webhook-Secret signiert.
{
  "id": "evt_123",
  "type": "post.action_required",
  "createdAt": "2026-04-08T18:06:10.000Z",
  "workspaceId": "ws_123",
  "data": {
    "postId": "pst_123",
    "channel": "instagram",
    "status": "platform_action_required",
    "nextAction": "post_manually_from_reminder"
  }
}
Kanalverhalten
Von der öffentlichen API durchgesetzte Validierungs- und Zustellregeln.

Facebook

Reine Text-, Bild- oder Video-Beiträge. Bis zu 10 Bilder oder 1 Video pro Beitrag. Standardmäßig manuelle Veröffentlichung; direkte Veröffentlichung bei Aktivierung.

Instagram

Mindestens ein Bild oder Video, bis zu 10 Elemente. Ein einzelnes Video wird als Reel veröffentlicht. Standardmäßig manuelle Veröffentlichung; direkte Veröffentlichung bei Aktivierung.

TikTok

Mindestens ein Bild oder Video. Bis zu 35 Bilder oder 1 Video. Standardmäßig manuelles Posten; freigegebene Beiträge gehen in den TikTok-Posteingang des Creators oder mit TikTok postMode direct_post direkt ins Profil.

LinkedIn

Text, einzelnes Bild, einzelnes Video oder organische Multi-Bild-Beiträge mit bis zu 20 Bildern. Ziele auf das verbundene Profil oder eine verwaltete Seite.

X

Text, bis zu vier Bilder, ein GIF oder ein Video. Antwortkontrollen gelten pro Beitrag, und die Veröffentlichung wird blockiert, wenn das X-Kostenbudget des Workspace aufgebraucht ist.