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

# App Store deeplinks

> Send creators straight to a pricing plan on your app's listing, or straight into its checkout, with App Store deeplinks, and see what each viewer gets.

An App Store deeplink opens your app's listing on Fanvue with a pricing plan preselected, or skips the picker and starts checkout for that plan. You put them in emails and in-app buttons, and the recipient installs nothing to follow one. To build one you need your app's UUID and the UUID of an [active plan](/docs/payments/app-billing/pricing-plans#plan-lifecycle).

Deeplinks target subscription plans only. One-time items sell through their own checkout URL; see [One-time items](/docs/payments/app-billing/one-time-items).

## URL shape

The base of every App Store deeplink is your app's listing page:

```text theme={null}
https://www.fanvue.com/app-store/details/<appUuid>
```

On its own, that URL opens the listing as if the creator had browsed there. Add a `plan` query parameter to make it a deeplink, and `action=checkout` to skip the picker.

| Parameter | Required | Allowed values | Effect |
| - | - | - | - |
| `plan` | Yes, for any deeplink behaviour | The `uuid` of one of your app's active pricing plans | Preselects that plan in the install dialog |
| `action` | No | `checkout` | Skips the plan picker and starts the install or checkout flow for the selected plan |

If `plan` is missing or empty, the page renders normally and `action` has no effect.

## The two forms

```text theme={null}
https://www.fanvue.com/app-store/details/<appUuid>?plan=<planUuid>
https://www.fanvue.com/app-store/details/<appUuid>?plan=<planUuid>&action=checkout
```

The first form opens the picker with the plan preselected, so the creator reads the plan details before confirming. Use it when the creator hasn't chosen a plan yet, such as a "Choose your plan" button in an onboarding email.

The second form starts checkout at once. Use it when the button itself is plan-specific and the choice is already made, such as "Upgrade to Pro" on your marketing site.

Both forms no-op for a viewer already on the targeted plan, so neither triggers a duplicate payment.

## Where to get your `planUuid`

Plan UUIDs are on the **Pricing** tab of your app in the Developer Area. Each row of the pricing table has a **Plan ID** cell showing a truncated UUID. Click it to copy the full value, then paste it as the value of `plan`.

Only plans with an **Active** status can be deeplinked. A plan that is pending setup or withdrawn, or a one-time item, shows an error toast on the listing page instead; see [Invalid or unusable plan](#invalid-or-unusable-plan). If creators report the toast, the plan was withdrawn after the link was sent, so replace the link.

## Behaviour by viewer state

Any Fanvue user can open a deeplink, so the result depends on the viewer's relationship with your app.

| Viewer state | `?plan=<planUuid>` | `?plan=<planUuid>&action=checkout` |
| - | - | - |
| Not installed, no subscription | Picker opens with the plan preselected | Install or payment dialog opens at once |
| Installed on a free plan, target is a paid plan | Picker opens in upgrade mode with the paid plan preselected; free plans hidden | Payment dialog opens at once for the upgrade |
| Already subscribed to the targeted paid plan | No-op, listing renders normally | No-op, listing renders normally |
| Already has access and the target is a free plan | No-op, listing renders normally | No-op, listing renders normally |
| Targeted plan is not on this app, not active, or a one-time item | Error toast, listing renders normally | Error toast, listing renders normally |
| Has an abandoned payment for the targeted plan | Picker opens with the plan preselected | The existing payment dialog resumes; no duplicate invoice |

### Already on the targeted plan

A viewer who already holds the targeted plan sees the listing as normal. That covers an active subscription to that paid plan, and any access when the target is a free plan. Existing subscribers are never sent back through checkout, so a deeplink is safe to send to a broad audience.

### Upgrade mode

A viewer with access through a different plan who opens a deeplink to a paid plan gets the picker in **upgrade mode**. Free plans are hidden so the viewer cannot downgrade by accident, and the targeted plan is preselected. The `action=checkout` form opens the upgrade payment dialog at once.

### Pending or abandoned payment

A viewer who started checkout on the targeted plan and closed the dialog without paying resumes the same payment rather than creating a new one. `action=checkout` reopens the existing payment dialog; the plain `plan=` form preselects the plan so the viewer can reopen it from the picker.

### Invalid or unusable plan

A `plan` UUID that doesn't belong to this app, isn't active, or names a one-time item renders the listing normally with an inline error toast saying the deeplink was invalid. Audit your outbound links when creators report the toast.


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