Du kannst mit der Content Publishing API einzelne Bilder, Videos oder Reels (also Einzelmedien-Posts), Posts mit mehreren Bildern oder Videos (Carousel-Posts) sowie Stories auf Instagram-Business-Konten veröffentlichen.
Ab dem 1. Juli 2023 werden alle einzelnen Feed-Videos, die über die Instagram Content Publishing API veröffentlicht werden, als Reels gepostet.
Alle Anfragen müssen den Nutzer*innen-Zugriffsschlüssel des*der App-Nutzer*in enthalten.
Zum Veröffentlichen benötigst du eine Kombination aus den folgenden Berechtigungen. Die genaue Kombination hängt davon ab, welche Endpunkte von deiner App verwendet werden. In den Endpunktreferenzen findest du Informationen dazu, welche Berechtigungen jeder Endpunkt erfordert.
Wenn deine App von App-Nutzer*innen verwendet wird, die in deiner App oder in einem Unternehmen, das deine App beansprucht hat, keine Rolle haben, musst du über die App-Review für jede Berechtigung eine Genehmigung beantragen, bevor diese deiner App von App-Nutzer*innen ohne Rolle gewährt werden kann.
Wir verwenden die in Veröffentlichungsversuchen genutzten Medien in einem cURL-Befehl. Daher müssen die Medien beim Versuch auf einem öffentlich zugänglichen Server gespeichert sein.
Professionelle Instagram-Konten, die mit einer Seite verbunden sind, die Page Publishing Authorization (PPA) erfordert, können erst veröffentlicht werden, wenn die PPA abgeschlossen wurde.
Es kann sein, dass ein*e App-Nutzer*in Aufgaben auf einer Seite durchführen kann, die zunächst keine PPA erforderte, später aber schon. In diesem Fall könnte der*die App-Nutzer*in erst nach Abschluss der PPA Inhalte im professionellen Instagram-Konto veröffentlichen. Da du nicht wissen kannst, ob die Seite eines*einer App-Nutzer*in eine PPA erfordert, solltest du App-Nutzer*innen empfehlen, die PPA im Vorfeld durchzuführen.
Weitere Einschränkungen findest du in der Referenz der einzelnen Endpunkte.
Für Instagram-Konten können innerhalb von 24 Stunden maximal 50 Beiträge über die API veröffentlicht werden. Carousels zählen als Einzelbeitrag. Diese Begrenzung wird auf dem Endpunkt POST /{ig-user-id}/media_publish
durchgesetzt, wenn versucht wird, einen Mediencontainer zu veröffentlichen. Deine App sollte ebenfalls die Ratenbegrenzung für Veröffentlichungen durchsetzen. Das gilt vor allem, wenn deine App es Nutzer*innen erlaubt, die Veröffentlichung von Beiträgen für einen bestimmten Zeitpunkt zu planen.
Um die aktuelle Nutzung der Ratenbegrenzung eines Instagram-Business-Kontos zu prüfen, kannst du den Endpunkt GET /{ig-user-id}/content_publishing_limit
abfragen.
Die API besteht aus den folgenden Endpunkten: Informationen zu Nutzungsanforderungen findest du in der Referenzdokumentation zu den einzelnen Endpunkten.
POST /{ig-user-id}/media
– Lade Medien hoch und erstelle Medien-Container.POST /{ig-user-id}/media_publish
– Veröffentliche hochgeladene Medien, indem du deren Container verwendest.GET /{ig-container-id}?fields=status_code
– Prüfe Veröffentlichungsberechtigung und -status von Medien-Containern.GET /{ig-user-id}/content_publishing_limit
– Prüfe die aktuelle Nutzung der Ratenbegrenzung für Veröffentlichungen des*der App-Nutzer*in.Zum Veröffentlichen von einzelnen Bildern, Videos, Stories oder Reels sind zwei Schritte nötig:
POST /{ig-user-id}/media
einen Container aus einem auf deinem öffentlichen Server gehosteten Bild oder Video.POST /{ig-user-id}/media_publish
, um den Container zu veröffentlichen.Schritt 1 von 2: Container erstellen
Angenommen, du hast hier ein Bild gespeichert:
https://www.example.com/images/bronz-fonz.jpg
Jetzt möchtest du dieses Bild mit dem Hashtag „#BronzFonz“ als Bildunterschrift veröffentlichen. Sende eine Anfrage an den POST /{ig-user-id}/media
-Endpunkt:
POST https://graph.facebook.com/v21.0
/17841400008460056/media
?image_url=https://www.example.com/images/bronz-fonz.jpg
&caption=#BronzFonz
Damit wird eine Container-ID für das Bild zurückgegeben.
{ "id": "17889455560051444" // IG Container ID }
Schritt 2 von 2: Container veröffentlichen
Verwende den Endpunkt POST /{ig-user-id}/media_publish
, um die im vorherigen Schritt zurückgegebene Container-ID zu veröffentlichen.
POST https://graph.facebook.com/v21.0
/17841400008460056/media_publish ?creation_id=17889455560051444
{ "id": "17920238422030506" // IG Media ID }
Du kannst bis zu 10 Bilder und/oder Videos in einem einzigen Beitrag (einem Carousel-Post) veröffentlichen. Das Veröffentlichen von Carousels besteht aus drei Schritten:
POST /{ig-user-id}/media
, um einzelne Elementcontainer für jedes Bild und Video zu erstellen, die im Carousel angezeigt werden.POST /{ig-user-id}/media
erneut, um einen einzelnen Carousel-Container für die Elemente zu erstellen.POST /{ig-user-id}/media_publish
, um den Carousel-Container zu veröffentlichen.Carousel-Posts zählen als Einzelbeiträge zur Ratenbegrenzung des Kontos.
Einschränkungen
Schritt 1 von 3: Elementcontainer erstellen
Verwende den Endpunkt POST /{ig-user-id}/media
, um einen Elementcontainer für das Bild oder Video zu erstellen, das in einem Carousel angezeigt wird. Carousels dürfen jeweils bis zu 10 Bilder und/oder Videos enthalten.
POST /{ig-user-id}/media
Die folgenden Parameter sind erforderlich. Weitere unterstützte Parameter findest du in der Referenz für den Endpunkt POST /{ig-user-id}/media
.
is_carousel_item
: Setze diesen Parameter auf true
. Gibt an, ob das Bild oder Video in einem Carousel erscheint.image_url
(nur Bilder): Der Pfad zum Bild. Wir verwenden die übergebene URL deines Bilds in einem cURL-Befehl. Daher muss es auf einem öffentlichen Server gespeichert sein.media_type
(nur Videos): Setze diesen Parameter auf VIDEO
. Damit gibst du an, dass das Medienelement ein Video ist.video_url
(nur Videos): Pfad zum Video. Wir verwenden die übergebene URL deines Videos in einem cURL-Befehl. Daher muss es auf einem öffentlichen Server gespeichert sein.Wenn der Vorgang erfolgreich ist, gibt die API eine Elementcontainer-ID zurück, die beim Erstellen des Carousel-Containers verwendet werden kann.
Wiederhole diesen Vorgang für alle Bilder oder Videos, die im Carousel erscheinen sollen.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?image_url=https%3A%2F%2Fsol...&is_carousel_item=true&access_token=EAAOc..."
{ "id": "17899506308402767" }
Schritt 2 von 3: Carousel-Container erstellen
Verwende den Endpunkt POST /{ig-user-id}/media
, um einen Carousel-Container zu erstellen.
POST /{ig-user-id}/media
Die folgenden Parameter sind erforderlich. Weitere unterstützte Parameter findest du in der Referenz für den Endpunkt POST /{ig-user-id}/media
.
media_type
: Setze diesen Parameter auf CAROUSEL
. Gibt an, dass der Container für ein Carousel dient.children
: Ein Array mit bis zu 10 Container-IDs der Bilder und Videos, die im veröffentlichten Carousel erscheinen sollen. Carousels können jeweils bis zu 10 Bilder und/oder Videos enthalten.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?caption=Fruit%20candies&media_type=CAROUSEL&children=17899506308402767%2C18193870522147812%2C17853844403701904&access_token=EAAOc..."
{ "id": "18000748627392977" }
Schritt 3 von 3: Carousel-Container veröffentlichen
Verwende den Endpunkt POST /{ig-user-id}/media_publish
, um einen Carousel-Container (Carousel-Post) zu veröffentlichen. Pro Konto können innerhalb von 24 Stunden maximal 50 Beiträge veröffentlicht werden. Ein Carousel gilt dabei als einzelner Beitrag.
POST /{ig-user-id}/media_publish
Die folgenden Parameter sind erforderlich.
creation_id
: Die Carousel-Container-ID.Wenn der Vorgang erfolgreich ist, gibt die API eine IG-Medien-ID für ein Carousel-Album zurück.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."
{ "id": "90010778390276" }
Reels sind kurze Videos, die für die Anzeige auf dem Tab Reels in der Instagram-App berechtigt sind, sofern sie bestimmte Anforderungen erfüllen und von unserem Algorithmus ausgewählt werden. Befolge für das Veröffentlichen eines Reels die Schritte für das Veröffentlichen eines einzelnen Medienbeitrags und beziehe den media_type=REELS
-Parameter zusammen mit dem Pfad zum Video ein, indem du den video_url
-Parameter verwendest.
Reels sind kein neuer Medientyp, auch wenn du beim Veröffentlichen eines Reels media_type=REELS
festlegst. Wenn du ein Reel veröffentlichst und dann sein media_type
-Feld abfragst, ist der zurückgegebene Wert VIDEO
. Um festzustellen, ob ein veröffentlichtes Video als Reel eingestuft wurde, frage stattdessen sein media_product_type
-Feld ab.
Mit dem Codebeispiel auf GitHub (insta_reels_publishing_api_sample) kannst du lernen, wie du Reels auf Instagram veröffentlichst.
Als Erleichterung für Entwickler*innen hat Meta eine Sammlung aller Aufrufe an die Graph API für Instagram Reels auf der Postman API-Plattform veröffentlicht. Weitere Informationen findest du unter Postman-Sammlungen für Facebook Reels und Instagram Reels.
Weitere Informationen zu Reels findest du in der Reels-Entwicklungsdokumentation.
Aktuell können nur Business-Konten Stories mit der Content Publishing API veröffentlichen.
Stories sind Videos und Bilder, die als IG-Stories auf Instagram verfasst werden. Befolge für das Veröffentlichen einer Story dieselben Schritte wie für das Veröffentlichen eines einzelnen Medienbeitrags und beziehe den media_type=STORIES
-Parameter zusammen mit dem Pfad zum Bild bzw. Video ein, indem du den image_url
- oder video_url
-Parameter verwendest.
Hinweis: Stories stellen keinen neuen Medientyp dar, auch wenn du beim Veröffentlichen einer Story media_type=STORIES
festlegst. Wenn du ein Reel veröffentlichst und dann sein media_type
-Feld abfragst, wird der Wert IMAGE/VIDEO
zurückgegeben. Um festzustellen, ob ein veröffentlichtes Bild/Video als Story designiert wurde, frage stattdessen sein media_product_type
-Feld ab.
Das wiederaufnehmbare Uploadprotokoll ist ein neuer Vorgang für die Veröffentlichung von Instagram-Inhalten, der Video-Uploads für die media_types
Reels, Video-Stories und Video-Carousel-Elemente unterstützt.
Dieses neue Protokoll unterstützt das Erstellen von Instagram-Medien sowohl aus lokalen Videos als auch aus öffentlich gehosteten URL-Videos. Mit dem Protokoll kannst du einen Uploadvorgang für eine lokale Datei nach einer Netzwerkunterbrechung oder einem anderen Übertragungsfehler wiederaufnehmen. Bei Netzwerkfehlern spart dies Zeit und Bandbreite. Es behält die gleichen Medienspezifikationen bei.
POST https://graph.facebook.com/{api-version}/{ig-user-id}/media
: Initialisiert Container zur Videoerstellung durch „set upload_type=resumable“.POST https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}
: Lädt Videos zuverlässiger von einer lokalen Videodatei oder gehosteten URL hoch, indem das wiederaufnehmbare Uploadprotokoll verwendet wird. POST https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish
: Veröffentlicht hochgeladene Medien, indem deren Container verwendet werden.GET /{ig-container-id}?fields=status_code
: Prüft Veröffentlichungsberechtigung und -status von Medien-Containern.user_tags=[{username:’ig_user_name’}]
wird als user_tags=%5B%7Busername:ig_user_name%7D%5D
kodiert. Dabei wird [
als %5B
und {
als %7B
kodiert. Weitere Konvertierungen findest du im HTML-URL-Kodierungsstandard.curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=REELS" \ -d "upload_type=resumable" \ -d "caption={caption}"\ -d "collaborators={collaborators-username}" -d "cover_url={cover-url}" \ -d "audio_name={audio-name}" \ -d "user_tags={user-tags}" \ -d "location_id={location-id}" \ -d "thumb_offset={thumb-offset}" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=STORIES" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=VIDEO" \ -d "is_carousel_item=true" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
{ "id": "{ig-container-id}", "uri": "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" }
Die meisten Graph API-Aufrufe verwenden den Host graph.facebook.com
, Aufrufe zum Hochladen von Videos für Reels verwenden hingegen rupload.facebook.com
.
Die folgenden Dateiquellen werden für hochgeladene Videodateien unterstützt:
Lade das Video mit dem zurückgegebenen ig-container-id
eines Aufrufs einer wiederaufnehmbaren Uploadsitzung hoch.
rupload.facebook.com
lautet.media_type
) gilt der gleiche Ablauf zum Hochladen des Videos.ig-container-id
ist die zurückgegebene ID von Aufrufen einer wiederaufnehmbaren Uploadsitzung. access-token
ist derselbe Zugriffsschlüssel, der in den vorigen Schritten verwendet wird.offset
wird auf das erste hochzuladende Byte festgelegt, im Allgemeinen 0
.file_size
ist auf die Größe deiner Datei in Bytes festgelegt.Your_file_local_path
ist auf den Dateipfad deiner lokalen Datei festgelegt. Wenn du beispielsweise eine Datei aus dem Ordner Downloads unter macOS hochlädst, lautet der Pfad @Downloads/example.mov.curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "offset: 0" \ -H "file_size: Your_file_size_in_bytes" \ --data-binary "@my_video_file.mp4"
curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "file_url: https://example_hosted_video.com"
// Success Response Message { "success":true, "message":"Upload successful." } // Failure Response Message { "debug_info":{ "retriable":false, "type":"ProcessingFailedError", "message":"{\"success\":false,\"error\":{\"message\":\"unauthorized user request\"}}" } }
Du kannst den Schritten 1 und 2 erneut folgen, um mehrere ig-container-ids
zu erstellen und deren is_carousel_item
-Parameter auf true
festzulegen. Erstelle im Anschluss einen Carousel-Container, der alle Carousel-Elemente enthält. Die Carousel-Elemente können mit Bildern und Videos vermischt werden.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=CAROUSEL" \ -d "caption={caption}"\ -d "collaborators={collaborator-usernames}" \ -d "location_id={location-id}" \ -d "product_tags={product-tags}" \ -d "children=[{ig-container-id},{ig-container-id}...]" \ -H "Authorization: OAuth {access-token}"
Für Reels und Video Stories wird die in Schritt 1 erstellte {ig-container-id}
zum Veröffentlichen des Videos verwendet. Für den Carousel-Container wird die in Schritt 3 erstellte {ig-container-id}
zum Veröffentlichen des Carousel-Containers verwendet.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish" \ -d "creation_id={ig-container-id}" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
stellt einen GET
-Endpunkt bereit, um den Status des Uploads zu lesen. Das Feld video_status
enthält Details zum lokalen Uploadvorgang.
uploading_phase
zeigt an, ob die Datei erfolgreich hochgeladen wurde und wie viele Bytes übertragen wurden. processing_phase
enthält Details zum Status der Videoverarbeitung, nachdem die Videodatei hochgeladen wurde.// GET status from graph.facebook.com curl -X GET "https://graph.facebook.com/v19.0/{ig-container-id}?fields=id,status,status_code,video_status" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
// A successfully created ig container { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "complete", "bytes_transferred": 37006904 }, "processing_phase": { "status": "complete" } } } // An interrupted ig container creation, from here you can resume your upload in step 2 with offset=50002. { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "in_progress", "bytes_transferred": 50002 }, "processing_phase": { "status": "not_started" } } }
Du kannst öffentliche Instagram-Nutzer*innen in einem Bild, Carousel und Reel als Collaborator*innen hinzufügen und sie erhalten eine Einladung, als Collaborator an diesem bestimmten Medium mitzuwirken. Um Nutzer*innen in einem Bild zu markieren, befolge die obigen Schritte zu Einzelmedien-Posts. Wenn du allerdings den Mediencontainer erstellst, schließe den collaborators-Parameter und ein Array von Strings ein, die die Instagram-Namen der Nutzer*innen angeben, die du als Collaborator*innen für das Medium einladen möchtest.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &collaborators= [‘username1’,’username2’]
Du kannst die Pages Search API verwenden. Stelle sicher, dass du das Feld „location“ in deine Abfrage einbeziehst, um nach Seiten zu suchen, deren Name mit einem String übereinstimmt. Analysiere dann die Ergebnisse, um Seiten zu identifizieren, die für einen physischen Standort erstellt wurden. Wenn du beim Veröffentlichen eines Bilds oder Videos die ID einer Seite einschließt, wird das Element mit dem Standort markiert, der dieser Seite zugeordnet ist.
Damit eine Seite markiert werden kann, muss sie Standortdaten mit Breiten- und Längengraden aufweisen.
Stelle sicher, dass die gewünschte Seite Längen- und Breitengraddaten in der Antwort enthält. Wenn du versuchst, einen Container mit einer Seite zu erstellen, für die keine Standortdaten vorhanden sind, schlägt der Vorgang mit der codierten Ausnahme INSTAGRAM_PLATFORM_API__INVALID_LOCATION_ID
fehl.
Weise die Seiten-ID beim Veröffentlichen von Einzelmedien- oder Carousel-Element-Containern dem Parameter location_id
zu.
Du kannst sowohl einzelne Medien- als auch Carousel-Beiträge veröffentlichen, die mit Produkten von Instagram Shopping markiert sind. Informationen zur Vorgehensweise findest du im Leitfaden für Produktmarkierungen.
Du kannst öffentliche Instagram-Nutzer in einem Bild markieren. Sie erhalten dann eine Benachrichtigung, dass sie markiert wurden.
Um Nutzer*innen in einem Bild zu markieren, befolge die obigen Schritte zu Einzelmedien-Posts. Wenn du allerdings den Mediencontainer erstellst, schließe den user_tags
-Parameter und ein Array von Objekten ein, mit denen die Instagram-Nutzer*innen im Bild und ihre x/y-Koordinaten im Bild selbst angegeben werden.
Hinweis: Nutzer*innenmarkierungen werden für Videomedien in Carousels nicht unterstützt.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &user_tags= [ { username:'kevinhart4real', x: 0.5, y: 0.8 }, { username:'therock', x: 0.3, y: 0.2 } ]
Damit erhältst du eine Container-ID, die du dann mit dem Endpunkt IG-Nutzermedienveröffentlichung veröffentlichst.
user_tags
-Wert muss ein Array von Objekten sein, die mit JSON formatiert sind.username
, x
und y
) enthalten.x
- und y
-Werte müssen float
-Zahlen mit Ursprung in der oberen linken Ecke des Bilds sein und im Bereich zwischen 0.0
und 1.0
liegen.Wenn du einen Container für ein Video erstellen kannst, der POST /{ig-user-id}/media_publish
-Endpunkt die veröffentlichte Medien-ID aber nicht zurückgibt, kannst du den Veröffentlichungsstatus des Containers durch eine Abfrage des GET /{ig-container-id}?fields=status_code
-Endpunkts abrufen. Dieser Endpunkt gibt einen der folgenden Werte zurück:
EXPIRED
: Der Container wurde innerhalb von 24 Stunden nicht veröffentlicht und ist abgelaufen.ERROR
: Der Container konnte den Veröffentlichungsprozess nicht abschließen.FINISHED
: Der Container und sein Medienobjekt sind für die Veröffentlichung bereit.IN_PROGRESS
: Der Container befindet sich noch im Veröffentlichungsprozess.PUBLISHED
: Das Medienobjekt des Containers wurde veröffentlicht.Wir empfehlen, den Status eines Containers maximal fünf Minuten lang einmal pro Minute abzufragen.
Weitere Informationen findest du in den Referenzen zu Fehlercodes.