> ## Documentation Index
> Fetch the complete documentation index at: https://docs.winnerr.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Public profile

> Publish your reputation page, get a shareable link, and manage your profile identity — all from Marketing → Reputation → Profile.

The **agent public profile** is the public, indexable reputation page for one agent: headshot, bio, service areas, aggregate rating, published testimonials, and a referral CTA.

The profile follows a draft/published lifecycle: edits land in a draft first, and the live page does not change until you click **Publish**.

## Setting up your profile

Go to **Marketing → Reputation → Profile**. The page is divided into focused cards:

| Card                        | What you configure                                                             |
| --------------------------- | ------------------------------------------------------------------------------ |
| **Profile identity**        | Handle (slug) and display name. Required before you can save.                  |
| **Publish & share**         | Publish button, current status (Draft / Live), and your shareable public link. |
| **Review experience**       | Sentiment style, review gating mode, Yelp URL, and custom platforms.           |
| **Syndication keys**        | Google Place ID, Facebook Page URL, and Google Business location name.         |
| **Google Business Profile** | OAuth button to connect and pull your Google reviews.                          |

## Profile lifecycle

| Status      | Behavior                                                                                                            |
| ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `DRAFT`     | Edits land in `draftConfig`. The public URL still serves the last `publishedConfig`, or `404` if never published.   |
| `PUBLISHED` | `publishedConfig` is live at the public URL. Subsequent draft edits do not affect the live page until re-published. |

Editing the profile updates `draftConfig`. The live page does not change until you click **Publish profile** (or **Update live profile** if already published).

## How to publish your profile

1. Go to **Marketing → Reputation → Profile**.
2. Fill in your **Profile identity** (handle and display name) and any other cards you want to configure.
3. In the **Publish & share** card, click **Publish profile**.

Winnerr validates the saved `draftConfig` against the approved-block schema, copies it into `publishedConfig`, flips the status to `PUBLISHED`, and stamps `publishedAt`. If there is an issue with the draft config, the publish call returns a validation error describing what to fix.

You can also publish via the API:

```bash theme={null}
curl -X POST https://api.winnerr.ai/api/reputation/profile/publish \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "agentUserId": "user_789" }'
```

If the body is omitted, the call defaults to the caller's own profile.

## Your shareable public link

Once published, the **Publish & share** card shows your public link and two buttons:

* **Copy** — copies the URL to your clipboard.
* **View** — opens your live profile in a new tab.

The public URL follows the pattern:

```text theme={null}
https://crm.winnerr.ai/r/<your-slug>
```

You can share this link in email signatures, business cards, and social profiles. It is the same URL that appears in your reputation profile email surveys' "leave a review" flows.

## Slug, custom domain, and branding

Each `AgentPublicProfile` carries:

| Field                                       | Purpose                                                                                                  |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `slug`                                      | Org-scoped slug used in the public URL (`/r/<slug>`). Lowercase alphanumeric words separated by hyphens. |
| `customDomain`                              | Optional vanity domain (same pattern as `ClientPortal`).                                                 |
| `brandKitId`                                | Reference to a [Brand Kit](/marketing/overview) for colors, logo, voice, and compliance text.            |
| `displayName`, `headline`, `bioMarkdown`    | Profile copy.                                                                                            |
| `headshotR2Key`                             | The headshot image, served from R2 via `R2_PUBLIC_URL`.                                                  |
| `serviceAreas`, `specialties`               | Arrays surfaced as chips on the profile.                                                                 |
| `licenseNumber`, `brokerageName`            | Hydrated from `AgentInfo`.                                                                               |
| `socialLinks`                               | Optional public socials.                                                                                 |
| `seoTitle`, `seoDescription`, `isIndexable` | Search engine and crawler controls.                                                                      |

The Brand Kit is shared with the marketing surface, so updating colors or compliance footer once propagates everywhere the agent's brand renders.

## What renders on the profile

Once published, the profile assembles:

* **Hero** — headshot, display name, headline, brokerage info, aggregate rating.
* **Aggregate stats** — total reviews, average rating, response rate.
* **Testimonials** — the agent's `PUBLISHED` + `PUBLIC` testimonials, ordered by `sortOrder` then `approvedAt`. Up to 50 testimonials are shown.
* **Service areas and specialties** — rendered as chips below the hero.
* **Bio** — plain-text paragraphs (no raw HTML injection).
* **Referral CTA** — a form that posts to the [public referral endpoint](/reputation/referrals).

Permission flags on each testimonial are honored automatically: a testimonial without `permissionUsePhoto` simply omits the photo; one without `permissionUseName` falls back to `authorDisplayName` ("Jane D.").

## Embeddable reviews widget

The same approved testimonials and reputation aggregate that power the profile can also be embedded on your own website. Widgets are created and managed separately under **Reputation → Widgets** — see [Reviews widget](/reputation/widgets) for the full guide including the one-line embed snippet, layout options, and the per-site origin allowlist.

## Reviews on your Winnerr site

If you build a site in Growth Studio, you can add the `agentReviews` block to any page to display your published reviews with star-rating structured data (Schema.org `RealEstateAgent` + `AggregateRating`). See [Reviews on your Winnerr site](/reputation/growth-studio-reviews).

## Reputation aggregate

The `ReputationAggregate` is the denormalized rollup that powers the profile, widget, broker dashboards, and lead routing. It is computed at agent scope (one row per agent) and optionally at org scope (`scope: ORG`, `agentUserId: null`) for org-wide rollups.

Read it via the [authenticated API](/api-reference/reputation#aggregate):

```bash theme={null}
curl https://api.winnerr.ai/api/reputation/aggregate?agentUserId=user_789 \
  -H "Authorization: Bearer $TOKEN"
```

Aggregates recompute automatically when a testimonial is published or unpublished.

## Review experience and syndication keys

The Review experience and Syndication keys settings are on the same Profile page. See:

* [Review request setup](/reputation/surveys) — sentiment style, review gating mode (Compliant vs. Strict), Yelp, and custom platforms.
* [Review syndication](/reputation/syndication) — Google Place ID, Facebook Page URL, and Google Business Profile import.

## Related

* [Review request setup](/reputation/surveys) — configure sentiment style and review experience.
* [Testimonials](/reputation/testimonials) — the content that the profile renders.
* [Reviews widget](/reputation/widgets) — embed your reviews on your own website.
* [Reviews on your Winnerr site](/reputation/growth-studio-reviews) — Growth Studio `agentReviews` block.
* [Review syndication](/reputation/syndication) — Google and Facebook syndication keys, and Google Business Profile import.
* [Referrals](/reputation/referrals) — the public CTA that closes the flywheel.
* [Reputation API — profile](/api-reference/reputation#profile) — authenticated GET / upsert / publish.
