> ## 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.

# Choose your app type

> Compare API-only, off-platform and on-platform Fanvue apps by what each needs, what it unlocks and how to switch between them.

Every Fanvue app is API-only, off-platform or on-platform. The type decides which settings **App details** shows in the Developer Area, whether the app can be listed on the App Store, and where creators open it. You set it on App details after you create the app, and you can change it later.

Start with API-only if you only need to call the API for accounts that authorise you. Choose off-platform or on-platform when you want an App Store listing and Fanvue billing.

## The three types

| Type (UI label) | Stored value | UI description | What you need | What it unlocks | Can be listed |
| - | - | - | - | - | - |
| **API only** | `api_only` | "Basic OAuth for using our API" | Nothing beyond your OAuth credentials | OAuth access to the accounts that authorise your app | No |
| **Off-platform** | `off_platform` | "Creators open your app on your own site" | An **App URL** on App details, or manifest `access.type: off_platform` with `access.url` | Listing and Fanvue billing | Yes |
| **On-platform** | `embedded` | "Your app loads inside Fanvue" | **Embed settings** on App details, or manifest `access.type: embedded` with `access.url` | Listing, creator surface, fan experiences, billing | Yes |

Fanvue billing means pricing plans and one-time items. Embed settings hold a creator landing URL and an optional fan experience URL. In an [App Manifest](/docs/app-store/app-manifest) the same settings are `access.url`, `access.fanExperienceUrl` and `surfaces`.

The stored values appear in API responses, and `off_platform` and `embedded` also appear in the manifest `access.type` field. Off-platform and on-platform apps can be [submitted for review](/docs/app-store/publishing-your-app); API-only apps can't.

The Builder SDK has an entrypoint for each type; the [entrypoints table](/docs/app-store/sdk/overview#entrypoints) shows which one to import.

## What on-platform adds

On-platform apps render inside Fanvue instead of on your own site, through two surfaces:

* The creator surface loads `access.url` on the creator's App Home page when they open your app.
* The fan surface loads `access.fanExperienceUrl` at `/experiences/{uuid}` when a fan opens an experience your app published. See [Fan experiences](/docs/app-store/experiences/overview).

In both surfaces your app acts for the creator with the scopes you requested, not with unrestricted access to the account. The sandbox and Content Security Policy requirements are on [On-platform apps with the Builder SDK](/docs/app-store/sdk/embedded).

## Switching type

You switch type on the same select. An app is never both off-platform and on-platform, so some switches remove settings, and Fanvue asks you to confirm before it does.

* **Choosing API only** while the app has an App URL or embed settings opens the **Switch to API only?** dialog. It tells you which of the two it will remove, or both.
  * On a live app, it warns that API-only apps can't be listed, so you can't send the app's next submission until you choose a type and add its URL.
  * On an app that has never gone live, it warns that you won't be able to submit the app for review.
* **Saving an App URL** removes the app's embed settings.
* **Saving embed settings** removes the app's App URL, and from then on creators open the app only inside Fanvue. Fanvue warns you first if an App URL is still stored.
* **Removing a fan experience URL**, or switching away from on-platform while a paid experience is live, takes the fan surface away from every experience your app powers. The save stops and asks you to acknowledge the impact on paying fans first. See [Taking paid access away](/docs/app-store/experiences/publish#taking-paid-access-away).

## When on-platform is unavailable

On accounts that don't have embedding enabled, **On-platform** shows disabled with a note that it isn't available on your account yet. **API only** and **Off-platform** stay available. On those accounts Fanvue ignores a stored on-platform type and any saved surfaces when it reads the app's type.

## How Fanvue reads the type of an existing app

App details resolves the type from the first source that matches:

| Order | Source | Rule |
| - | - | - |
| 1 | Manifest `access.type` | Used whenever a manifest applies. The select is read-only and shows a **From manifest** pill. |
| 2 | Stored type from the select | Used when no manifest applies. An `embedded` value counts only on accounts with embedding enabled. |
| 3 | Surfaces | Any surface on the draft or live submission reads as on-platform, on accounts with embedding enabled. |
| 4 | App URL | A stored App URL reads as off-platform. |
| 5 | Unset | None of the sources match. The select shows **Choose an app type**; choose **API only** to record the type. |

Manifest `access.type` accepts only `embedded` and `off_platform`, so a manifest can't declare an API-only app.


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