Auf Instagram über die API zu veröffentlichen ist ein zweistufiger Aufruf: einen Media-Container mit POST /<IG_ID>/media erstellen, dann mit POST /<IG_ID>/media_publish veröffentlichen. Die schwierigen Teile sind nicht die Aufrufe. Es sind die Kontoanforderungen, Metas App-Review und die Tatsache, dass eine 200er-Antwort beim Container-Schritt nicht bedeutet, dass bereits etwas live ist.
Dies richtet sich an Entwickler, die entscheiden, ob sie das inhouse bauen.
Was kann die Instagram-API tatsächlich veröffentlichen?
Metas Dokumentation zum Content Publishing listet vier media_type-Werte für Container: VIDEO, REELS, STORIES und CAROUSEL. Ein einfaches Einzelbild ist die Standardeinstellung, wenn Sie image_url ohne media_type übergeben.
| Format | Unterstützt | Anmerkungen aus der Dokumentation |
|---|---|---|
| Einzelbild | Ja | JPEG, übergeben als öffentliche image_url |
| Video / Reels | Ja | media_type=REELS mit video_url |
| Storys | Ja | media_type=STORIES |
| Karussell | Ja | Bis zu 10 Bilder, Videos oder eine Mischung |
Zwei Dinge überraschen. Erstens: Storys können veröffentlicht werden, aber wenn Sie eine veröffentlichte Story auslesen, liefert media_type IMAGE oder VIDEO zurück, Sie müssen also media_product_type abfragen, um zu erfahren, was es wirklich ist. Zweitens: Karussellbilder werden alle an das erste Bild angepasst, standardmäßig 1:1, Ihre Zuschnittentscheidungen werden also für Sie getroffen.
Die wichtigste Lücke ist kein Format. Es ist das Konto. Veröffentlichung erfordert ein professionelles Instagram-Konto (Business oder Creator), verknüpft mit einer Facebook-Seite, mit erteilten Berechtigungen instagram_basic, instagram_content_publish und pages_read_engagement. Auf ein persönliches Instagram-Konto kann über die API überhaupt nicht veröffentlicht werden, egal was Ihr Code tut. Wenn Ihre Nutzer Creator mit persönlichen Konten sind, ist die Integration tot, bevor Sie eine Zeile schreiben.
Hinweis: Die hier genannten Angaben wurden im September 2026 anhand von Metas Dokumentation zum Instagram Platform Content Publishing geprüft. Plattformen ändern diese ohne Vorankündigung.
Wie funktioniert die Authentifizierung, und wie lange dauert das App-Review?
Sie erhalten einen Nutzer-Zugriffstoken über Facebook Login, tauschen dann den kurzlebigen Token serverseitig gegen einen langlebigen über GET oauth/access_token mit grant_type=fb_exchange_token. Meta dokumentiert den langlebigen Nutzertoken als etwa 60 Tage gültig. Die automatische Erneuerung, die Meta beschreibt, gilt für SDK-verwaltete Token, wenn Sie Token selbst tauschen, brauchen Sie also einen eigenen Erneuerungs- oder Re-Auth-Pfad vor Tag 60.
App-Review ist für die Veröffentlichungsberechtigungen erforderlich, bevor jemand außerhalb Ihrer eigenen App-Rollen die Integration nutzen kann. Meta veröffentlicht in dieser Entwicklerdokumentation keine garantierte Bearbeitungszeit für das Review, behandeln Sie die Dauer also als unbekannt und planen Sie mindestens eine Ablehnungsrunde ein. Screencasts sind Teil der Einreichung, das heißt, Sie brauchen eine funktionierende Demo, bevor Sie die Genehmigung erhalten, auf einer App, die noch keine echten Nutzer bedienen darf.
Wie sieht die Aufrufreihenfolge für die Veröffentlichung aus?
- Laden Sie Ihre Medien an einen öffentlich erreichbaren Ort. Meta ruft sie per URL ab, eine signierte URL, die nach 60 Sekunden abläuft, schlägt also fehl.
POST /<IG_ID>/mediamitimage_urlodervideo_url,captionundmedia_type, falls es kein reines Bild ist. Sie erhalten eine Container-ID zurück.- Fragen Sie
GET /<IG_CONTAINER_ID>?fields=status_codeab, bis der StatusFINISHEDlautet. Meta empfiehlt, einmal pro Minute abzufragen, höchstens fünf Minuten lang. POST /<IG_ID>/media_publishmitcreation_idauf die Container-ID gesetzt.- Speichern Sie die zurückgegebene Media-ID. Diese, nicht die Container-ID, ist der veröffentlichte Beitrag.
# 1. create the container
curl -X POST "https://graph.facebook.com/v23.0/$IG_ID/media" \
-d "image_url=https://example.com/photo.jpg" \
-d "caption=Ship it." \
-d "access_token=$TOKEN"
# -> {"id":"17889455560051444"}
# 2. poll until FINISHED
curl "https://graph.facebook.com/v23.0/17889455560051444?fields=status_code&access_token=$TOKEN"
# 3. publish
curl -X POST "https://graph.facebook.com/v23.0/$IG_ID/media_publish" \
-d "creation_id=17889455560051444" -d "access_token=$TOKEN"
Der Container-status_code kann IN_PROGRESS, FINISHED, ERROR, EXPIRED oder PUBLISHED sein. EXPIRED bedeutet, der Container wurde nicht innerhalb von 24 Stunden veröffentlicht. Für ein Karussell erstellen Sie einen Container pro Element mit is_carousel_item=true, dann einen übergeordneten Container mit media_type=CAROUSEL und einer durch Kommas getrennten children-Liste.
Wie sehen die Ratenlimits aus?
Das dokumentierte Veröffentlichungslimit ist eindeutig: Instagram-Konten sind auf 100 über die API veröffentlichte Beiträge innerhalb eines gleitenden 24-Stunden-Zeitraums begrenzt, und ein Karussell zählt als ein Beitrag. Sie können die aktuelle Nutzung über GET /<IG_ID>/content_publishing_limit auslesen, statt zu raten, was Sie vor einem Massenlauf tun sollten.
Das ist ein gleitendes Fenster, kein Kalendertag. Wenn Sie um 15 Uhr 100 Beiträge verbrauchen, bekommen Sie um Mitternacht kein frisches Kontingent. Jede Warteschlange, die Sie bauen, muss das Fenster modellieren, nicht einen Tageszähler.
Hinweis: Die hier genannten Angaben wurden im September 2026 anhand von Metas Dokumentation zum Instagram Platform Content Publishing geprüft. Plattformen ändern diese ohne Vorankündigung.
Was wird Sie tatsächlich drei Wochen kosten?
Nicht die beiden API-Aufrufe. Diese vier Dinge:
App-Review. Sie können nicht live gehen, bevor Meta instagram_content_publish genehmigt, und Sie können nicht sauber demonstrieren, bevor Sie das Ganze gebaut haben. Planen Sie eine erneute Einreichung ein.
Token-Erneuerung. Sechzig Tage gültige langlebige Token bedeuten einen Hintergrundjob, einen Fehlerzustand in Ihrer Oberfläche für „dieses Konto muss erneut verbunden werden” und eine E-Mail an den Nutzer, bevor der Token abläuft, nicht danach. Überspringen Sie das, und jede Integration hört zwei Monate nach dem Start still auf zu funktionieren.
Medien-Hosting und Formatanforderungen. Meta ruft Medien von Ihrer URL ab. Das bedeutet öffentliches Hosting, korrekte Content-Types und Transcodierung in das, was Instagram akzeptiert. Einzelbilder sind JPEG. Video muss Instagrams eigenen Verarbeitungsschritt überstehen, der stattfindet, nachdem Ihr Aufruf zurückkehrt.
Asynchrone Fehlerbehandlung. Eine 200er-Antwort beim Container-Aufruf bedeutet, dass Meta einen Job angenommen hat. Der Beitrag kann während der Verarbeitung trotzdem fehlschlagen, und Sie erfahren es nur, indem Sie status_code abfragen und ERROR sehen. Wenn Ihr Datenmodell nur „veröffentlicht” und „fehlgeschlagen” kennt, melden Sie Erfolg für Beiträge, die nie erschienen sind. Modellieren Sie einen processing-Zustand und eine echte abschließende Prüfung, wie in unserem Leitfaden zur Social-Media-Scheduling-API beschrieben.
Und dann multiplizieren Sie das. Reels und Storys haben ihre eigenen Eigenheiten, und wenn Sie auch TikTok oder LinkedIn wollen, fangen Sie mit einem anderen Auth-Modell, einem anderen Upload-Ablauf und einem anderen Review-Prozess von vorne an.
Kurzfassung
- Zwei Aufrufe: Container erstellen, dann
media_publish. Dazwischenstatus_codeabfragen. - Erfordert ein professionelles Instagram-Konto, verknüpft mit einer Facebook-Seite.
- 100 über die API veröffentlichte Beiträge pro gleitenden 24-Stunden-Zeitraum;
content_publishing_limitprüfen. - Langlebige Token gelten etwa 60 Tage. Bauen Sie die Erneuerung vor dem Start.
- App-Review ist verpflichtend, und seine Dauer wird in der Dokumentation nicht veröffentlicht.
Wenn Sie beim Bauen Bildunterschriften entwerfen, zeigt der kostenlose Instagram-Zeichenzähler, wo die Kürzung ansetzt.
Das einmal statt pro Plattform erledigen
Die Alternative dazu, das pro Netzwerk zu schreiben, ist eine API, die bereits die Token, die Container, das Abfragen und die Wiederholungen verwaltet. BulkPublish veröffentlicht über eine einzige REST-API und ein SDK auf 15 Plattformen, sodass ein Instagram-Beitrag und ein LinkedIn-Beitrag derselbe Aufruf mit einer anderen Kanal-ID sind. Token-Erneuerung, das gleitende Fensterlimit und die asynchrone Statusprüfung übernehmen wir, und ein Beitrag, der auf einer Plattform fehlschlägt, wird als partial gemeldet statt als falscher Erfolg. Die Referenz finden Sie unter /de/developers/ und die REST-Integrationsseite unter /de/integrations/rest-api/.