/api/v4/connected-accounts/connect-listingConnect a listing to a location
Links a specific Google Business Profile or Facebook listing to a Listings API location.
Parameters
Body
| Name | Type | Required | Description |
|---|---|---|---|
| input | object | required | Wrapper object. The entire request body must be nested under `input`. |
| input.locationId | string | required | Base64-encoded location Relay ID (e.g. `TG9jYXRpb246MTgwMDI4OQ==`) of the Listings API location to link the listing to. |
| input.connectedAccountId | string | required | ID of the connected account (Google or Facebook) that owns the listing. Taken from `GET /connected-accounts`. |
| input.connectedAccountListingId | string | required | ID of the listing within that connected account to link. Taken from the `id` of a record returned by `POST /connected-accounts/connected-account-listings`. |
Sample request
Ready-to-paste body. Replace placeholder IDs and values with yours.
{
"input": {
"locationId": "TG9jYXRpb246MTgwMDI4OQ==",
"connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",
"connectedAccountListingId": "R29vZ2xlTG9jYXRpb246ODc3NTkzNGItNTA5OC00ZDBhLThiNDQ="
}
}Responses
200Request accepted. `success` is `true` when the listing was linked; when it cannot be linked `success` is `false` and `message` explains why (for example, `Listing record not found`).
{
"data": {
"connectListing": {
"message": null,
"success": true
}
}
}400Bad request, the body was not wrapped in `input`, or a required field was omitted. Note the field is `connectedAccountListingId`, not `listingId` (GraphQL rejects `listingId` with `did you mean locationId?`).
401Unauthenticated, missing or invalid API key.
Associates a publisher listing (Google Business Profile or Facebook Page) with a Listings API location so listing data stays in sync. Unlike the suggestion-driven flow, this endpoint links a single listing you have already chosen, no match confirmation step required.
Request shape. The body must be wrapped in an input object with three required fields: locationId (the base64-encoded location Relay ID), connectedAccountId (the account that owns the listing), and connectedAccountListingId (the specific listing to link). There is no listingId field, it is rejected by the schema. Retrieve connectedAccountId from GET /connected-accounts and connectedAccountListingId from the id of a record returned by POST /connected-accounts/connected-account-listings.
Use case: manual linking when auto-match is ambiguous. Two nearby storefronts share a similar name and trigger-matches cannot decide which Google listing belongs to which Listings API location. Pull the listings for the connected account, let an operator pick the correct one, and link it directly with this endpoint, bypassing the suggestions/confirm flow entirely.
If the connection fails the response returns success: false with a non-null message describing the reason, for example, Listing record not found when the connectedAccountListingId does not resolve, or a message indicating the listing is already connected to another location. For accepting system-suggested matches in bulk instead, use the confirm-matches endpoint.
curl -X POST 'https://listingsapi.com/api/v4/connected-accounts/connect-listing' \
-H "Authorization: API $LISTINGSAPI_KEY" \
-H 'Content-Type: application/json' \
-d '{
"input": {
"locationId": "TG9jYXRpb246MTgwMDI4OQ==",
"connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",
"connectedAccountListingId": "R29vZ2xlTG9jYXRpb246ODc3NTkzNGItNTA5OC00ZDBhLThiNDQ="
}
}'