Skip to main content
GET
Get one review

Authorizations

Authorization
string
header
required

An agent key (rpk_...) created in Settings → API & MCP, sent as Authorization: Bearer rpk_.... Bearer only: a cookie session can never drive this API. An OAuth 2.1 access token obtained from the same host works identically and lands on the same ceiling.

Headers

X-Workspace-Id
string

Which workspace to read. Omit it and you get the account’s home workspace, which on an agency account is often not where the live businesses are. A workspace this credential cannot read is refused with 403 rather than quietly answered from the default.

Path Parameters

id
string
required

The review id.

Response

The review.

id
string

Unique id.

location_id
string
google_review_id
string
source
enum<string>

Which platform this review came from. Drives the reply dispatcher and source-aware UI.

Available options:
google,
facebook
source_id
string

Platform-native identifier for this review. For GBP: matches google_review_id. For Facebook: the open_graph_story.id we comment on when replying.

source_metadata
object

Free-form platform-specific extras (e.g. Facebook recommendation_type, reply_comment_id). Generic code should not read from this.

reviewer_name
string
reviewer_photo_url
string
reviewer_is_local_guide
boolean
star_rating
integer | null

Null for sources without a 1-5 rating (Facebook recommendations). Charts that aggregate on rating should exclude null rows.

review_text
string
review_language
string
review_created_at
string
review_updated_at
string
reply_text
string
reply_created_at
string
reply_updated_by
string
sentiment
enum<string>
Available options:
positive,
neutral,
negative,
mixed
sentiment_score
number
key_topics
string[]
emotion
enum<string>
Available options:
joy,
anger,
sadness,
fear,
surprise,
disgust,
neutral
is_flagged
boolean
flag_reason
string
is_read
boolean
needs_response
boolean
priority
enum<string>
Available options:
urgent,
high,
medium,
low
ai_suggested_response
string
notes
string
synced_at
string
gbp_api_synced_at
string

Last time the Google Business Profile API returned this review. Absent on reviews imported another way.

removed_at_source_at
string | null

Set when a VERIFIED-COMPLETE fetch of the source listing did not return this review — i.e. the reviewer deleted it, or the platform moderated it away. A soft flag rather than a delete so reply history and past analytics survive and a source-side glitch is recoverable: the row is cleared back to null the moment the source returns the review again. Rows carrying it are excluded from the response queue, the review lists, and every analytics denominator (server/lib/reviewVisibility.js + src/lib/reviewVisibility.js). Only ever written off a complete pass — see server/lib/reviewPruning.js.

auto_response_status
enum<string>

Lifecycle of the auto-response worker for this review. 'pending' = scheduled, awaiting fire time. 'sent' = AI reply was generated and posted to the source. 'skipped' = the rating wasn't in the agency's filter, or auto-response was disabled at sync time, or the review already had a reply. 'failed' = a fire attempt errored (see auto_response_error). Null/absent on review rows that pre-date the feature.

Available options:
pending,
sent,
skipped,
failed
auto_response_scheduled_at
string

ISO timestamp the worker will fire at. Picked once at review-insert time as a uniform random value in [now+min_delay, now+max_delay] from the agency's auto_response_settings. Surviving process restarts is the whole point of stamping it on the row.

auto_response_error
string

Last error message when auto_response_status='failed'. Used to surface the failure on the review card without a separate audit table.