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

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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) — the store_review_sites row id (mapped to store_review_site_id).
  • Body:
FieldTypeRequiredDescription
hashstringhash flow onlyInvite 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

{
  "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

{
  "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

{
  "message": "Invalid or expired token.",
  "errors": {
    "hash": ["Invalid or expired token."]
  }
}

404 Not Found · 404

{
  "message": "Store review site not found.",
  "errors": []
}

Errors

StatusMeaning
400The request was rejected — the response explains why
401The bearer token is missing, expired or invalid
404Not Found
422Unprocessable Entity - pull data first
500Unexpected 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>"}'

Did this page help you?