レビュー

すべてのレビューエンドポイントにcURL、Python、Nodeのサンプルを掲載しています。ソースと設定、一覧、集約、詳細、返信、編集、アーカイブ、フレーズ、分析を扱います。

レビューは、顧客がGoogle、Facebook、Yelpに投稿する星評価とコメントです。APIは各レビューのコピーを1件ずつ保存し、返信機能を提供し、レビュー分析を行います。RESTのパスではreviewsを使用しますが、レスポンスのキーとリファレンスページのタイトルでは、同じオブジェクトの旧内部名であるinteractionsを使用します。このガイドでは、一貫してレビューと呼びます。読み取りにはRead(読み取り)キーが必要です。返信、編集、アーカイブ、設定変更にはWrite(書き込み)キーが必要です。Readキーで書き込みを行うと、SY90016を伴う400が返されます。

エンドポイント一覧

メソッドパス機能リファレンス
GET/reviews/site-configアカウントのプランで利用できるレビューソースを取得します。アカウントのレビューソース一覧を取得する
GET/locations/{locationId}/reviews/settings1つの拠点に設定されているソースを取得します。拠点のレビューソース一覧を取得する
POST/locations/reviews/settings/edit拠点のソースと、肯定的と判定するしきい値を設定します。レビュー設定を編集する
GET/locations/{locationId}/reviews1つの拠点のレビューをカーソル方式の一覧で取得します。レビュー一覧を取得する
GET/rollup_interactionsすべての拠点を対象にカーソル方式の一覧を取得します。集約したレビューを取得する
GET/reviewDetailsidを指定して、返信を含むレビューの最新のコピーを取得します。idでレビューを取得する
レビューと返信のオブジェクトのフィールドリファレンスです。レビューの属性
POST/locations/reviews/respondオーナーの返信を投稿します。レビューに返信する
POST/locations/reviews/respond/edit返信のテキストを変更します。返信を編集する
POST/locations/reviews/respond/archive返信を追跡対象から外します。返信をアーカイブする
GET/review-phrases顧客が繰り返し使うフレーズを統計とともに取得します。レビューのフレーズ一覧を取得する
GET/locations/{locationId}/review-analytics-overview4つのKPIを期間間の差分とともに取得します。レビュー分析の概要
GET/locations/{locationId}/review-analytics-timeline日別の件数と平均評価を取得します。レビュー分析のタイムライン
GET/locations/{locationId}/review-analytics-sites-statsソースごとの評価、件数、最近のレビューの状況を取得します。サイト別のレビュー分析

プランで利用できるレビューソースの一覧を取得する

GET /reviews/site-configは、アカウントで利用が認められているレビュープラットフォームのカタログを返します。パラメーターは不要で、アカウント単位の情報を返すため、拠点ごとに呼び出すのではなくキャッシュしてください。siteUrlの値は、このリソースのほかのすべてのフィルターで使用できるホスト名です。

名前指定場所必須注記
なしパラメーターはありません。
Account sources
curl https://listingsapi.com/api/v4/reviews/site-config \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionSiteConfig": [      { "site": "Google", "siteUrl": "maps.google.com" },      { "site": "Facebook", "siteUrl": "facebook.com" },      { "site": "Yelp", "siteUrl": "yelp.com" }    ]  }}

data.interactionSiteConfig[]を確認してください。この例はLaunchプランのアカウントのもので、具体的な内容はプランと業種によって異なります。一覧エンドポイントのsiteUrlsフィルターと、設定を編集する際のsiteUrls[].nameには、siteUrlを使用してください。

拠点に設定されているソースの一覧を取得する

GET /locations/{locationId}/reviews/settingsは、プランでサポートされているプラットフォームごとに1件のエントリを、レビューの取得元URLとともに返します。これは、後述の編集エンドポイントに対応する読み取り用エンドポイントです。パスにはbase64 idまたは通常の数値を指定できます。

名前指定場所必須注記
locationIdpathはいbase64 Relay idまたは数値のdatabaseIdです。
Location sources
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews/settings \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsSetting": {      "siteSettings": [        { "name": "maps.google.com", "url": null },        { "name": "facebook.com", "url": null },        { "name": "yelp.com", "url": null }      ]    }  }}

data.interactionsSetting.siteSettings[]を確認してください。urlがnullでなければ、そのプラットフォームが接続されており、そのページからレビューが取得されていることを意味します。urlがnullであれば、そのプラットフォームは利用可能ですが、未設定であることを意味します。GoogleとFacebookは、OAuthでそれぞれのアカウントを接続すると自動的に設定され、編集エンドポイントでは上書きできません。Yelpは明示的に指定する必要があります。

拠点のレビュー設定を編集する

POST /locations/reviews/settings/editは、拠点について監視するソースと、肯定的と判定する星評価を設定します。フィールドはinputでラップせず、リクエストボディに直接指定します。ソースを追加するとスクレイピングがキューに登録されるため、新しいサイトのレビューはこのレスポンスには含まれず、後から取り込まれます。

名前指定場所必須注記
locationIdbodyはいbase64 Relay idのみ使用できます。リクエストボディに数値のidを指定すると、SY90002で失敗します。
siteUrlsbodyいいえnameとurlのペアで表した、ソースの完全なセットです。現在の選択内容を置き換えます。
siteUrls[].namebodyいいえsiteSettings[].nameで取得したサイトキーです。maps.google.comやyelp.comなどを指定します。
siteUrls[].urlbodyいいえそのサイト上の拠点のページです。nullを指定するか省略すると、URLが必要なソースの監視を停止します。
positiveInteractionThresholdbodyいいえこの値以上の評価を持つレビューを肯定的と判定します。このフィールドだけを送信した場合、ソースは変更されません。
Edit settings
curl -X POST https://listingsapi.com/api/v4/locations/reviews/settings/edit \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "locationId": "TG9jYXRpb246MTgwMDI4OQ==",  "positiveInteractionThreshold": 4,  "siteUrls": [    { "name": "maps.google.com", "url": null },    { "name": "yelp.com", "url": "https://www.yelp.com/biz/blue-bottle-coffee-oakland" }  ]}'
JSON
{  "data": {    "editInteractionsSetting": {      "errors": null,      "interactionSetting": {        "locationId": "1800289",        "positiveInteractionThreshold": 4,        "siteSettings": [          { "name": "maps.google.com", "url": null, "monitored": true, "canRespond": true },          { "name": "yelp.com", "url": "https://www.yelp.com/biz/blue-bottle-coffee-oakland", "monitored": true, "canRespond": false }        ]      }    }  }}

保存されている選択内容はdata.editInteractionsSetting.interactionSetting.siteSettings[]で確認してください。monitoredはソースが有効であることを示し、canRespondはAPIを通じてそのソースにオーナーの返信を投稿できるかどうかを示します。到達できないURLやプランの対象外のサイトなど、検証で拒否されたソースは、設定が変更されないままerrorsに含まれて返されるため、200の場合はerrorsを確認してください。その場合、SDKはValidationErrorを送出します。

拠点のレビューを一覧表示する

GET /locations/{locationId}/reviewsは、data.interactionsにカーソル方式のコネクションを返し、結果は新しい順に並びます。firstのデフォルトは20のため、1回の呼び出しで履歴全体を取得することはできません。配列フィルターはクエリ文字列内のJSON文字列であり、URLエンコードが必要です。cURLのサンプルでは、そのために-Gと--data-urlencodeを使用しています。

名前指定場所必須注記
locationIdpathはいBase64のRelay id、または数値のdatabaseIdです。
first, afterqueryいいえ前方へのページングです。pageInfo.endCursorをafterとして渡します。
last, beforequeryいいえ後方へのページングです。pageInfoにはstartCursorがないため、最初のedgeのcursorを渡します。
siteUrlsqueryいいえホスト名のJSON配列です(例:["maps.google.com"])。
ratingFiltersqueryいいえ星評価のJSON配列です(例:[1,2])。
responseStatusqueryいいえJSON配列です:["PENDING"]または["RESPONDED"]。
sortOrderqueryいいえJSON配列です:["NEWEST_FIRST"]、["OLDEST_FIRST"]、または["LAST_RESPONDED"]。
startDate, endDatequeryいいえYYYY-MM-DDを通常の文字列で指定します。
searchStringqueryいいえレビュー本文の全文検索です。

これらに加えて、リファレンスページに記載されている任意のcategory、categories、および単一値のratingFilterも使用できます。

List reviews
curl -G "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/reviews" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'ratingFilters=[1,2]' \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=25'
JSON
{  "data": {    "interactions": {      "pageInfo": { "hasNextPage": true, "endCursor": "SW50ZXJhY3Rpb246MV8xNTU0..." },      "edges": [        {          "node": {            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",            "source": "maps.google.com",            "content": "nice place for family together",            "authorName": "vaibhav nakate",            "rating": 5,            "date": "2019-04-02T22:11:13.036997+00:00",            "type": "Review",            "responded": false,            "responseCount": 0,            "canRespond": true,            "permalink": "https://maps.google.com/maps?cid=..."          },          "cursor": "SW50ZXJhY3Rpb246MV8xNTU0..."        }      ],      "totalCount": 425    }  }}

edges[].nodeを読み取ります。idは返信時に渡す値で、canRespondはそのソースがオーナーからの返信を受け付けるかどうかを示します。totalCountは、このページ内ではなく、結果セット全体で一致した件数です。hasNextPageがfalseになった場合、またはページが空のedgesを返した場合はページングを終了します。境界が最も古いレビューと一致する場合、その次に空のページが1つ返されます。

フィルター値
responseStatusRESPONDED, PENDING
sortOrderNEWEST_FIRST, OLDEST_FIRST, LAST_RESPONDED
categoryREVIEWに加え、アカウントごとに公開されているその他の分類

集約エンドポイントで全拠点のレビューを取得する

GET /rollup_interactionsは、キーで参照できるすべての拠点を対象とする同じカーソル方式のコネクションで、data.rollupInteractionsにあり、各ノードに数値のlocationIdが含まれます。拠点ごとの一覧と同じフィルターを受け付けます。拠点フィルターはなく、locationIds引数は拒否されずに無視されます。どちらのSDKもまだこのエンドポイントのラッパーを提供していないため、サンプルではrequestsとfetchを使用しています。

名前指定場所必須注記
tagqueryいいえ対象を絞り込むための拠点タグです。デフォルトはallです。拠点にタグを付けていない場合は省略します。
first, after, last, beforequeryいいえ一覧エンドポイントと同じカーソルページングです。
siteUrls, ratingFilters, responseStatus, sortOrderqueryいいえURLエンコードされたJSON配列で、一覧エンドポイントと同じ値を使用します。
startDate, endDate, searchStringqueryいいえ一覧エンドポイントと同じです。
Account rollup
curl -G "https://listingsapi.com/api/v4/rollup_interactions" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'responseStatus=["PENDING"]' \--data-urlencode 'sortOrder=["NEWEST_FIRST"]' \--data-urlencode 'first=50'
JSON
{  "data": {    "rollupInteractions": {      "pageInfo": { "hasNextPage": true, "hasPreviousPage": false },      "edges": [        {          "node": {            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",            "source": "maps.google.com",            "content": "Excellent service, highly recommend.",            "rating": 5,            "responded": false,            "canRespond": true,            "locationId": 1800289          },          "cursor": "SW50ZXJhY3Rpb246OWUyNmQyYTg="        }      ],      "totalCount": 1284    }  }}

店舗のdatabaseIdであるlocationIdでノードをグループ化します。集約結果のpageInfoにはendCursorが含まれない場合があるため、最後のedgeのcursorをafterとして使用します。これら2つの値は同等です。スケジュール実行では、履歴を再取得する代わりにstartDateとendDateで範囲を制限し、429の場合はRetry-Afterに従います。

idでレビューを取得する

GET /reviewDetailsは、保存されているレビューの最新のコピーをページングなしで返します。レスポンスはdata.interactionDetails.interactionsにある通常の配列で、edgesやpageInfoはなく、各レビューにはそのresponsesが含まれます。ウォッチリストのデータを再取得したり、編集やアーカイブに必要なresponseIdを見つけたりする際に使用します。

名前指定場所必須注記
interactionIdsqueryはいURLエンコードされたレビューUUIDのJSON配列です。省略するとSY90006が返されます。
Details by id
curl -G "https://listingsapi.com/api/v4/reviewDetails" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'interactionIds=["b2fa765e-c62b-4e0b-b1d6-1c67c855f5e0"]'
JSON
{  "data": {    "interactionDetails": {      "interactions": [        {          "id": "b2fa765e-c62b-4e0b-b1d6-1c67c855f5e0",          "source": "maps.google.com",          "content": "Great place for dessert!",          "rating": 5,          "responded": true,          "responseCount": 1,          "canRespond": true,          "responses": [            {              "id": "2090753a-ece6-4837-8336-8494ad308523",              "content": "Thank you so much for the kind words!",              "interactionStatus": "CONFIRMED",              "editedResponse": false            }          ]        }      ]    }  }}

responses[].idは、編集およびアーカイブのエンドポイントで使用するresponseIdです。別のアカウントのidを指定すると、interactionDetails: nullとSY90001エラーを含む200が返されるため、インデックスでアクセスする前にnullを確認します。

レビューと返信のフィールド

属性リファレンスは、レビューオブジェクトと返信オブジェクトのすべてのフィールドを一覧にした、ドキュメント専用のページです。特によく使用するフィールドは次のとおりです:

フィールド型意味
id, interactionIdstring同じUUIDです。返信時にinteractionIdとして渡します。
sourcestringmaps.google.comなどのサイトのホスト名です。
content, authorName, rating, datemixed本文、レビュー投稿者、1〜5の星評価、ISO 8601形式のタイムスタンプです。
typestringReview、Question、Comment、Recommendation、Post、Photo、Message、またはResponseです。
categorystring大分類で、ReviewまたはSocialです。
responded, responseCount, responsesmixedオーナーからの返信の有無、返信件数、および返信オブジェクトです。
canRespondbooleanAPIを通じてこのソースに返信を投稿できるかどうかを示します。
permalinkstringソースサイト上のレビューへのリンクです。
locationIdinteger拠点の数値のdatabaseIdです。

responses[]内の各返信には、id、content、authorName、date、interactionStatus、editedResponse、respondedWith(テンプレートid)、およびremarks(失敗の詳細)が含まれます。interactionStatusは次の状態を遷移します:

ステータス意味
CREATED受け付けられ、掲載先への送信キューに登録されています。
COMPLETED掲載先に投稿されています。一部のプラットフォームではここが最終状態です。
CONFIRMED投稿され、掲載先による確認が完了しています。
FAILED掲載先が拒否しました。remarksに理由が示されます。

オーナーからの返信を投稿する

POST /locations/reviews/respondは元のプラットフォームに公開返信を投稿します。各フィールドはbodyに直接指定します。返信は即座に受け付けられ、非同期で配信されるため、interactionStatusはCREATEDから始まります。まず、レビューのcanRespondを確認してください。

名前指定場所必須注記
interactionIdbodyはいレビューのidです。
responseContentbodyはい返信の本文です。
respondedWithbodyいいえ返信をテンプレートから作成した場合は、その返信テンプレートのidです。
Respond
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseContent": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!"}'
JSON
{  "data": {    "respondToInteraction": {      "interaction": {        "id": "2090753a-ece6-4837-8336-8494ad308523",        "interactionId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",        "content": "Thank you for visiting Jenny Home: we are glad you enjoyed your experience!",        "interactionStatus": "CREATED",        "editedResponse": false      },      "errors": null    }  }}

interaction.idは編集とアーカイブに使用するresponseIdなので、保存しておいてください。拒否された返信は200として返され、data.respondToInteraction内のerrorsに値が設定されるため、bodyを確認してください。SDKはValidationErrorを送出します。少し待ってからidでレビューを再取得し、返信がCOMPLETEDまたはCONFIRMEDになったことを確認してください。

返信を編集する

POST /locations/reviews/respond/editは既存の返信の本文を変更します。編集内容はプラットフォームに再送信されるため、interactionStatusはCREATEDに戻り、反映されるとeditedResponseがtrueになります。返信が1件のみ許可されるプラットフォームでは、アーカイブして再投稿するよりも、この方法を優先してください。

名前指定場所必須注記
reviewIdbodyはいレビューのidです。
responseIdbodyはいresponses[]から取得した返信のidです。
responseContentbodyはい新しい返信の本文です。
templateIdbodyいいえ返信の関連付け先を変更するための返信テンプレートのidです。
Edit reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/edit \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",  "responseId": "2090753a-ece6-4837-8336-8494ad308523",  "responseContent": "Thank you again: we have updated our reply to include our new store hours."}'
JSON
{  "data": {    "editResponse": {      "status": "true",      "reviewId": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",      "responseId": "2090753a-ece6-4837-8336-8494ad308523"    }  }}

編集が受け付けられると、statusは文字列"true"になります。詳細取得の呼び出しで新しい文面を確認し、返信のinteractionStatusを確認してください。

返信をアーカイブする

POST /locations/reviews/respond/archiveは、当サービス側で追跡しているレビューのresponsesから返信を削除します。これは論理削除であり、Google、Yelp、Facebookですでに公開されている返信は、そのまま残ります。失敗した下書きや別の下書きに置き換えられた下書きを削除する場合に使用し、公開済みの返信には編集を使用してください。

名前指定場所必須注記
responseIdbodyはいresponses[]から取得した返信のidです。
Archive reply
curl -X POST https://listingsapi.com/api/v4/locations/reviews/respond/archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "responseId": "2090753a-ece6-4837-8336-8494ad308523" }'
JSON
{  "data": {    "archiveResponse": {      "status": "true"    }  }}

アーカイブすると、レビューのresponseCountが減少し、respondedに残りの返信が反映されます。

顧客が繰り返し使うフレーズを一覧表示する

GET /review-phrasesはdata.newReviewPhrasesに通常の配列を返し、繰り返し使われるフレーズごとに1つのエントリが含まれ、各エントリにはそのフレーズを含むレビューのみを対象に算出された統計が含まれます。ページネーションはないため、phraseCountで上限を設定してください。すべてのフィルターは任意で、組み合わせて使用できるため、ratingFilters=[1,2]とstartDateを指定すると、前四半期の苦情を取得できます。

名前指定場所必須注記
locationIdsqueryいいえ数値の拠点idを格納したJSON配列です(例:[1800289])。省略すると、キーで読み取れるすべての拠点が対象になります。
siteUrlsqueryいいえホスト名のJSON配列です。
startDate, endDatequeryいいえYYYY-MM-DDです。
ratingFiltersqueryいいえ星評価のJSON配列です。
responseStatusqueryいいえRESPONDEDまたはPENDINGを格納したJSON配列です。
sortOrderqueryいいえNEWEST_FIRST、OLDEST_FIRST、LAST_RESPONDED、LOWEST_RATING、またはHIGHEST_RATINGです。
phraseCountqueryいいえ返すフレーズの最大数です。
searchStringqueryいいえこの部分文字列を含むフレーズのみが対象です。

このほか、リファレンスページに記載されている任意のcategoriesと、非推奨の単一値パラメーターcategoryおよびratingFilterも使用できます。

Phrases
curl -G "https://listingsapi.com/api/v4/review-phrases" \-H "Authorization: API $LISTINGSAPI_KEY" \--data-urlencode 'locationIds=[1800289]' \--data-urlencode 'ratingFilters=[1,2]' \--data-urlencode 'startDate=2026-06-01' \--data-urlencode 'endDate=2026-08-31' \--data-urlencode 'phraseCount=10'
JSON
{  "data": {    "newReviewPhrases": [      {        "reviewPhrase": "friendly staff",        "phraseStats": {          "stats": [            { "name": "total-reviews", "value": 46, "delta": 12.5, "abs": 5 },            { "name": "overall-rating", "value": 4.7, "delta": 1.1, "abs": 0.05 }          ]        }      },      {        "reviewPhrase": "long wait",        "phraseStats": {          "stats": [            { "name": "total-reviews", "value": 11, "delta": 37.5, "abs": 3 },            { "name": "overall-rating", "value": 2.9, "delta": -8.4, "abs": -0.27 }          ]        }      }    ]  }}

total-reviewsはフレーズの出現頻度、overall-ratingはそのフレーズを含むレビューの平均評価、deltaは前期間からの変化率、absは実数での変化量です。SY90003を伴う403は、リクエストした拠点のいずれかをキーで読み取れないことを意味します。

拠点のレビューKPIを取得する

GET /locations/{locationId}/review-analytics-overviewはdata.interactionsAnalyticsStats.statsに4つの統計値を返します。日付範囲は任意で、指定すると値とその変化量の算出対象期間を絞り込めます。各deltaは、同じ長さの前期間からの変化率です。

名前指定場所必須注記
locationIdpathはいBase64形式のRelay id、または数値のdatabaseIdです。
startDate, endDatequeryいいえYYYY-MM-DDです。タイムラインとは異なり、ここでは任意です。
Overview
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-overview?startDate=2026-08-01&endDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsAnalyticsStats": {      "stats": [        { "name": "total-reviews", "value": 128, "delta": 6.67 },        { "name": "new-reviews", "value": 9, "delta": -25 },        { "name": "overall-rating", "value": 4.43, "delta": 2.31 },        { "name": "review-response-rate", "value": 62.5, "delta": 12.5 }      ]    }  }}
namevalue意味
total-reviews件数拠点のすべてのレビューです。
new-reviews件数期間内に受け取ったレビューです。
overall-rating1~5平均の星評価です。
review-response-rateパーセントオーナーからの返信があるレビューの割合です。

前期間のデータがない新しいアカウントでは、deltaが100として報告されるため、最初の月の変化量を成長と解釈しないでください。

日別のレビュータイムラインを取得する

GET /locations/{locationId}/review-analytics-timeline は、data.interactionsChartData.data に日ごとに1件のエントリを返します。グラフの対象期間を指定する必要がある場合は、必ず startDate と endDate を渡してください。省略すると、サービスが独自に期間を選択します。1つのソースだけを描画するには、site を追加してください。

名前指定場所必須注記
locationIdpathはいBase64 Relay id または数値の databaseId です。
startDate, endDatequeryいいえYYYY-MM-DD。対象期間を確実に指定するには、両方を渡してください。
sitequeryいいえsiteSettings[].name に含まれるホスト名を1つ指定します。例として maps.google.com があります。どちらの SDK もこのパラメーターを公開していないため、REST 呼び出しを使用してください。
Timeline
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-timeline?startDate=2026-08-01&endDate=2026-08-31&site=maps.google.com" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsChartData": {      "data": [        { "date": "2026-08-01", "interactionCount": 4, "averageRating": 4.5 },        { "date": "2026-08-02", "interactionCount": 0, "averageRating": null },        { "date": "2026-08-03", "interactionCount": 7, "averageRating": 4.285714285714286 }      ]    }  }}

interactionCount を棒グラフ、averageRating を折れ線グラフとして描画してください。平均値はその日のみの値で、累積平均ではありません。また、レビューがない日は null になるため、0を描画するのではなく空白にしてください。

レビュー分析をソース別に分類する

GET /locations/{locationId}/review-analytics-sites-stats は、data.interactionsSitesStats.stats にレビューソースごとに1件のエントリを返します。これを使用して、どのプラットフォームが平均値を変動させたかを確認できます。

名前指定場所必須注記
locationIdpathはいBase64 Relay id または数値の databaseId です。
startDate, endDatequeryいいえYYYY-MM-DD。差分は、この期間とその直前の同じ長さの期間を比較したものです。
By source
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/review-analytics-sites-stats?startDate=2026-08-01&endDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "interactionsSitesStats": {      "stats": [        {          "key": "google",          "siteUrl": "maps.google.com",          "averageRating": { "value": 4.6, "delta": 2.2 },          "totalInteractions": { "value": 412, "delta": 6.1 },          "newInteractions": { "value": 24, "delta": 33.3 },          "recency": "2026-09-06T14:12:00Z",          "baseRating": 4.5,          "baseInteractions": 388,          "humanizedRecency": "3 days ago"        },        {          "key": "facebook",          "siteUrl": "facebook.com",          "averageRating": { "value": 4.1, "delta": -1.4 },          "newInteractions": { "value": 0, "delta": -100 },          "recency": null,          "humanizedRecency": null        }      ]    }  }}

averageRating、totalInteractions、newInteractions には、それぞれ value と delta が含まれます。baseRating と baseInteractions は、差分の測定基準となる期間の開始時点の値です。recency は最新のレビューのタイムスタンプで、そのソースがレビューを一度も返していない場合は null です。newInteractions が 0 で、recency が数か月前の場合、通常はソース接続が更新されなくなっていることを意味するため、拠点のソースを確認してください。

発生するエラー

コード意味対処方法
SY90016書き込みに Read キーが使用されています。Write キーを使用してください。
SY90001認証または認可に失敗しています。キーが無効であるか、レビュー id が別のアカウントのものです。/reviewDetails では、interactionDetails: null を伴う 200 として返されます。キーと id を確認してください。
SY90002id が無効です。設定編集のリクエストボディに数値の locationId が指定されています。base64 Relay id を送信してください。
SY90003403。このキーでは、この拠点の読み取りや変更ができません。この拠点にアクセスできるキーを使用してください。
SY90006/reviewDetails に interactionIds がありません。id の JSON 配列を渡してください。
SY50121Google レビューに対するオーナーからの2件目の返信です。既存の返信を編集してください。
429レート制限です。Retry-After を待ってください。レート制限 を参照してください。

書き込みでは、data.<op> 内の errors に値が設定された状態で 200 が返される場合もあるため、すべての書き込みでレスポンスボディを確認してください。完全な一覧は エラーコード にあります。

次の手順