Social

Social の全エンドポイント:ブランド、ホスト型の接続リンク、単一および一括での公開、予約、インサイト、そしてこれらすべてに適用される接続数の上限です。

Social API は Facebook、Instagram、X、LinkedIn、Pinterest に投稿を公開します。モデル全体は 2 つのオブジェクトで構成されます。ブランドは投稿の発信元であり、名前、タイムゾーン、および関連付けられたソーシャルアカウントで構成されます。接続は、1 つのブランドに属する、1 つのプラットフォーム上の認可済みソーシャルアカウントです。API プランではブランド数に制限はなく、費用もかかりません。プランで使用量として計測されるのは接続数なので、接続数の上限を考慮して設計する必要があります。

アカウントの接続は、お使いのサーバーからは実行できません。エンドユーザーがプラットフォーム上で認可する必要があるため、ホスト型のリンクをリクエストし、ユーザーをそのリンクにリダイレクトします。公開処理は非同期です。作成呼び出しは、投稿が受け付けられるとすぐに応答を返すため、チャネルごとの結果をポーリングします。

エンドポイント一覧

メソッドパス機能リファレンス
POST/social/brandsブランドを作成します。ブランドを作成
GET/social/brandsアカウントのブランドを 1 ページ分返します。ブランドを一覧表示
GET/social/brands/{brandId}1 つのブランドをすべての詳細情報とともに返します。ブランドを取得
POST/social/brands/update既存のブランドのフィールドを変更します。ブランドを更新
POST/social/brands/archiveブランドとその接続をアーカイブします。ブランドをアーカイブ
POST/social/brands/{brandId}/connections/link1 つのプラットフォームを接続するためのホスト型 URL を返します。接続リンクを取得
GET/social/brands/{brandId}/connectionsブランドに接続されているアカウントを返します。ブランドの接続を一覧表示
POST/social/connections/disconnect1 つの接続を削除します。接続を解除
POST/social/posts1 件の投稿を下書きとして作成、予約、または公開します。ソーシャル投稿を作成
GET/social/posts/{postId}1 件の投稿をチャネルごとの公開状態とともに返します。ソーシャル投稿を取得
GET/social/brands/{brandId}/postsブランドの投稿を 1 ページ分返します。ブランドの投稿を一覧表示
POST/social/posts/cancelまだ公開されていない投稿をキャンセルします。予約投稿をキャンセル
GET/social/posts/{postId}/insights1 つのチャネルのエンゲージメント数とコメントを返します。投稿のインサイトとコメントを取得
POST/social/bulk-posts1 回のリクエストで最大 500 件の投稿を作成します。投稿を一括作成
GET/social/bulk-posts/{bulkJobId}一括処理ジョブのステータスと行ごとの結果を返します。投稿の一括処理ジョブを取得
GET/social/limits接続数の上限と、その上限に対する使用量を返します。Social プランの上限と使用量を取得

各所で使用する値

フィールド使用可能な値
platforms[] と channelFACEBOOK, INSTAGRAM, TWITTER (X), LINKEDIN, PINTEREST
actionDRAFT, SCHEDULE, PUBLISH

プラットフォームの値には、大文字の列挙名を使用します。"instagram" を送信すると拒否されます。TWITTER は X を表し、製品名が変わった際も列挙名は変更されませんでした。

ブランドを作成する

POST /social/brands

profileName と timezone は必須です。タイムゾーンはオブジェクトであり、重要なフィールドは tzCode です。これは、このブランドの投稿に含まれるすべての scheduleDate と scheduleTime の解釈に使用する IANA 識別子です。残りの 3 つのキーは表示用のラベルです。

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "profileName": "Jenny Home",      "timezone": {        "label": "(GMT-05:00) Eastern Time",        "tzCode": "America/New_York",        "name": "Eastern Standard Time",        "utc": "-05:00"      },      "categories": ["Furniture Store"],      "siteUrl": "https://jennyhome.example"    }  }'

返されたブランドの id を保存してください。これは、他のすべてのブランド用エンドポイントではパス内の brandId トークンとして、公開時にはリクエストボディの socialProfileId フィールドとして使用します。

ブランドの一覧表示と取得

GET /social/brands はブランドを 1 ページ分返します。GET /social/brands/{brandId} は 1 つのブランドをすべての詳細情報とともに返します。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands?page=1&size=25"

指定した id に対して SY95043 が返される場合、そのブランドはこのアカウントに属していないか、すでにアーカイブされています。

ブランドを更新する

POST /social/brands/update

ブランドのIDはパスではなく、リクエストボディにinput.profileIdとして指定します。変更するフィールドのみを送信してください。省略したフィールドは現在の値を保持します。

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/update \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"profileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "bio": "Handmade furniture for real homes."}}'

ブランドをアーカイブする

POST /social/brands/archive

ブランドをアーカイブするには、作成から90日が経過している必要があります。90日未満の場合、呼び出しはSY95051で拒否され、何も変更されません。作成から90日が経過していれば、アーカイブは即座に適用され、そのブランドのすべての接続も同時にアーカイブされます。

それらの接続からの公開は即座に停止しますが、手動で接続を解除した場合と同様に、スロットは請求期間の終了まで使用数にカウントされます。アーカイブは、すぐに空き容量を増やす手段にはなりません。

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/archive \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902"}}'

POST /social/brands/{brandId}/connections/link

接続を追加する方法はこれだけです。レスポンスには、expiresIn秒間有効な、ホストされたurlが含まれます。エンドユーザーをそのリンクにリダイレクトすると、ユーザーはプラットフォームで認可を行い、結果がクエリ文字列に含まれた状態でredirectUrlに戻ります。キャンセルと成功を区別するにはerrorUrlを渡し、この往復を通じて独自の相関値を引き継ぐにはstateを渡します。

このリクエストボディはフラットな構造で、inputラッパーがないことに注意してください。

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections/link \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "channel": "INSTAGRAM",    "redirectUrl": "https://app.example.com/social/connected",    "errorUrl": "https://app.example.com/social/failed"  }'
JSON
{  "data": {    "connectSocialAccount": {      "status": "success",      "url": "https://social.listingsapi.com/connect/start?token=bfac8e06-8d72-4810-9c50-ae7ee12a7b52",      "expiresIn": 900    }  }}

リダイレクトする前にstatusを確認してください。failedレスポンスはurlを返さず、理由をtitleに格納します。最も多い理由は、接続数の上限(SY95042)またはそのアカウントで利用できないプラットフォーム(SY95044)です。

ブランドの接続を一覧表示する

GET /social/brands/{brandId}/connections

ブランドに紐づくアカウントを返します。各アカウントには、特定の接続への公開や接続の解除に必要なidが含まれます。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections

接続を解除する

POST /social/connections/disconnect

上記の一覧にある接続のidを指定します。アカウントからの公開は即座に停止しますが、そのアカウントが使用していたスロットは、請求期間が終了するまで利用可能なスロットに戻りません。その期間内に同じアカウントを同じブランドに再接続すると、そのスロットが再利用され、費用はかかりません。一方、別のブランドに紐づけると、2つ目のスロットを使用します。

Shell
curl -X POST https://listingsapi.com/api/v4/social/connections/disconnect \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileConnectedChannelId": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"}}'

投稿を公開する

POST /social/posts

1回の呼び出しで、platforms内のすべてのプラットフォームに同じコンテンツを公開します。それらの各プラットフォームには、ブランド上に既存の接続が必要です。そうでない場合、呼び出しはSY95045を返します。InstagramとPinterestでは、mediaUrlsに少なくとも1つのエントリが必要です。

投稿の予約には2つの方法のいずれかを使用し、両方を同時に使用しないでください。scheduledAtはオフセット付きのISO-8601タイムスタンプです。scheduleDateとscheduleTimeは一緒に送信し、ブランドのタイムゾーンで解釈されます。両方の方法を同時に指定した場合、または過去の日時を予約日時に指定した場合は、SY95046が返されます。

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",      "name": "Autumn collection launch",      "platforms": ["INSTAGRAM", "FACEBOOK"],      "content": "Our autumn collection lands today.",      "mediaUrls": ["https://cdn.example.com/social/autumn-collection.jpg"],      "action": "SCHEDULE",      "scheduleDate": "2026-10-02",      "scheduleTime": "09:30",      "clientReference": "campaign-4471-slot-01"    }  }'

clientReferenceに独自の識別子を設定してください。この識別子は保存されて返されるため、UUIDを保持しなくても、自社の記録と投稿を照合できます。

1件の投稿を取得する

GET /social/posts/{postId}

この方法で、公開が成功したかどうかを確認できます。投稿自体のstatusは概要であり、実際の結果はconnectedChannels内にチャネルごとに記録されます。各エントリには、独自のstatus、プラットフォームに受け付けられた場合はliveLink、受け付けられなかった場合はreasonまたはerrorが含まれます。

JSON
{  "connectedChannels": [    {      "platform": "INSTAGRAM",      "status": "SUCCESS",      "liveLink": "https://www.instagram.com/p/CxYz1234abc/",      "error": null    }  ]}

PUBLISHの後に、このエンドポイントをポーリングしてください。他のチャネルが成功しても1つのチャネルが失敗することがあるため、最上位のstatusだけでなく、すべてのエントリを確認してください。

ブランドの投稿を一覧表示する

GET /social/brands/{brandId}/posts

ブランドの投稿をページ単位で取得し、状態で絞り込むためのフィルターを使用できます。IDを1つずつポーリングする代わりに、一括で照合するために使用します。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/posts?page=1&size=25"

予約投稿をキャンセルする

POST /social/posts/cancel

まだ公開されていない投稿をキャンセルします。プラットフォームですでに公開されている投稿は、このエンドポイントでは取り消せません。

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts/cancel \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialPostId": "a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10"}}'

インサイトとコメントを取得する

GET /social/posts/{postId}/insights

1つのチャネル上の1つの投稿について、エンゲージメント数とコメントを取得します。3つのプラットフォームに公開された投稿には、それぞれ別の数値があるため、チャネルの指定は必須です。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/posts/a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10/insights?socialConnectedChannelId=b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"

投稿を一括作成する

POST /social/bulk-posts

input.postsで1〜500行を受け付けます。各行は、POST /social/postsがinputとして受け付けるものと同じオブジェクトであり、同じリクエスト内でも行ごとに異なるブランドを対象にできます。

何かを作成する前に、バッチ全体が検証されます。いずれかの行が検証に失敗すると、行ごとのエラーとともにSY95050が返され、何もキューに追加されないため、修正して再送信してください。500行を超える場合はSY95048が返され、この場合も何も作成されません。有効なバッチの場合は、ポーリングするためのジョブが返されます。

Shell
curl -X POST https://listingsapi.com/api/v4/social/bulk-posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "name": "October launch batch",      "posts": [        {          "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",          "name": "Launch day",          "platforms": ["FACEBOOK"],          "content": "Doors open at nine.",          "action": "SCHEDULE",          "scheduleDate": "2026-10-02",          "scheduleTime": "09:00"        }      ]    }  }'

一括処理はレート制限上で1リクエストとしてカウントされるため、大規模なバッチを効率的に処理できます。

一括処理ジョブをポーリングする

GET /social/bulk-posts/{bulkJobId}

各行に対して作成された投稿のIDや、キューへの追加後に失敗した行を含む、行ごとの結果とジョブのステータスを返します。ジョブは無期限には保持されず、保持期間を過ぎたIDを指定するとSY95047が返されます。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/bulk-posts/f47ac10b-58cc-4372-a567-0e02b2c3d479

上限と使用量を確認する

GET /social/limits

SY95042が返された後ではなく、接続を作成する前にこの情報を確認してください。usage.connectionsをmaxConnectionsと比較してください。これは課金対象の数で、現在接続されている数と、この期間中にすでに解放された数の合計です。usage.connectionsActiveは現時点で有効な数で、usage.connectionsReleasedは更新時に回復する容量です。

brandsはnullとして返され、無制限を意味します。APIプランでは、ブランド数は従量課金の対象ではありません。

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/limits

発生するエラー

コード意味対処方法
SY90001アカウントにSocialのサブスクリプションがありません。これらのエンドポイントを呼び出す前に、Social製品を追加してください。
SY95042この請求期間の接続数の上限に達しています。usage.connectionsをmaxConnectionsと比較してください。接続枠は期間の終了まで確保されるため、最近接続を解除していても、この状態は解消されません。
SY95043このアカウントに該当するブランドが存在しないか、アーカイブされています。ブランドの一覧表示からIDを再取得してください。
SY95044このアカウントでは、そのプラットフォームが有効になっていません。アカウントで利用できるプラットフォームを選択するか、サポートにお問い合わせください。
SY95045このブランドには、そのプラットフォームへの接続がありません。ユーザーに接続リンクから接続手続きを行ってもらうか、platformsからそのプラットフォームを削除してください。
SY95046スケジュールまたはタイムゾーンが無効です。scheduledAt、またはscheduleDateとscheduleTimeの組み合わせのいずれかを送信し、両方を送信しないでください。
SY95047該当する一括処理ジョブがありません。一括作成のレスポンスからjob.idを再取得してください。
SY95048500行を超えています。バッチを分割してください。何も作成されていません。
SY95049リダイレクトURLが無効です。redirectUrlとerrorUrlは、httpsの絶対URLである必要があります。
SY95050一括処理の検証に失敗しました。行ごとのエラーを確認し、該当する行を修正して、バッチを再送信してください。
SY95051ブランドの作成から90日が経過していません。作成から90日が経過するまで待ってから、アーカイブしてください。

完全な一覧はエラーコードリファレンスにあります。

次の手順

接続数の上限、5接続単位のパック、90日間のアーカイブ制限の関係についてはプランとアドオンを、ポーリングの代わりにsocial_post.*とsocial_connection.*のイベントを受信する方法についてはWebhookでイベントに対応を参照してください。

Python SDKでは、これらのエンドポイントをclient.social.brands、client.social.connections、client.social.posts、client.social.bulkとして利用できます。詳細はSocialリソースを参照してください。Node SDKはまだSocialに対応していないため、NodeからRESTエンドポイントを直接呼び出してください。