コンテンツ公開APIを使えば、Instagramプロアカウントで、1つの画像、動画、リール動画(単一メディア投稿)、複数の画像や動画が含まれる投稿(カルーセル投稿)を公開することができます。
2023年7月1日より、Instagramコンテンツ公開APIを通じて公開された単一フィード動画はすべてリールとしてシェアされます。
すべてのリクエストに、アプリユーザーのユーザーアクセストークンを含めることが必要です。
公開は、次のアクセス許可の組み合わせに依存しています。厳密な組み合わせは、アプリがどのエンドポイントを使用するかによって異なります。各エンドポイントの必要なアクセス許可を確認するには、エンドポイントのリファレンスをご覧ください。
アプリに対する権限も、アプリを取得したビジネスでの権限も持たないアプリユーザーがアプリを使用する場合、まずアプリレビューにより各アクセス許可の承認をリクエストして、権限のないアプリユーザーがそれらの許可をアプリに付与できるようにしなければなりません。
公開試行の際に使用されるメディアにcURLが付けられるため、メディアは公開試行の時点で公開アクセス可能なサーバー上でホスティングされていなければなりません。
ページ公開認証(PPA)を必要とするページにリンクしているInstagramプロアカウントは、PPAが完了するまで公開できません。
最初はPPAが必要でないものの後になってPPAが必要になるページで、アプリユーザーがタスクを実行できる場合があります。その場合、アプリユーザーは、PPAが完了するまでコンテンツをInstagramプロアカウントに公開できません。アプリユーザーのページにPPAが必要かどうかを確認する方法はないため、事前にPPAを完了しておくようアプリユーザーに促すことをおすすめします。
その他の制限については、各エンドポイントのリファレンスをご覧ください。
InstagramアカウントのAPI公開投稿は、24時間以内で50件までに制限されます。カルーセルは1件の投稿としてカウントされます。この制限は、POST /{ig-user-id}/media_publish
エンドポイントでメディアコンテナを公開しようとする際に適用されます。アプリでも公開レート制限を適用することをおすすめします(特に、ユーザーが投稿の公開をスケジュール設定できるようにしているアプリの場合)。
Instagramプロアカウントの現在のレート制限使用率を確認するには、GET /{ig-user-id}/content_publishing_limit
エンドポイントをクエリします。
このAPIは次のエンドポイントで構成されています。使用要件については、各エンドポイントのリファレンスドキュメントを参照してください。
POST /{ig-user-id}/media
— メディアをアップロードし、メディアコンテナを作成します。POST /{ig-user-id}/media_publish
— アップロードされたメディアを、対応するメディアコンテナを使用して公開します。GET /{ig-container-id}?fields=status_code
— メディアコンテナが公開の対象かどうか、またそのステータスを確認します。GET /{ig-user-id}/content_publishing_limit
— アプリユーザーの現在の公開レート制限の使用率をチェックします。単一の画像、動画、ストーリーズ、リール動画の公開は、2ステップの処理です。
POST /{ig-user-id}/media
エンドポイントを使って、公開サーバーでホスティングされている画像または動画を含むコンテナを作成します。POST /{ig-user-id}/media_publish
エンドポイントを使用してそのコンテナを公開します。ステップ1/2: コンテナを作成する
画像が次の場所にあるとします。
https://www.example.com/images/bronz-fonz.jpg
キャプションとしてハッシュタグ「#BronzFonz」を付けて公開するとします。POST /{ig-user-id}/media
エンドポイントにリクエストを送信します。
POST https://graph.facebook.com/v21.0
/17841400008460056/media
?image_url=https://www.example.com/images/bronz-fonz.jpg
&caption=#BronzFonz
画像のコンテナIDが返されます。
{ "id": "17889455560051444" // IG Container ID }
ステップ2/2: コンテナを公開する
前のステップで返されたコンテナIDを、POST /{ig-user-id}/media_publish
エンドポイントを使用して公開します。
POST https://graph.facebook.com/v21.0
/17841400008460056/media_publish ?creation_id=17889455560051444
{ "id": "17920238422030506" // IG Media ID }
1回の投稿で画像、動画、またはそれらのミックス(カルーセル投稿)を10個まで公開できます。カルーセルの公開は、3ステップのプロセスです。
POST /{ig-user-id}/media
エンドポイントを使って、カルーセルに表示される各画像と各動画のアイテムコンテナを個別に作成します。POST /{ig-user-id}/media
エンドポイントを使って、これらのアイテムのカルーセルコンテナを1つ作成します。POST /{ig-user-id}/media_publish
エンドポイントを使って、カルーセルコンテナを公開します。カルーセル投稿は、アカウントのレート制限において1件の投稿としてカウントされます。
制限
ステップ1/3: アイテムコンテナを作成する
POST /{ig-user-id}/media
エンドポイントを使って、カルーセルに表示される画像や動画のアイテムコンテナを作成します。カルーセルには最大10件の画像、動画、またはこれら2つのミックスを含めることができます。
POST /{ig-user-id}/media
以下のパラメーターは必須です。サポートされるその他のパラメーターについては、POST /{ig-user-id}/media
エンドポイントのリファレンスをご覧ください。
is_carousel_item
— true
に設定します。画像または動画がカルーセル内に表示されることを示します。image_url
— (画像のみ)画像へのパス。渡されたURLを使用して画像にcURLを付けます。そのため、公開サーバー上のパスでなければなりません。media_type
— (動画のみ) VIDEO
に設定されます。メディアが動画であることを示します。video_url
— (動画のみ)動画へのパス。渡されたURLを使用して動画にcURLを付けるので、このパスは公開サーバー上のパスでなければなりません。処理が成功すると、APIからアイテムコンテナIDが返されます。カルーセルコンテナ作成時にそれを使うことができます。
カルーセルに表示する画像や動画ごとに、この処理を繰り返します。
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" }
ステップ2/3: カルーセルコンテナを作成する
POST /{ig-user-id}/media
エンドポイントを使って、カルーセルコンテナを作成します。
POST /{ig-user-id}/media
以下のパラメーターは必須です。サポートされるその他のパラメーターについては、POST /{ig-user-id}/media
エンドポイントのリファレンスをご覧ください。
media_type
— CAROUSEL
に設定されます。コンテナの対象がカルーセルであることを示します。children
— 公開されたカルーセルに表示される各画像と各動画の最大10個のコンテナIDの配列。カルーセルには最大10件の画像、動画、またはそれら2つのミックスを使用できます。
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" }
ステップ3/3: カルーセルコンテナを公開する
POST /{ig-user-id}/media_publish
エンドポイントを使って、カルーセルコンテナを公開します(カルーセル投稿)。アカウントには、公開投稿は24時間以内に50件までという制限があります。カルーセルの公開は1件の投稿としてカウントされます。
POST /{ig-user-id}/media_publish
以下のパラメーターは必須です。
creation_id
— カルーセルコンテナID。操作が成功すると、APIからカルーセルアルバムIGメディアIDが返されます。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."
{ "id": "90010778390276" }
リールとは、特定の仕様を満たし、当社のアルゴリズムで選択された場合に、Instagramアプリの[リール]タブに表示できる短い形式の動画のことです。リール動画を公開する手順は、単一メディア投稿の公開手順と同じですが、video_url
パラメーターを使う動画へのパスと共にmedia_type=REELS
パラメーターを指定してください。
リール動画の公開時にmedia_type=REELS
を設定するとはいえ、リールは新しいメディアタイプというわけではありません。リール動画を公開し、次にその動画のmedia_type
フィールドをリクエストした場合、返される値はVIDEO
になります。公開された動画がリールとして指定されているかどうかを判断するには、代わりにmedia_product_type
フィールドをリクエストします。
GitHubにあるコードサンプル(insta_reels_publishing_api_sample)を使用して、Instagramにリールを公開する方法を学べます。
開発者にとってより便利になるように、MetaはPostman APIプラットフォームでInstagramリールを公開するための、フルセットのグラフAPI呼び出を公開しています。詳細は、FacebookリールとInstagramリールのPostmanコレクションをご覧ください。
リールについて詳しくは、リール開発者向けのドキュメントをご覧ください。
現時点では、Content Publishing APIを使用してストーリーズを公開できるのはビジネスアカウントのみです。
ストーリーズとは、Instagram上にIGストーリーズとして投稿される動画や画像のことです。ストーリーズを公開する手順は、単一メディア投稿の公開手順と同じですが、media_type=STORIES
パラメーターを指定し、image_url
パラメーターかvideo_url
パラメーターを使って画像/動画へのパスを指定します。
注: ストーリーズの公開時にmedia_type=STORIES
を設定するとはいえ、ストーリーズは新しいメディアタイプというわけではありません。ストーリーズを公開し、次にその動画のmedia_type
フィールドをリクエストした場合、値はIMAGE/VIDEO
として返されます。公開済みの画像/動画がストーリーズとして指定されているかどうかを判断するには、代わりにそのmedia_product_type
フィールドをリクエストしてください。
再開可能なアップロードプロトコルはInstagramコンテンツを公開するための新しいフローであり、リール、動画ストーリーズ、動画カルーセルアイテムmedia_types
の動画アップロードをサポートします。
この新しいプロトコルは、ローカル動画と公開ホストURL動画の両方から、Instagramメディアの作成をサポートしています。このプロトコルにより、ネットワーク中断やその他の送信失敗の後、ローカルファイルのアップロード操作を再開できるようになるため、ネットワークの失敗時に時間と帯域幅が節約されます。また、同じメディア仕様を保持しています。
POST https://graph.facebook.com/{api-version}/{ig-user-id}/media
— set upload_type=resumableで動画作成コンテナを初期化します。POST https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}
— 再開可能なアップロードプロトコルを使用して、ローカル動画ファイルまたはホストされたURLから動画をより信頼性の高い方法でアップロードします。 POST https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish
— アップロードされたメディアを、そのメディアコンテナを使って公開します。GET /{ig-container-id}?fields=status_code
— メディアコンテナの公開の可否とステータスをチェックします。user_tags=[{username:’ig_user_name’}]
はuser_tags=%5B%7Busername:ig_user_name%7D%5D
にエンコードされます。この場合、[
は%5B
に、{
は%7B
にそれぞれエンコードされます。その他の変換については、HTML URLエンコーディング標準を参照してください。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}" }
ほとんどのグラフAPI呼び出しはgraph.facebook.com
ホストを使用しますが、リール用の動画をアップロードする呼び出しはrupload.facebook.com
を使用します。
アップロードされた動画ファイルでは、次のファイルソースがサポートされています。
再開可能なアップロードセッション呼び出しから返されたig-container-id
で動画をアップロードします。
rupload.facebook.com
であることを確認してください。media_type
は、同じフローを共有して動画をアップロードします。ig-container-id
は、再開可能なアップロードセッション呼び出しから返されたIDです。 access-token
は、前のステップで使われているものと同じです。offset
は、アップロードされる最初のバイトに設定され、通常は0
です。file_size
は、バイト単位でファイルのサイズに設定されます。Your_file_local_path
は、ローカルファイルのファイルパスに設定されます。例えば、macOSでDownloadsフォルダーからファイルをアップロードする場合、パスは@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\"}}" } }
ステップ1と2を再度実行して、is_carousel_item
パラメーターがtrue
に設定された複数のig-container-ids
を作成することができます。次に、カルーセルコンテナを作成してすべてのカルーセルアイテムを含めます。カルーセルアイテムは画像や動画とミックスできます。
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}"
リールと動画ストーリーズの場合、ステップ1で作成した{ig-container-id}
を使用して動画を公開します。カルーセルコンテナの場合、ステップ3で作成した{ig-container-id}
を使用してカルーセルコンテナを公開します。
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
は、アップロードのステータスを読み取るためのGET
エンドポイントを提供します。video_status
フィールドには、ローカルアップロードプロセスの詳細が含まれています。
uploading_phase
は、ファイルのアップロードに成功したかどうかに加えて、何バイト転送されたかを示します。 processing_phase
には、動画ファイルがアップロードされた後の動画処理のステータスに関する詳細が含まれています。// 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" } } }
画像、カルーセル、リール動画にInstagramの公開ユーザーをコラボレーターとして追加することができます。コラボレーターには、その特定のメディアのコラボレーターになるための招待が送られます。画像の中でユーザーをタグ付けするには、上記の単一メディア投稿の手順に従いますが、メディアコンテナを作成する際には、コラボレーターパラメーターと、メディアのコラボレーターとして招待したいユーザーのInstagramユーザー名を示す文字列の配列を含めてください。
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &collaborators= [‘username1’,’username2’]
ページ検索APIを使用できます。検索文字列と一致する名前のページを検索するには、クエリに必ず`location`フィールドを含めてください。その後、結果を解析して、所在地向けに作成されたページを特定します。画像または動画を公開する際にページのIDを含めると、そのページに関連付けられた位置情報がタグ付けされます。
タグ付けを利用するには、ページに緯度と経度の位置データが必要です。
使用するページの応答に緯度と経度のデータがあることを確認してください。位置情報データがないページを使ってコンテナを作成しようとすると、コード化された例外INSTAGRAM_PLATFORM_API__INVALID_LOCATION_ID
で失敗します。
ページIDを取得したら、それを、単一メディアまたはカルーセルアイテムのコンテナを公開するときのlocation_id
パラメーターに代入します。
単一メディアの投稿と、Instagramショッピングの商品をタグ付けしたカルーセル投稿の両方を公開することができます。方法については、製品のタグ付けガイドを参照してください。
画像の中で公開Instagramユーザーをタグ付けすることができます。タグ付けされるとそれらのユーザーに通知が送られます。
画像の中でユーザーをタグ付けするには、上記の単一メディア投稿の手順に従いますが、メディアコンテナを作成する際に、user_tags
パラメーターと、画像の中のInstagramユーザーを指すオブジェクトの配列、および画像内自体のx/y座標を含めます。
注: ユーザータグは、カルーセル内の動画メディアではサポートされません。
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 } ]
コンテナIDが返されます。それを、IGユーザーメディア公開エンドポイントを使って公開します。
user_tags
値は、JSON形式のオブジェクトの配列でなければなりません。username
、x
、y
)すべてを含める必要があります。x
値とy
値は、画像の左上を起点とするfloat
数値で、範囲は0.0
–1.0
です。動画のコンテナを作成できるのに、POST /{ig-user-id}/media_publish
エンドポイントが公開されたメディアIDを返さない場合、GET /{ig-container-id}?fields=status_code
エンドポイントをクエリしてコンテナの公開ステータスを取得できます。このエンドポイントは次のいずれかを返します。
EXPIRED
— コンテナは24時間以内に公開されず、有効期限が切れています。ERROR
— コンテナは、公開処理を完了できませんでした。FINISHED
— コンテナとそのメディアオブジェクトは公開の準備ができています。IN_PROGRESS
— コンテナは、まだ公開処理中です。PUBLISHED
— コンテナのメディアオブジェクトは公開済みです。コンテナのステータスを5分間程度、毎分クエリすることをおすすめします。
エラーコードのリファレンスをご覧ください。