エラーコード

Listings API の HTTP ステータスコード、Listings と Social の SYxxxxx エラーコード、および v4 API が返す 3 種類のエラーレスポンス形式です。

Listings API は、標準的な HTTP ステータスコードでリクエストの結果を報告します。エラーコードには SY というプレフィックスが付き、エラーの message 文字列内に SYxxxxx: <human-readable reason> の形式で含まれます。

HTTP ステータスコード

HTTP status code summary

ステータス意味一般的な SY コードPython SDK の例外
200 OKリクエストが成功しました。書き込みの場合は、レスポンス本文も確認してください(下記を参照)。--
400 Bad Request不正な形式のリクエスト、解析できないフィルター、無効な列挙値、または不正な形式の ID です。SY90006, SY90001ValidationError
401 UnauthorizedAPI キーが存在しないか、形式が不正であるか、失効しています。キーがまだない場合は、提供期間中であれば無料のサンドボックス用デイパスを取得できます。SY90005AuthenticationError
402 Payment Requiredアカウントに未払いの請求書があるため、API アクセスが一時停止されています。Social のみを対象とする未払いの請求書がある場合は、Social のエンドポイントのみが一時停止されます。payment_required および social_payment_required を参照してください。-APIError
403 Forbiddenキーは有効ですが、リソースへのアクセスは許可されていません。SY90003PermissionDeniedError
404 Not Foundパス、または ID で指定されたリソースが存在しません。SY90002NotFoundError
422 Unprocessable Entityリクエストの形式は正しいものの、値を処理できませんでした(例:不明または曖昧なカテゴリ)。-ValidationError
429 Too Many Requestsご利用のプランのレート制限を超えました。Retry-After ヘッダーに従ってください。-RateLimitError
5xxサーバーエラーです。読み取りでは、バックオフを使用して安全に再試行できます。書き込みを繰り返す前には、下記の書き込みに関する注意事項を確認してください。SY90007InternalServerError

3 種類のレスポンス形式

以下の各セクションに示すように、ほとんどの失敗では、トップレベルまたは操作の結果内にネストされた errors 配列が返されます。一部の失敗では、代わりに単一の error オブジェクトが返されます。該当するのは、レート制限(429)と、一部のリクエストレベルの失敗(INTERNAL_SERVER_ERROR などの code を伴う 400/500)です。両方を確認してください。errors は配列で、error はオブジェクトです。

1. リクエストレベル:トップレベルの errors[]

認証、認可、リクエストの形式不正による失敗では、操作が実行される前に処理が中断されます。対応する 4xx ステータス(上記)とともに、レスポンスのトップレベルにエラーが返されます。

JSON
{  "data": { "createLocation": null },  "errors": [{ "message": "SY90005: Invalid Token" }]}

2. 書き込み検証:ネストされた data.<operation>.errors[]

作成、更新、公開のリクエストは、それ以外の点で形式が正しければ、HTTP 200 を返します。入力がビジネスルールに違反している場合、失敗は data.<operation>.errors 内の操作固有のペイロード配下にネストされた形で報告されます。成功時にもこの配列は存在しますが、空です("errors": [])。

JSON
{  "data": {    "createLocation": {      "errors": [        { "message": "SY10126: City is Mandatory" },        { "message": "SY10010: state_iso" }      ],      "location": null    }  }}

3. ゲートウェイレベル:トップレベルの単一の error オブジェクト

レート制限や予期しないゲートウェイ障害が発生すると、変換前に処理が中断され、code、message、correlation_id を含む 1 つの error オブジェクトが返されます。429 の本文については、下記の rate_limited を参照してください。

書き込みでは、値が格納された data.<operation> オブジェクトを伴う 200 であっても、必ず data.<operation>.errors を確認してください。書き込みは部分的に失敗し、その失敗がここで報告される場合があります。

402 Payment Required レスポンスには error ラッパーがありません。code、message、doc_url と、支払いが必要な請求書がある場合の pay_url は、トップレベルに配置されます。下記の payment_required を参照してください。

書き込みの再試行には注意が必要

v4 API は Idempotency-Key をサポートしていません。ヘッダーは無視され、繰り返された書き込みを検出するエンドポイントもありません。タイムアウトしたり 5xx を返したりした作成、更新、公開の呼び出しでも、サーバー上ではすでに確定している可能性があるため、確認せずに再試行すると、拠点、投稿、レビューへの返信が重複して作成される場合があります。

読み取りは、バックオフを使用して自由に再試行できます。書き込みの場合は、まず読み取って確認してください。自分で管理できるキー(storeId、店舗コード、インタラクションの返信リスト)を使ってレコードを検索し、実際に存在しない場合にのみ呼び出しを繰り返してください。

一般的なコード

Common SY error codes

コードメッセージHTTPステータス意味
SY90005Invalid Token401APIキーが指定されていないか、形式が正しくないか、失効しています。ダッシュボードからキーを再発行し、Authorization: API <your-key>として送信してください。
SY90001Not authorized to access this resource401 / 403このリソースに対するキーの使用が拒否されました。Python SDKとNode SDKはどちらも、これをAuthenticationErrorとして送出します。
SY90002Invalid Id404 / 400パスまたは引数のIDを解決できませんでした(多くの場合、relay IDが不正であるか、base64形式ではないことが原因です)。
SY10126City is Mandatory200(レスポンスボディ)必須フィールド(city)が入力から省略されています。
SY10010state_iso200(レスポンスボディ)stateIsoの値が指定されていないか、無効です。有効な値については、国と州のエンドポイントを参照してください。

SY10xxxの範囲の検証コードは特定の入力フィールドに対応し、messageには検証に失敗したフィールド名またはルールが示されます。SY90xxxの範囲の認証・認可コードはリクエスト単位のもので、対応するステータスとともにトップレベルで返されます。

接続済みアカウントのコード

SY810xxの範囲のコードは、掲載先の掲載情報をインポートまたはリンクするConnected Accountsエンドポイントから返されます。これらはHTTP 200のレスポンスボディ内にネストされた状態で返されるため(上記のレスポンス形式2)、ステータスが成功を示していてもdata.<operation>.errorsを確認してください。

SY810xx connected-account and import codes

コード意味対処方法
SY81019キーに紐づくアカウントのユーザーを特定できませんでした。アカウントに有効なプライマリユーザーがいないため、サポートにお問い合わせください。
SY81066connectedAccountIdが存在しないか、アカウントがアーカイブされています。GET /connected-accountsからIDを再度読み取ってください。
SY81067connectedAccountListingIdをデコードまたは解決できませんでした。connected-account-listingsのレコードのidから再取得してください。
SY81068その掲載情報はすでに拠点にリンクされています。先にリンクを解除するか、別の掲載情報を選択してください。
SY81069接続済みアカウントの認証情報が無効になっています。connect-googleまたはconnect-facebookを使用してアカウントを再接続してください。
SY81070その掲載情報は、指定した接続済みアカウントに属していません。各掲載情報を、その取得元のアカウントと組み合わせてください。よくある原因は、ボディにconnectedAccountIdを含めずに掲載情報を取得することで、その場合は別のアカウントの掲載情報が返されます。
SY81071拠点の作成中に予期しないエラーが発生しました。再試行し、問題が解消しない場合はサポートにお問い合わせください。
SY81072構築中または保存中に拠点の作成に失敗しました。再試行し、問題が解消しない場合はサポートにお問い合わせください。
SY81073この掲載情報の種類はインポートに対応していません。インポートできるのはGoogleとFacebookの掲載情報のみです。
SY81074Googleからその掲載情報のデータが返されませんでした。掲載情報がまだ存在し、アカウントが現在もその掲載情報を管理していることを確認してください。
SY81075GoogleのAPIレート制限を超えました。バックオフを適用して、時間を置いて再試行してください。
SY81076Googleからの掲載情報の取得に失敗しました。再試行し、アカウントのGoogle権限を確認してください。
SY81077Facebookページから国を特定できませんでした。Facebookのページの住所に国を追加してから、再試行してください。
SY81078Facebookページからの拠点データの構築に失敗しました。再試行し、問題が解消しない場合はサポートにお問い合わせください。
SY81081掲載情報にメインカテゴリが設定されていません。掲載情報にメインカテゴリを設定してから、再試行してください。
SY81082掲載情報の国はサポートされていません。サポートされている国については、国と州のエンドポイントを参照してください。
SY81083Googleの掲載情報をインポートできませんでした。タイムスタンプを添えてサポートにお問い合わせください。
SY81084Facebookからのインポートの準備中に内部エラーが発生しました。再試行し、問題が解消しない場合はタイムスタンプを添えてサポートにお問い合わせください。
SY81085Facebookページをインポートできませんでした。タイムスタンプを添えてサポートにお問い合わせください。
SY81086ビジネスルールにより拠点の作成が拒否されました。ネストされたmessageには原因を示すコードが含まれ、たとえばアカウントの拠点枠に空きがない場合はSY10151が含まれます。ネストされたメッセージを確認し、SY10151の場合は拠点のアドオンを追加するか、プランをアップグレードしてください。
SY81087拠点の作成リクエストが失敗しました。再試行し、問題が解消しない場合はタイムスタンプを添えてサポートにお問い合わせください。
SY81088不明な理由で拠点の作成に失敗しました。タイムスタンプを添えてサポートにお問い合わせください。
SY81089内部サービスの呼び出しで、成功以外のステータスが返されました。リクエストの問題ではありません。1回再試行し、問題が解消しない場合は内部呼び出しを追跡できるよう、タイムスタンプを添えてサポートにお問い合わせください。
SY81090内部の拠点作成呼び出し中に予期しないエラーが発生しました。再試行し、問題が解消しない場合はタイムスタンプを添えてサポートにお問い合わせください。

Socialのコード

SY950xxの範囲のコードは、ブランド、接続、ソーシャル投稿を扱うSocialエンドポイントから返されます。接続済みアカウントのコードと同様に、HTTP 200のレスポンスボディ内にネストされて返されるため、ステータスが成功を示していても、data.<operation>.error(一括処理ルートではdata.<operation>.errorsも)を確認してください。

SY950xx Social codes

コード意味対処方法
SY95041アカウントのブランド数が上限に達しています。APIプランでは発生しません。APIプランではブランド数が無制限です。APIプランでは対処は不要です。もしこのコードが表示された場合は、報告してください。GET /social/limitsはbrands: nullを返すはずです。
SY95042アカウントの接続数が、現在の請求期間における上限に達しています。上限との比較に使われるのは、GET /social/limitsのusage.connections、つまり現在接続されている数に今期中に解放した数を加えた課金対象の数です。接続の解除またはブランドのアーカイブによって空いた枠は、請求期間が終了するまで確保されたままになるため、最近接続を解除していても、このエラーは解消されません。解放したアカウントのいずれかを元のブランドに再接続する(その枠を再利用するため無料)、接続5件分のパックを追加購入する(即時反映)、またはusage.connectionsReleasedの枠が戻る更新時期まで待ってください。解放したアカウントを別のブランドに接続しても、その枠は再利用されません。プランとアドオンを参照してください。
SY95043このアカウントにそのIDのブランドが存在しないか、ブランドがアーカイブされています。GET /social/brandsからIDを再取得してください。ブランドIDは通常のUUIDであり、Base64のrelay IDではありません。
SY95044そのプラットフォームは、このアカウントで有効になっていません。アカウントのSocialプランには、接続を要求したプラットフォームが含まれていません。サポートに問い合わせるか、アカウントで利用できるプラットフォームを選択してください。
SY95045このブランドには、そのプラットフォームに接続されたチャネルがありません。そのプラットフォームの接続リンクにユーザーを誘導するか、platformsからそのプラットフォームを除外してください。投稿のスケジュール設定後にチャネルの接続が解除された場合にも発生します。
SY95046スケジュールまたはタイムゾーンが無効です。scheduledAtまたはscheduleDate + scheduleTimeを送信し、両方を送信しないでください。scheduledAtにはUTCオフセットが必要で、scheduleTimeはHH:MMです。タイムゾーンにはIANA識別子(tzCode)を使用します。
SY95047このアカウントに、そのIDの一括処理ジョブが存在しません。一括作成のレスポンスからjob.idを再取得してください。ジョブは無期限には保持されません。
SY95048一括リクエストの行数が上限を超えています。1回のリクエストで送信する行数は最大500行とし、残りは追加のバッチに分割してください。何も作成されていません。
SY95049リダイレクトURLが無効です。接続リンクのredirectUrlとerrorUrlには、ご自身で管理する絶対https URLを指定する必要があります。
SY95050一括検証に失敗しました。行ごとのエラーを確認してください。何も作成されていません。job.results[]を確認してください。拒否された各行には、0から始まるindex、その行のclientReference、およびerrors[]内の理由が含まれています。該当する行を修正し、バッチ全体を再送信してください。
SY95051ブランドが90日間の最低利用期間を満たしていません。ブランドは作成から90日が経過するまでアーカイブできません。レスポンスにはstatus: "TENURE_NOT_MET"も含まれ、何も変更されていません。90日目を過ぎてから再試行すると、ブランドとその接続は即座にアーカイブされますが、接続枠は請求期間の終了まで確保されたままになります。最低利用期間のルールを参照してください。
SY95052接続済みのチャネルは、このブランドに属していません。各接続を、その接続が作成されたブランドと組み合わせてください。あるブランドの投稿と別のブランドのチャネルIDを使ってインサイトの呼び出しを構成した場合によく発生します。

SY95042とSY95044は利用権限に関するエラーであり、入力エラーではありません。プランを変更せずに再試行しても、同じエラーで失敗します。SY95045、SY95046、SY95049、SY95052は入力エラーであり、次のリクエストで修正できます。

Listingsの利用権限コード

Listings plan codes

コード意味対処方法
SY10150アカウントの拠点数が上限に達しています。拠点をアーカイブするか、拠点追加アドオンを購入するか、プランをアップグレードしてください。プランとアドオンを参照してください。
SY10151このプランでアカウントに割り当てられた拠点枠を使い切っています。サンドボックスのデイパスの場合は、2つの拠点が両方とも使用中です。対処方法はSY10150と同じです。デイパスの場合は、既存の拠点を更新するか、有料プランを選択してください。接続済みアカウントの掲載情報から拠点を作成した場合は、SY81086内にネストされた形でも表示されます。
SY10152拠点がアクティブになってから、アーカイブできるまでに必要な期間が経過していません。POST /locations/archiveで拠点を受け付けるには、その拠点がアカウントの最低利用期間(デフォルトでは90日間)にわたってアクティブである必要があります。その期間が経過するまで待ってください。
SY10155アカウントにListingsプランがないため、拠点を作成できません。APIキーが属するアカウントには、Socialのみのアカウントなど、Listingsのサブスクリプションがありません。拠点はListings製品の一部であるため、POST /locationsを呼び出す前にListingsを契約してください。

rate_limited

429 Too Many Requests: アカウントがプランのレート制限を超えました。本文は標準のエラーレスポンスで、retry_after_secondsのヒント、サポートへの問い合わせ時に記載するcorrelation_id、およびこのセクションへのリンクを含むdoc_urlが含まれます。

JSON
{  "error": {    "code": "RATE_LIMITED",    "message": "Too many requests. Slow down.",    "retry_after_seconds": 30,    "correlation_id": "9f2c1e64-2b1a-4b0e-9f1a-2c7d5e8a1b3c",    "doc_url": "https://listingsapi.com/docs/error-codes#rate_limited"  }}

retry_after_seconds(または、Retry-Afterヘッダーがある場合はその値)で指定された時間だけ待ち、指数バックオフで再試行してください。プランごとの制限とバックオフの参考実装については、レート制限を参照してください。

payment_required

402: このアカウントの直近の支払いが失敗したため、すべての/api/v4エンドポイントが一時停止されています。未払いの請求書のStripeページが利用可能な場合は、本文にそのページを示すpay_urlが含まれ、X-Error-Codeレスポンスヘッダーにも同じcodeが含まれます。引き続きダッシュボードの請求ページを開いて支払うことができます。

JSON
{  "code": "payment_required",  "message": "This account has an unpaid invoice, so API access is paused. Pay the invoice to restore access.",  "pay_url": "https://invoice.stripe.com/i/acct_123/test_abc",  "doc_url": "https://listingsapi.com/docs/error-codes#payment_required"}

未決済の請求書がすべて支払われると、1分以内にアクセスが復旧します。最初の支払い失敗から3日後も請求書が未払いの場合、Listingsのサブスクリプションが解約され、アカウントの拠点がアーカイブされます。アカウントに有効なSocialのサブスクリプションもある場合は、Socialへのアクセスが維持されます。それ以外の場合は、アカウントが閉鎖され、APIキーが機能しなくなります。

social_payment_required

402: Socialのサブスクリプションの直近の支払いが失敗したため、Socialのエンドポイント(/api/v4/social/*)が一時停止されています。Listingsのエンドポイントは引き続き機能します。本文にはpayment_requiredと同じフィールドが含まれ、"code": "social_payment_required"が設定されます。最初の支払い失敗から3日後も請求書が未払いの場合、Socialのサブスクリプションが解約され、アカウントのブランドがアーカイブされます。Listingsのサブスクリプションがないアカウントは閉鎖され、APIキーが機能しなくなります。

開発者ポータルのコントロールプレーンのエラー

開発者ポータルのアカウントおよびキー管理用エンドポイント(ダッシュボード自体のAPIルート)は、上記のRESTのerrors[]形式とは異なる、単一の構造化されたエラーレスポンスを返します。各codeには、correlation_idと、このページの該当セクションへのリンクを含むdoc_urlが含まれます。

JSON
{  "error": {    "code": "AUTH_INVALID_KEY",    "message": "Session is invalid or expired.",    "correlation_id": "9f2c1e64-2b1a-4b0e-9f1a-2c7d5e8a1b3c",    "doc_url": "https://listingsapi.com/docs/error-codes#auth_invalid_key"  }}

auth_missing_key

401: 認証情報が提供されていません。再度サインインするか、キーをAuthorization: API <your-key>として送信してください。

auth_invalid_key

401: セッションまたはキーが無効であるか、有効期限が切れています。再認証するか、ダッシュボードからキーを再発行してください。

auth_insufficient_scope

403: 認証情報は有効ですが、この操作は許可されていません。読み取りスコープのキーでは書き込み用エンドポイントを呼び出せないため、必要に応じて書き込み用のキーを発行してください。

not_found

404: リクエストされたリソース、またはIDで指定されたリソースが存在しません。

conflict

409: リクエストがリソースの現在の状態と競合しています(すでに失効しているキーを失効させようとした場合など)。

validation_failed

422: リクエストボディの検証に失敗しました。レスポンスのfieldとdetailsに、問題のある入力が示されます。

internal_error

500: サーバー側で予期しないエラーが発生しました。読み取りの場合は指数バックオフで再試行し、書き込みの場合はまずレコードを再度読み取ってください(書き込みの再試行には注意が必要を参照)。サポートに問い合わせる場合は、correlation_idを記載してください。

dependency_unavailable

503: APIが依存するサービスが一時的に利用できません。バックオフを使用して再試行してください。

429については、上記のrate_limitedを参照してください。

コードでのエラー処理

まず HTTP ステータスを確認し、書き込みの場合は、レスポンスボディ内にネストされた errors 配列がないかを調べます。

Python
from listingsapi import APIError, ListingsAPI client = ListingsAPI(api_key=os.environ["LISTINGSAPI_KEY"]) try:    location = client.locations.create(input=payload)except APIError as e:    # Raised for a non-2xx status (AuthenticationError, ValidationError, and    # so on) and for an error payload returned inside a 200 body.    raise RuntimeError(f"Listings API error: {e}") from e

HTTP API を直接使用する場合も、ステータスコード、次にレスポンスのペイロードという同じ 2 つの確認を明示的に行います。

Python
resp = requests.post(    "https://listingsapi.com/api/v4/locations",    headers={"Authorization": f"API {os.environ['LISTINGSAPI_KEY']}"},    json=payload,    timeout=30,)resp.raise_for_status()body = resp.json() op = (body.get("data") or {}).get("createLocation") or {}if op.get("errors"):    messages = [e["message"] for e in op["errors"]]    raise RuntimeError(f"Listings API error: {messages}")

Python SDK は、この両方を処理します。各 HTTP ステータスを型付きの例外にマッピングし、200 ボディ内で返されるエラーペイロードに対しても例外を発生させます。