なぜAPIでInstagram投稿を自動化するのか
Instagramアプリで手動投稿した経験があれば、その手順はご存知でしょう: アプリを開き、ファイルを選び、キャプションを書き、ハッシュタグを追加し、ユーザーをタグ付けし、カバー画像を選び、やっと公開ボタンを押します。これを複数のクライアントアカウントで1日5投稿分繰り返すことを想像してみてください。
Instagramプラットフォームページでは、Upload-PostがInstagramで何をサポートしているかを詳しく説明しています。要約すると、1つのソーシャルメディアAPIエンドポイントでリール、写真、カルーセル(マルチ画像投稿)を投稿できます。Facebookアプリの審査、トークンの更新、Graph APIの複雑さは不要です。
Instagramでは API経由で24時間あたり最大50件のアップロードが可能で、ほとんどのユースケースには十分です。追加のプラットフォームに同時投稿する必要がある場合は、すべてのプラットフォームへの同時投稿の方法をご覧ください。
API経由でInstagramリールを投稿する
リールはInstagramの主要なコンテンツフォーマットです。動画をリールとして投稿するには、アップロードエンドポイントにPOSTリクエストを送信し、media_typeをREELSに設定します。share_modeを使ってリールのフィードでの表示方法も制御できます。
curl -X POST https://api.upload-post.com/api/upload \
-H "認可: Apikey your-api-key-here" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Behind the scenes of our new product launch" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "share_mode=FEED_AND_REELS" \
-F "audio_name=Original Audio" \
-F "cover_url=https://example.com/cover.jpg" 各Instagram固有パラメータの説明:
media_type=REELSは、Instagramに通常のフィード動画ではなくリールとして扱うよう指示します。share_mode=FEED_AND_REELSはリールタブとメインフィードの両方に公開します。フィードグリッドに表示したくない場合はREELS_ONLYを使用してください。audio_nameはリールで視聴者に表示される埋め込みオーディオトラックの名前を設定します。cover_urlはカスタムカバー画像を指定します。指定しない場合、Instagramが動画からフレームを選択します。
アップロードが成功すると、ジョブIDとプラットフォームのステータスが返されます:
{
"success": true,
"job_id": "job_reel_abc123",
"platforms": {
"instagram": {
"status": "processing",
"user": "mybrand"
}
}
} share_modeの代わりにshare_to_feed=trueまたはshare_to_feed=falseも使用できます。どちらも同じ結果になります。thumb_offsetを使えば、動画の特定のフレームをサムネイルとして選択できます(値はミリ秒)。
写真とカルーセルを投稿する
単一の写真やカルーセル(マルチ画像)投稿には、/api/upload_photosエンドポイントを使用します。photos[]パラメータで複数のファイルをアップロードすると、自動的にカルーセルが作成されます。
curl -X POST https://api.upload-post.com/api/upload_photos \
-H "認可: Apikey your-api-key-here" \
-F "photos[][email protected]" \
-F "photos[][email protected]" \
-F "photos[][email protected]" \
-F "user=mybrand" \
-F "title=Our top 3 product picks this month" \
-F "platform[]=instagram" \
-F "instagram_first_comment=#productpicks #trending #shopnow" photos[]に複数のファイルを送信すると、Instagramがカルーセル投稿を作成します。ユーザーはアップロードした順番で画像をスワイプして閲覧します。1つのファイルの場合は標準的な写真投稿になります。Instagramはカルーセルあたり最大10枚の画像をサポートしています。
同じコンテンツを複数のプラットフォームに同時投稿する際に、Instagram固有のキャプションを設定するにはinstagram_titleを使用できます。Instagramのキャプションに他のプラットフォームとは異なるハッシュタグやメンションが必要な場合に便利です。
ファーストコメントの自動投稿
instagram_first_commentパラメータは、投稿が公開された直後に自動的にコメントを追加します。これは最も人気のあるInstagram戦略の1つで、キャプションをすっきりと保ち、すべてのハッシュタグをファーストコメントに移動するというものです。
curl -X POST https://api.upload-post.com/api/upload \
-H "認可: Apikey your-api-key-here" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Quick tutorial: how to use our app" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "instagram_first_comment=#tutorial #howto #apptips #tech #productdemo" なぜキャプションにハッシュタグを入れるのではなくファーストコメントを使うのでしょうか? Instagramのアルゴリズムは、ファーストコメントのハッシュタグをキャプションのハッシュタグと同じように発見性のために処理しますが、キャプションがすっきりと見えます。多くのブランドやクリエイターがこのアプローチを好むのは、ハッシュタグの羅列ではなくメッセージに視覚的にフォーカスできるからです。
コラボレーターとユーザータグを使用する
Instagramのコラボ投稿では、2つのアカウントが1つのコンテンツを共同で作成できます。投稿は両方のプロフィールに表示され、エンゲージメント(いいね、コメント、シェア)が共有されます。collaboratorsパラメータを使ってコラボレーターを招待してください。
curl -X POST https://api.upload-post.com/api/upload \
-H "認可: Apikey your-api-key-here" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Excited to announce our partnership with @partneraccount" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "collaborators=partneraccount,otheraccount" \
-F "user_tags=partneraccount,photographer_jane" \
-F "location_id=123456789" collaboratorsはInstagramユーザー名のカンマ区切りリストを受け取ります。招待されたユーザーにはコラボレーションを承認する通知が届きます。user_tagsは投稿自体にユーザーをタグ付けします。アプリで写真にユーザーをタグ付けするのと同様です。location_idは投稿に位置情報を付与します。位置IDはInstagramの位置検索またはFacebook Places APIで見つけることができます。
Instagram投稿をスケジュールする
任意のアップロードリクエストにscheduled_dateを追加して、未来の時間に公開します。日時はISO-8601形式で、オプションでtimezoneを指定できます。
curl -X POST https://api.upload-post.com/api/upload \
-H "認可: Apikey your-api-key-here" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Good morning! New content dropping today." \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "scheduled_date=2025-09-15T09:00:00Z" \
-F "timezone=America/New_York"
特定の日時の代わりにadd_to_queue=trueも使用できます。キューシステムは設定済みのスケジュールに基づいて次の空き時間スロットを選択するため、時間を手動で選ばずにコンテンツを一括アップロードするのに最適です。キューの設定、スケジュール済み投稿の編集、コンテンツカレンダーの管理については、スケジューリングガイドの全文をご覧ください。
Pythonで自動化する
公式Python SDKを使えば、自動化スクリプトの構築が簡単です。pip install upload-postでインストールし、UploadPostClientを使ってAPIとやり取りします。完全なウォークスルーについては、Python自動化ガイドをご覧ください。
以下は、リールの投稿、写真カルーセルのアップロード、1週間分のコンテンツのスケジュールを行う完全なスクリプトです:
from upload_post import UploadPostClient
from datetime import datetime, timedelta
client = UploadPostClient(api_key="your-api-key-here")
# 1. Post a Reel immediately
reel_response = client.upload_video(
video_path="/path/to/reel.mp4",
title="新製品のウォークスルー",
user="mybrand",
platforms=["instagram"],
media_type="REELS",
share_mode="FEED_AND_REELS",
instagram_first_comment="#newproduct #walkthrough #tech"
)
print(f"リールがアップロードされました: {reel_response['job_id']}")
# 2. Post a carousel of photos
carousel_response = client.upload_photos(
photo_paths=[
"/path/to/photo1.jpg",
"/path/to/photo2.jpg",
"/path/to/photo3.jpg"
],
title="三つの角度、一つの製品。",
user="mybrand",
platforms=["instagram"],
collaborators="partneraccount"
)
print(f"カルーセルがアップロードされました: {carousel_response['job_id']}")
# 3. Schedule Reels for the next 7 days
videos = [
"monday.mp4", "tuesday.mp4", "wednesday.mp4",
"thursday.mp4", "friday.mp4", "saturday.mp4", "sunday.mp4"
]
for i, video in enumerate(videos):
publish_date = (datetime.now() + timedelta(days=i + 1)).replace(
hour=10, minute=0, second=0, microsecond=0
)
response = client.upload_video(
video_path=f"/path/to/{video}",
title=f"Day {i + 1} of our launch week series",
user="mybrand",
platforms=["instagram"],
media_type="REELS",
scheduled_date=publish_date.isoformat(),
timezone="Europe/Madrid"
)
print(f"Scheduled {video} for {publish_date}: {response['job_id']}")
このスクリプトは、マドリード時間の午前10時に1週間分のリールを1日1本ずつスケジュールします。hour、timezone、ファイルパスをワークフローに合わせて調整してください。一括アップロードの場合は、ディレクトリやCSVファイルから動画パスを読み込んで同じ方法でループ処理できます。
ノーコード自動化: n8nとMake.com
コードよりもビジュアルワークフローを好む場合、n8nとMake.comの両方がUpload-Postとすぐに連携できます。
n8n
n8nはオープンソースのワークフロー自動化ツールです。HTTP Requestノードを使ってUpload-Post APIを呼び出せます。Google Driveから動画ファイルを読み込み、Google Sheetsからキャプションを追加し、自動的にリールとして投稿するInstagramリール用n8nテンプレートを用意しています。その他のセットアップはn8nテンプレート一覧をご覧ください。
Make.com
Make.com(旧Integromat)はシナリオベースのアプローチを使用します。HTTPモジュールを追加し、Upload-Postエンドポイントとアプリキーを設定して、任意のトリガーに接続します: Google Sheetsの新しい行、Dropboxの新しいファイル、スケジュールタイマーなど。結果はコードを書くのと同じですが、ドラッグ&ドロップのインターフェースで操作できます。
両ツールともスケジューリングパラメータ(scheduled_date、add_to_queue)をサポートしているため、ターミナルに触れずに完全なInstagramコンテンツカレンダーを構築できます。
Instagramコンテンツの要件
Upload-Postは可能な限りコンテンツを自動的に適応させます(内蔵のFFmpeg APIを使用)が、品質を最適化するためにInstagramの要件を知っておくと便利です。
| フォーマット | 仕様 | 詳細 |
|---|---|---|
| 動画(リール) | 最大ファイルサイズ | 1 GB |
| フォーマット | MP4, MOV | |
| アスペクト比 | 9:16推奨、1:1および4:5サポート | |
| 動画の長さ | 3秒から15分 | |
| 解像度 | 1080x1920推奨 | |
| 写真 | 最大ファイルサイズ | 8 MB |
| フォーマット | JPEG、PNG | |
| アスペクト比 | 1:1, 4:5, 1.91:1 | |
| 最大解像度 | 1440x1440(正方形)、1080x1350(縦型) | |
| カルーセル | 最大画像数 | 1投稿あたり10枚 |
| 混合メディア | 写真と動画を組み合わせ可能 |
よくある質問
Instagram個人アカウントでも使えますか?
いいえ。InstagramのAPIはビジネスアカウントとクリエイターアカウントのみをサポートしています。個人アカウントは公式APIからアクセスできません。ただし、ビジネスまたはクリエイターアカウントへの切り替えは無料で、Instagramアプリの設定から約30秒で完了します。Facebookページへの接続が必要ですが、Upload-Postがアカウント連携プロセスで処理します。
API経由でInstagramストーリーズを投稿できますか?
Instagram の公式APIはストーリーズの公開をサポートしていません。これはUpload-Postではなく、Metaによる制限です。ストーリーズはInstagramアプリからのみ作成できます。将来的にAPIでストーリーズのサポートが利用可能になれば、Upload-Postもそれを追加します。
自動投稿でアカウントがシャドウバンされませんか?
いいえ。Upload-PostはInstagramの公式Content Publishing API(Hootsuite、Buffer、その他すべての認定ツールが使用しているのと同じAPI)を使用しています。投稿はInstagramの公式パイプラインを通じて処理されるため、シャドウバンやアカウントペナルティのリスクはありません。これはInstagramの利用規約に違反するブラウザ自動化や非公式ボットとは根本的に異なります。現在HootsuiteやLaterのようなツールを使用している場合、Upload-Postは同じ公式アクセスを使用する開発者向けの代替ツールです。
無料プランはありますか?
はい。すべてのUpload-Postアカウントには、クレジットカード不要で月10回の無料アップロードが含まれています。これはAPIのテスト、ワークフローの検証、有料プランにコミットする前にすべてが正しく動作することを確認するのに十分です。ソーシャルメディア記念日カレンダーを使って、今後のイベントに合わせた最初の投稿を計画してみてください。