エラー

API キーを取得

すべてのエラーは、HTTP ステータスと同じ JSON エンベロープで返されます。code がコードで読み取る契約であり、message は人間向けで、変更されることがあります。

json
{
  "error": {
    "code": "invalid_request",
    "message": "The request is invalid",
    "details": [
      { "field": "targets[0].text", "code": "required", "message": "targets[0].text is required" }
    ],
    "docUrl": "https://www.sofia-post.com/developers/errors#invalid_request",
    "requestId": "2aab5943-6333-4caf-8478-25a85ebd4abf"
  }
}
  • details には、拒否されたフィールド、ネットワークの理由、使い切ったレート制限のウィンドウなどの詳細が入ります。
  • docUrl は、このページにあるコードの説明へのリンクです。
  • requestId はリクエストを識別します。サポートに問い合わせる際にお伝えください。

エラーコード

ステータスコード意味
400invalid_requestボディ、クエリ、またはパラメータが無効です。拒否されたフィールドごとに 1 件の詳細(field、code(required、is_string、max など)、message)が付きます。
400invalid_jsonボディが有効な JSON ではありません。
400invalid_cursorこのカーソルは Sofia API が返したものではありません。
400webhook_url_invalidwebhook のアドレスが https ではないか、プライベートアドレスを指しています。
400webhook_event_invalid不明な webhook イベントです。
400application_name_invalid設定 › API: クライアント名がない、または長すぎます。
400application_profile_invalid設定 › API: クライアントのプロフィールに無効な項目があります。詳細にその項目名が示されます。
400logo_invalid設定 › API: ロゴが拒否されました(180×180 px 以上、PNG、JPEG または WebP、2 MB 以下)。
401invalid_tokenトークンがない、不明、期限切れ、または取り消されています。あるいは、トークンの持ち主が、トークンに付与された権限を失っています。WWW-Authenticate ヘッダーを参照してください。
401unauthorized認証が必要です。
402subscription_requiredlive の書き込み(ドライランを含む)には、有効なサブスクリプションまたはトライアルが必要です。
403insufficient_scopeトークンにエンドポイントのスコープがありません。詳細に該当のスコープが示されます。
403insufficient_roleこの Workspace でのあなたのロールでは、この操作は許可されていません。
403live_mode_requiredテストトークンでの実際の書き込みです。
403route_closed_to_applicationsこのエンドポイントはアプリケーションには公開されていません。
403forbiddenアクセスが拒否されました。
403session_required設定 › API: この操作にはトークンではなく Sofia のセッションが必要です。
403impersonation_forbidden設定 › API: この操作は借用したセッションでは拒否されます。
403workspace_owner_requiredこの操作は Workspace のオーナーだけが行えます。
403workspace_member_requiredあなたはこの Workspace のメンバーではありません。
404route_not_foundこのメソッドとパスに応答するエンドポイントはありません。
404establishment_not_found不明な店舗、またはトークンの範囲外です。
404media_not_found不明なメディア、またはトークンの範囲外です。
404post_not_found不明な投稿、またはトークンの範囲外です。
404webhook_not_found不明な webhook、または別のアプリケーションのものです。
404not_foundリソースが存在しません。
404application_not_found設定 › API: 不明なクライアントです。
404grant_not_found不明な認可、またはすでに取り消されています。
404personal_key_not_found設定 › API: 不明な個人キーです。
405method_not_allowedこのエンドポイントでは、このメソッドは許可されていません。
409post_in_flightネットワークが投稿を送信中です。少し待ってから削除を再試行してください。
409post_not_editableネットワークがすでに投稿を送信したため、編集できません。
409account_already_connectedこのネットワークはすでに店舗に連携されています。
409webhook_limit_reachedアプリケーションの webhook がすでに 10 件に達しています。
409idempotency_in_progressこの Idempotency-Key での最初のリクエストがまだ実行中です。
409conflictリクエストがリソースの現在の状態と競合しています。
409scope_removal_forbidden設定 › API: クライアントの権限は追加できますが、削除はできません。
409public_client_has_no_secret設定 › API: パブリッククライアントにはシークレットがありません。
413payload_too_largeファイルがアップロードの上限を超えています。
415unsupported_media_typeサポートされていないコンテンツタイプです。
422post_refusedネットワーク、店舗、またはご利用のプランが投稿を拒否します。理由ごとに 1 件の詳細があり、それぞれに message が付きます。
422media_import_refusedこの URL からメディアをインポートできませんでした。理由は詳細に記載されます。
422media_upload_refusedアップロードされたファイルは、サポートされている画像または動画ではありません。
422platform_not_offeredこのネットワークは連携の対象外です。
422idempotency_key_reusedこの Idempotency-Key は別のボディで使用されました。
422unprocessable_entityリクエストは理解されましたが、処理できません。
429rate_limit_exceededレート制限のウィンドウが上限に達しました。Retry-After の時間だけ待ってください。

投稿が拒否される理由

post_refused は、各理由を details[].code に一覧します。

コード意味
unsupported_platformこのネットワークはサポートされていません。
duplicate_platform同じネットワークが 2 回指定されています。
unsupported_formatこのネットワークはこのフォーマットに対応していません。
caption_too_longテキストが長すぎます(max、actual)。
too_many_hashtagsハッシュタグが多すぎます(max、actual)。
too_many_mentionsメンションが多すぎます(max、actual)。
too_many_thread_postsスレッドが長すぎます(max、actual)。
too_many_mediaメディアが多すぎます(max、actual)。
media_mix_refusedこのネットワークでは、写真と動画を混在させることはできません。
media_requiredこのネットワークには写真または動画が必要です。
media_type_refusedこのネットワークは、この種類のメディアを受け付けません。
scheduled_in_pastscheduledAt が過去の日時です。
scheduled_at_invalid予約投稿には、未来の scheduledAt が必要です。
account_not_connectedこの店舗には、このネットワークに連携されたアカウントがありません。
account_ambiguousこのネットワークには複数のアカウントが連携されています。accountId で 1 つ指定してください。
media_not_foundこのメディアは、この店舗のライブラリにありません。
media_url_invalidメディアの URL は、公開された https のアドレスである必要があります。
platform_unavailableこのネットワークは、まだ Sofia では利用できません。
publication_quota_exceededご利用のプランの投稿数の上限に達しました。

エラーの扱い方

  • message ではなく、必ず code で分岐してください。
  • 429 は Retry-After の後に、5xx は指数バックオフで再試行してください。
  • 4xx は、そのままでは再試行しないでください。先にリクエストを修正します。
  • 失敗のたびに requestId をログに残してください。