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
All sources land in the approval inbox with status
PENDING and visibility PRIVATE. The lifecycle from there is the same regardless of source.
Lifecycle
Approval and publish are two separate steps on purpose. Approve confirms the content; publish is the explicit “make it public” action that also triggers aggregate recompute and syndication eligibility.
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:
Publishing automatically sets visibility to
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: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” links for the platforms you have configured — Google Business, Facebook, Yelp (opt-in with compliance warning), and any custom platforms you add. 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 via the Smart Review Composer on the survey thank-you screen; 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.