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

# Fan experiences overview

> What a Fanvue fan experience is, how fans find and open one, the access modes and types you can publish, and the limits that apply.

An experience is something your app publishes onto a creator's Fanvue profile for fans to open: a game, a quiz, a live stream, a video, anything your fan surface can render. The creator chooses who can open it and whether it costs anything, and Fanvue handles the listing, the checkout and the launch. Start here before you build a fan surface or publish anything.

You need an [on-platform app](/docs/get-started/choose-your-app-type) with a fan experience URL, set in **Embed settings** or as `access.fanExperienceUrl` in your manifest. Once it's in place, [Build the fan surface](/docs/app-store/experiences/build-the-fan-surface) and [Publish experiences](/docs/app-store/experiences/publish) take you the rest of the way.

## Access modes

The access mode decides who can open an experience and what, if anything, they pay. The creator picks it in the confirmation dialog, where the **App subscription** option is `PAID` with `priceRecurring: true`.

| `accessMode` | Who can open it | Charge |
| - | - | - |
| `FREE` | Any signed-in fan | none |
| `SUBSCRIPTION` | Fans with an active profile subscription to the creator, checked live on every launch | none for the experience |
| `PAID` | Fans who bought it: a one-off unlock, or monthly when `priceRecurring` is `true` | `priceCents`, 300 to 50000 USD cents |
| `HIDDEN` | Fans who hold the share link; never listed, and `hidden` is always `true` | none |

Every charge is between the fan and the creator. [Payments inside experiences](/docs/app-store/experiences/payments) covers paid access, priced actions and who gets paid.

## Delivery modes

| `deliveryMode` | What Fanvue does | Requirement |
| - | - | - |
| `EMBEDDED` | Renders your fan surface in an iframe at `/experiences/{uuid}` | A fan experience URL on your app |
| `EXTERNAL` | Opens `externalUrl` in a new tab | `externalUrl`; a publish without it is refused with 400 naming the field |

Both modes append `?token=` to the URL they open. The SDK's `mintPublishRequestToken` produces `EMBEDDED` only; `EXTERNAL` is available through direct publish on the API.

## Experience types

`experienceType` is one of `LIVE_STREAM`, `LIVE_AUDIO`, `VIDEO`, `AUDIO`, `GAME`, `CHALLENGE`, `QUIZ`, `EVENT` or `OTHER`, and defaults to `OTHER`. The type is presentation only. Chat cards show it as a category tag, and `OTHER` shows no tag.

The creator can change the type you propose in the confirmation dialog, and the token exchange returns the type they confirmed. Read it from the exchange rather than assuming your proposal survived.

## How an experience is identified

An experience is one row per app, creator and `externalExperienceId`. Publishing the same `externalExperienceId` again for the same creator updates that row in place and keeps its `position` on the profile.

## What fans see

Fans reach an experience from four places. Signed-out visitors are sent to sign-in first.

* **Profile tab.** The creator's profile shows an Experiences tab listing published, non-hidden experiences. The tab is hidden when there are none.
* **Detail page** at `/experiences/detail/{uuid}`: cover, description and the call to action. `?intent=purchase` opens the checkout step directly, and `?source=chat_embed` marks a visit from a chat card.
* **Surface page** at `/experiences/{uuid}`, where Fanvue renders your fan surface.
* **Dialog** over a chat or a profile at `?experience={uuid}&exp_source=chat_embed|profile|link`, when your fan surface uses dialog presentation.

The call to action depends on who is looking:

| Viewer | Button |
| - | - |
| Owner, entitled fan, or `FREE` | **Open** |
| `PAID`, one-off, not bought | **Unlock \$15**, with the price |
| `PAID`, recurring, not subscribed | **Subscribe \$15/month** |
| `SUBSCRIPTION`, not subscribed | **Subscribe** |
| `PAID` without a price, or `HIDDEN` without a grant | **View**, which leads to the detail page only |

`EXTERNAL` experiences show an **open in {appName}** button instead of rendering a surface.

## Share links and chat cards

A chat message containing a Fanvue link to `/experiences/{uuid}` or `/experiences/detail/{uuid}` renders a card above the message bubble, and a profile link to `/{handle}` renders a card too. A message that is only a link renders the card in place of the bubble. Each message renders at most 3 cards per kind, and cards render for viewers whose account has chat link cards enabled.

A card shows the cover from `imageUrl`, the creator's avatar and handle, badges, the category tag from `experienceType`, and the call to action. The description appears only on the detail page, and an unpublished experience renders as an unavailable card.

To get a good card, supply a public https cover, a short title, a type other than `OTHER` and a description. `HIDDEN` experiences are reachable only through the detail link. The SDK builds share links with `experienceDetailShareUrl` and `experienceShareUrl`.

## Limits

| Limit | Value |
| - | - |
| `title` | 100 characters |
| `description` | 500 characters |
| `externalExperienceId` | 255 characters |
| Priced actions per experience | 10 |
| `priceCents`, for access or an action | 300 to 50000 USD cents |
| Launch token lifetime | 10 minutes |
| Request token lifetime | 20 minutes |

## Lifecycle and availability

A published experience survives an uninstall, an archive, a suspension and a withdrawn submission. What changes is whether fans can see it. The fan listing hides an experience while the app is unavailable, and an app is available only when all four conditions hold:

* it has a current submission
* it is not suspended
* it is not archived
* the creator still has it installed

Launch, token exchange and purchase re-check the same conditions and answer not found when any of them fails.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.