Skip to main content
A 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 = PUBLISHED and visibility = PUBLIC.
  • Stamps publishedAt.
  • Emits REVIEW_PUBLISHED.
  • Recomputes the agent’s ReputationAggregate synchronously so the freshly published review is reflected immediately on the public profile.
See the API reference for full request and response shapes.

Visibility

Even after publication, a testimonial’s reach is bounded by its visibility: 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. 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; aiEdited is 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:
Manual entries always start PENDING + PRIVATE; they still flow through the approve → publish gate before reaching the public profile.

Syndication

Once a testimonial is PUBLISHED, 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.