Save (creates or updates) a response to a review and queues it for posting to the live review site. Runs posting/connection/feature gates, site-specific character-limit checks, records billable usage, dispatches the platform post job (Google/Facebook/Caring/RD), and audit-logs the result.
Auth: Both — authentication (flat /response/* route, account-scoped at the controller level). review_id resolves to its store's company_id and validated by an ownership check, then re-checked against — failures return Access denied (403). Reachable scope is hierarchy-based: a partner-tier user can save responses for any store under its tree; an account user only for its own stores' reviews.
Rate limit: No rate limit.
Request
- Body:
| Field | Type | Required | Notes |
|---|---|---|---|
review_id | integer | required | Must be an existing review and belong to the caller's company hierarchy. |
response | string | required | Response text. Length limits enforced per site: OpenTable (rs=16) ≤400 non-space chars; Optspot (rs=81) 80–160 chars; all sites ≤4000 chars. Must differ (case-insensitively) from the existing response. |
ai_response_id | integer | optional (nullable) | Identifier of the AI/smart response used, if any. |
ai_response | string | optional (nullable) | The AI/smart response text, if any. |
Response — { data. } envelope (also carries usage/feature response headers via withFeatureHeaders).
status(string) —"success".response(string) — confirmation message"Your response has been submitted and will be posted live".
Non-success paths return error envelopes: 403 Access denied / pre-subscription or unavailable response; 422 when posting is disabled for the site (posting) or the store↔site is not connected (connection). FeatureLimitException when the per-feature service limit/quota is exceeded; 400 for character-limit or duplicate-response violations.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
