Automation 7分で読めます

ソーシャルメディア予約投稿APIとは何か

ソーシャルメディア予約投稿APIに必要なアカウント接続、検証、状態管理、Webhook、再試行、失敗対応を説明します。

ソーシャルメディア予約投稿APIは、別のシステムが準備したコンテンツをInstagram、Threads、Facebook Pages、Bluesky、TikTok、YouTubeなどの公開キューへ送れるようにするインターフェースです。

しかし実用的なAPIは POST /posts だけではありません。実際の予約投稿には、アカウント接続、権限、media rule、予約時刻、再試行、失敗理由、Webhook、状態照会が必要です。

短く言えば:

予約投稿APIは最初のリクエストではなく、公開作業のライフサイクルを管理するAPIです。

なぜ各SNS APIを直接呼ばないのか

対象が狭いなら、各SNSのネイティブAPIを直接呼ぶ選択もあります。1つのプラットフォームだけを扱い、保守を自分たちで持てるなら、それで十分な場合があります。

難しくなるのは複数チャネルを扱い始めたときです。

  • OAuth接続とtoken refresh
  • providerごとのアカウントやページの対応付け
  • 画像、動画、carousel、link previewの制約
  • 予約時刻とtimezone
  • rate limitとprovider障害
  • あるチャネルだけ成功/失敗するpartial failure
  • provider post IDと公開履歴
  • 結果を別システムへ渡すWebhook

だから予約投稿APIはネイティブAPIの薄いwrapperではなく、繰り返し発生する運用作業を吸収する必要があります。

最小構成

実用的な予約投稿APIには、少なくとも次の要素が必要です。

  • アカウント接続: どのブランドがどのSNSアカウントに投稿できるか
  • コンテンツpayload: 文面、media、リンク、チャネル、予約時刻を安定した形で表す
  • 検証: provider実行前にmedia、権限、必須項目を確認する
  • 状態モデル: accepted、queued、publishing、published、failedを区別する
  • idempotency: 同じリクエストが重複投稿にならないようにする
  • Webhook: 外部システムが結果を受け取れるようにする
  • 失敗理由: token、media、provider policy、rate limitのどれを直すべきか示す

これらがないと、APIは簡単に見えても運用の負担が人に戻ります。

中心は状態です

予約投稿APIで最も重要なのは状態です。

accepted -> queued -> publishing -> published
                              -> failed
  • accepted: APIがリクエストを作業として保存した
  • queued: 予約時刻またはworker実行を待っている
  • publishing: provider API呼び出しが進行中
  • published: providerが公開成功として受け付けた
  • failed: 権限、media、rate limit、providerエラーなどで止まった

この区別がないと、「APIリクエスト成功」と「SNS投稿成功」を同じものと誤解しやすくなります。

Webhookが重要な理由

CMS、AIツール、社内ダッシュボード、顧客システムが結果を知る必要がある場合、方法は主に2つです。

1つ目はpollingです。外部システムが何度も状態を問い合わせます。始めやすいですが、ノイズが多く結果に気づくのも遅くなりがちです。

2つ目はWebhookです。公開状態が変わったときにスケジューラーがイベントを送ります。

{
	"type": "content.publish.failed",
	"brandRef": "acme",
	"contentId": "cnt_123",
	"sns": "instagram",
	"reason": "MEDIA_VALIDATION_FAILED"
}

自動化は連鎖です。AIツールがコンテンツを作り、APIが作業を受け付け、スケジューラーが後で公開し、別システムが結果を見て次の処理を決めます。だからWebhookが必要になります。

Ankkでの考え方

Ankkは、SNS予約投稿を人間向けダッシュボードとCLI/API/Webhookが共有する1つの運用フローとして扱います。

ankk contents publish --brand-ref acme --file payload.json

このコマンドは「providerにもう投稿した」ではなく、「Ankkが公開作業を受け付けた」という意味で捉えるべきです。実際のprovider公開は後続の状態変化で確認します。

自動化の流れはAnkk CLI/API開発者ガイドで、API/Webhookの範囲は料金ページで確認できます。

チェックリスト

予約投稿APIを比較するときは、次を確認してください。

  • リクエスト受付とprovider公開成功を分けているか
  • 予約作業の現在状態を取得できるか
  • 失敗理由が人間にとって行動可能か
  • 同じリクエストの重複公開を防げるか
  • Webhookで結果を受け取れるか
  • チャネル固有の制約を雑に隠していないか
  • 価格がチャネル数と自動化量に合っているか

APIアクセスは出発点です。運用上の問いは、そのAPIが公開ライフサイクルを信頼できるほど見せてくれるかです。