Testimonial is the single persisted source of truth for a client review in Winnerr — its rating, body, who it is about, who it is from, which transaction it came from, its approval status, its visibility, and the explicit permissions the client granted.
Testimonials are agent-governed: nothing becomes public until the agent explicitly approves and then publishes it.
Where testimonials come from
| Source | How it’s created |
|---|---|
SURVEY | Auto-promoted from a high-rated SurveyResponse where the client opted in. |
MANUAL | Created in-app by the agent (e.g. transcribed from a handwritten card). |
IMPORT | Bulk-imported from a prior platform. |
PENDING and visibility PRIVATE. The lifecycle from there is the same regardless of source.
Lifecycle
| Status | Meaning |
|---|---|
PENDING | Awaiting agent review. Not visible anywhere public. |
APPROVED | Agent has approved the content but it is not yet on the public surface. |
PUBLISHED | Visible on the public profile, the widget, and eligible for syndication. |
REJECTED | Agent declined; archived but retained for audit. |
Approve
POST /api/reputation/testimonials/:id/approve transitions a testimonial from PENDING to APPROVED, records approvedByUserId and approvedAt, and emits REVIEW_APPROVED. The testimonial is still private.
Publish
POST /api/reputation/testimonials/:id/publish requires the testimonial to be APPROVED first (the gate prevents jumping straight from PENDING to public). On success it:
- Sets
status = PUBLISHEDandvisibility = PUBLIC. - Stamps
publishedAt. - Emits
REVIEW_PUBLISHED. - Recomputes the agent’s
ReputationAggregatesynchronously so the freshly published review is reflected immediately on the public profile.
Visibility
Even after publication, a testimonial’s reach is bounded by itsvisibility:
| Visibility | Surface |
|---|---|
PRIVATE | In-app only; never on the public profile or widget. |
INTERNAL | Org-wide visibility (e.g. broker dashboards) but not public. |
PUBLIC | Eligible for the public profile, the embeddable widget, and outbound syndication. |
PUBLIC. Agents can demote a published testimonial back to PRIVATE at any time via PATCH /api/reputation/testimonials/:id — the next aggregate recompute will exclude it.
Consent and permissions
Each testimonial carries three explicit permission flags captured at survey time:| Flag | What it gates |
|---|---|
permissionUseName | Whether the agent can show the client’s name (vs. “Jane D.”). |
permissionUsePhoto | Whether authorPhotoR2Key can be rendered publicly. |
permissionPublic | Whether the testimonial can be displayed on any public surface. |
permissionCapturedAt and a full consentSnapshot JSON blob preserve exactly what the client agreed to, when. The public endpoints honor these flags automatically — a published testimonial with permissionUsePhoto: false will simply omit the photo when the embeddable widget renders it.
Approval inbox
The Reputation Studio app routes pending testimonials to the review approval inbox, ranked by rating, recency, and source. From there the agent can:- Read the body and metadata.
- Edit headline, body, or display name (AI grammar cleanup is allowed but voice must be preserved;
aiEditedis set when AI touched the content). - Approve, publish, reject, or save as draft.
- Feature a published testimonial on the profile via
isFeatured. - Reorder published testimonials via
sortOrder.
Creating a testimonial manually
If a client sent a thank-you note outside of a survey, you can capture it directly:PENDING + PRIVATE; they still flow through the approve → publish gate before reaching the public profile.
Syndication
Once a testimonial isPUBLISHED, Winnerr automatically generates outbound “leave us a review” deep links for the platforms you have configured — currently Google Business and Facebook. Each is recorded as a ReviewSyndication row tied to the testimonial with direction OUTBOUND and status REQUESTED. These links are what Winnerr surfaces to satisfied survey responders; Winnerr never posts on your behalf.
Inbound syndication (importing your existing Google reviews) is handled separately — see Review syndication.
Related
- Surveys — the upstream source for most testimonials.
- Public profile — what published testimonials render into.
- Reviews widget — embeds the same published testimonials on your website.
- Review syndication — outbound review-request links and Google Business import.
- Reputation API — testimonials — list, create, patch, approve, publish.