商家資訊
每個商家資訊端點皆附有 cURL、Python 和 Node 範例:進階發布平台的同步狀態、語音助理、各地點及各帳戶的重複商家資訊偵測,以及重複商家資訊移除。
商家資訊是單一地點在單一發布平台目錄中的項目。建立地點時,系統會為您方案中的每個發布平台將一筆商家資訊加入佇列,而商家資訊端點可讀取每筆商家資訊的目前狀態、列出偵測到的重複商家資訊,並確認或排除這些項目。四個 GET 端點可使用 Read(讀取)金鑰;兩個 POST 端點則需要 Write(寫入)金鑰。
端點一覽
讀取進階商家資訊狀態
GET /locations/{locationId}/listings/premium
在 data.listingsForLocation 下,為地點方案中的每個進階發布平台回傳一筆記錄。這是一般陣列,不是分頁清單。同層路徑 /listings/additional 會以相同結構回傳免費目錄;此處沒有 listingType 查詢參數,傳入該參數的值會被忽略。
參數
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "listingsForLocation": [ { "id": "TGlzdGluZzoxMDQ0Njg3MjM=", "site": { "databaseId": "1", "name": "Google Maps", "url": "maps.google.com" }, "syncStatus": "REQUIRING_ACTION", "displayStatus": "Connect your account to sync the listing", "actionRequired": true, "listingUrl": null, "syncIssue": null, "lastUpdate": "2026-07-06T18:33:28Z" }, { "id": "TGlzdGluZzoxMDQ0Njg3Mjc=", "site": { "databaseId": "387", "name": "BeLocalFocussed", "url": "belocalfocussed.com" }, "syncStatus": "SYNCED", "displayStatus": "Synced", "actionRequired": false, "listingUrl": "https://belocalfocussed.com/jenny-home-26x0ffkd0e", "syncIssue": null, "lastUpdate": "2026-07-06T18:33:30Z" }, { "id": "TGlzdGluZzoxMDQ0Njg3MDk=", "site": { "databaseId": "301", "name": "Local Mint", "url": "localmint.com" }, "syncStatus": "FAILED", "displayStatus": "Partner experiencing issues; awaiting response", "actionRequired": false, "listingUrl": null, "syncIssue": "Publisher requires website URL", "lastUpdate": "2026-07-06T18:34:03Z" } ] }}請根據 syncStatus 進行分支處理。向使用者顯示 displayStatus、讀取 syncIssue 以瞭解發布平台提供的原因,並使用 lastUpdate 找出停滯的提交項目。只有已上線的資料列才會設定 listingUrl。
在連結對應帳戶之前,Google Maps、Facebook 和 Waze 會維持在 REQUIRING_ACTION,並帶有 displayStatus: "Connect your account to sync the listing"。對新地點而言,這是預期行為。
讀取語音助理狀態
GET /locations/{locationId}/voice-assistants
在 data.voiceAssistantsForLocation 下,為每個語音助理回傳一筆記錄:Google Assistant、Amazon Alexa、Apple Siri、Microsoft Cortana 和 Samsung Bixby。這是一般陣列,其狀態種類比進階商家資訊端點少。
參數
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/voice-assistants \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "voiceAssistantsForLocation": [ { "databaseId": "104468723", "voiceIdentifier": "GOOGLE_ASSISTANT", "name": "Google Assistant", "connectedAccountId": null, "syncStatus": "REQUIRING_ACTION", "actionRequired": true, "syncIssue": null, "errors": [] }, { "databaseId": "104468711", "voiceIdentifier": "SIRI", "name": "Siri", "connectedAccountId": null, "syncStatus": "IN_PROGRESS", "actionRequired": false, "syncIssue": null, "errors": [] } ] }}請標記所有 actionRequired 為 true 或已設定 syncIssue 的資料列。errors 包含發布平台端的錯誤字串,而在適用時,connectedAccountId 會指出用於執行同步的已連結帳戶。Google Assistant 的結果來自 Google Business Profile 連線,因此未連結 Google 帳戶是其需要處理的最常見原因。Siri 的結果來自該地點在 Apple Maps 上的商家資訊。
彙總帳戶內的重複商家資訊
GET /locations/listings/duplicates
在 data.duplicateListingsRollup 下傳回此金鑰可查看的所有已偵測重複商家資訊,涵蓋帳戶內的所有地點與發布平台。此端點採用位移式分頁:輸入 page 和 perPage,輸出 records[] 以及 pageInfo.totalRecords、pageInfo.totalPages 和 pageInfo.hasNextPage。篩選條件是平面查詢參數,而非 JSON。未提供任何參數時,status 預設為 POTENTIAL,tag 預設為 all,因此不帶參數的呼叫會傳回帳戶內尚未處理的重複商家資訊。
參數
Python 和 Node 包裝函式僅提供 tag 和 page。若要依 status 或 siteId 篩選,或設定 perPage,請依照處理重複商家資訊中的示範,直接呼叫路由。
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=POTENTIAL&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "duplicateListingsRollup": { "pageInfo": { "hasNextPage": true, "hasPreviousPage": false, "totalPages": 34, "totalRecords": 1673 }, "records": [ { "id": "3329229", "name": "Woodbury Train Station", "nameValid": false, "duplicateProcessingState": "POTENTIAL", "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450", "locationId": "73451", "siteName": "City Squares", "siteUrl": "citysquares.com" } ] } }}彙總結果會告訴您重複商家資訊位於何處:每筆記錄都會列出 locationId 和 siteName。duplicateProcessingState 與個別地點端點以 status 回報的生命週期狀態相同。請一次讀取一頁,直到 hasNextPage 為 false;以緊密迴圈連續呼叫最容易觸發 429。
列出單一地點的重複商家資訊
GET /locations/{locationId}/listings/duplicates
在 data.duplicateListingsForLocation 下傳回單一地點的所有已偵測重複商家資訊,並依發布平台網站分組。結果為一般陣列。每個群組代表一個網站(name、url),包含一個 listings 陣列,而每個項目都帶有兩個標記端點皆接受的 listingItemId。空陣列表示未偵測到任何重複商家資訊。
參數
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/duplicates \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "duplicateListingsForLocation": [ { "id": "U2l0ZToxNTA=", "name": "City Squares", "url": "citysquares.com", "listings": [ { "id": "RHVwbGljYXRlOjIzNTk4NDUw", "listingItemId": "TGlzdGluZ0l0ZW06MjM1OTg0NTA=", "name": "Woodbury Train Station", "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450", "status": "POTENTIAL" } ] } ] }}開啟 liveLink 以檢視該項目,然後保留 listingItemId。在 Node SDK 中,應傳入的值是扁平化後的 d.id。status 使用的四個值與上述帳戶彙總相同。
將商家資訊項目確認為重複
POST /locations/listings/mark-as-duplicate
將商家資訊項目標記為已確認重複,以便由發布平台移除。請在 input 下傳送 listingItemId 值,並將同一地點的所有已確認項目合併為一次批次呼叫,而非每個項目各呼叫一次。這是寫入操作,需要 Write(寫入)金鑰。
參數
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="] }}'{ "data": { "markAsDuplicate": { "success": true, "errors": null } }}success: true 表示項目已被接受,並轉為 PROCESSING。帶有 success: false 的 200,或 400,都會附帶一個 errors 陣列,其中各項目包含 code、message 和 path;常見原因是 id 未知或格式錯誤。Python SDK 會傳回承載資料;Node SDK 則會拋出 ValidationError,因此 promise 成功解析就表示操作成功。
將商家資訊項目排除為非重複
POST /locations/listings/mark-as-not-duplicate
將疑似重複商家資訊判定為誤判並予以排除。偵測機制採取保守判定,會標記同一加盟體系的其他分店、第二個合法商家檔案,或已更名的地點。排除後,這些項目就不再出現在兩個重複商家資訊端點的結果中。此端點接受的主體與上述端點完全相同,也可用來撤銷誤標的項目。
參數
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-not-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="] }}'{ "data": { "markAsNotDuplicate": { "success": true, "errors": null } }}回應為 data.markAsNotDuplicate,並包含與標記為重複的呼叫相同的 success 和 errors 欄位。已排除的項目會記錄為已確認非重複,且不會在下一輪偵測時再次出現。
您會遇到的錯誤
所有代碼都列於 錯誤參考文件。
後續步驟
- 檢查商家資訊狀態與上線連結:運用進階商家資訊和語音助理端點建立涵蓋率儀表板。
- 找出並修正商家資訊錯誤:逐一處理
REQUIRING_ACTION和FAILED資料列。 - 處理重複商家資訊:涵蓋四個重複商家資訊端點的審查流程,包含狀態追蹤。
- 連結 Google 並匯入地點:連結 Google Maps 和 Google Assistant 使用的 Google Business Profile。
- 連結 Apple Business Connect:透過擁有者已驗證的 Apple Business 帳戶發布至 Apple Maps。
- 資源入口:商家資訊。SDK 參考文件:Python 商家資訊、Node 商家資訊。