Connect Review Site (MANAGER_INVITE publisher flow)
Overview
Drives the MANAGER_INVITE publisher connect flow for one store-review-site row (Yelp / TripAdvisor / Expedia / Booking.com / DoorDash / …). It requires a completed review-pull first. It then calls ReviewData /get-publisher-info (cache hit) or /create-publisher-account (cache miss), and returns the business-manager alias plus the live connection status mirrored from RD.
Prerequisites
- A bearer token. Callable with Partner and Account tokens.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/store-review-site/{id}/connect
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Partner and Account tokens.
-
Authenticate with a bearer token OR an invite
hash. -
Registered in the public group. Authenticated callers must have the
{id}row pass an ownership check (Partner or Account hierarchy). -
A
hash(tokenless) must decode to[store_id, 15]matching the row's store. -
It differs per role only by reachable scope.
Rate limit
- 30 requests/min.
Request body
- Path:
{id}(integer, required) — thestore_review_sitesrow id (mapped tostore_review_site_id). - Body:
| Field | Type | Required | Description |
|---|---|---|---|
hash | string | hash flow only | Invite hashid [store_id, 15]; grants tokenless access; the path row must belong to the encoded store. |
{
"hash": "<hash>"
}Response
identity_address,publisher_key,publisher_account_id,connection_status,is_connected,lock_color,sendto_scrapper,publisher_url,auth_type,scraping_enabled,posting_enabled,last_scraped_at,disconnect_reason,is_valid_credential,is_valid_cookie,url_status,credential_status,cookie_status,last_response_posted_at,status_synced_at,is_premium,client_confirmed_at,disconnect_source,error_code,source(e.g.rd_get_info|rd_provisioned|rd_already_existed|rm_oauth_not_connected).- Returns 422 (
please pull data first) when no completed review-pull job exists yet, 400 on RD failure, 404 when the row is not found.
200 OK - connection status · 200
200{
"data": {
"identity_address": "[email protected]",
"publisher_key": "yelp.com",
"publisher_account_id": "acct_8812",
"connection_status": "Pending invite",
"is_connected": 0,
"lock_color": "amber",
"sendto_scrapper": "Y",
"publisher_url": "https://www.yelp.com/biz/en-fuego-cantina-and-grill-del-mar",
"auth_type": "manager_invite",
"scraping_enabled": true,
"posting_enabled": true,
"is_premium": false,
"last_scraped_at": null,
"disconnect_reason": "Invite the business manager alias to finish connecting.",
"is_valid_credential": null,
"is_valid_cookie": null,
"url_status": "enable",
"credential_status": null,
"cookie_status": null,
"last_response_posted_at": null,
"status_synced_at": "2026-06-22T09:53:28+00:00",
"client_confirmed_at": null,
"disconnect_source": null,
"error_code": null,
"source": "rd_provisioned"
}
}422 Unprocessable Entity - pull data first · 422
422{
"message": "Please pull review data for this location before connecting.",
"errors": {
"connect": ["Please pull review data for this location before connecting."]
}
}422 Unprocessable Entity - invalid hash · 422
422{
"message": "Invalid or expired token.",
"errors": {
"hash": ["Invalid or expired token."]
}
}404 Not Found · 404
404{
"message": "Store review site not found.",
"errors": []
}Errors
| Status | Meaning |
|---|---|
400 | The request was rejected — the response explains why |
401 | The bearer token is missing, expired or invalid |
404 | Not Found |
422 | Unprocessable Entity - pull data first |
500 | Unexpected server error |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/store-review-site/<id>/connect" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"hash": "<hash>"}'Updated 9 days ago
