For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Join Community
WelcomeDocsAPI ReferenceWebhooksChangelog
WelcomeDocsAPI ReferenceWebhooksChangelog
  • Introduction
    • Welcome
    • Quick Start
    • Testing Your App
  • App Store
    • Listing Requirements
    • App Subscriptions
    • Deeplinks
  • Authentication
    • Overview
    • Quick Start
    • Implementation Guide
    • Scopes
    • Rate Limits
    • Working With Rate Limits
  • Versions
    • Overview
    • Management Strategies
  • Build With AI
    • Docs For Your LLM
  • Tutorials
    • Example Chatbots
    • Multipart Media Upload
    • Sending Mass Messages
    • Security
  • Integrations
    • n8n
LogoLogo
Join Community
On this page
  • URL shape
  • The two canonical shapes
  • Where to get your planUuid
  • Behaviour by viewer state
  • Already on the targeted plan
  • Upgrade mode
  • Pending / abandoned payment
  • Invalid or unusable plan
  • Choosing between the two forms
  • Related reading
App Store

App Store Deeplinks

Build links that open your app’s listing on Fanvue with a specific pricing plan preselected — or that skip straight to install/checkout.

Was this page helpful?
Previous

Overview

Next
Built with

App Store deeplinks are URLs you can share in marketing emails, in-app CTAs, support flows, or documentation that take a Fanvue user directly to your app’s listing page. With one extra query parameter you can preselect a specific pricing plan in the install dialog. With one more, you can skip the dialog entirely and send the user straight into the install/checkout flow.

Use them when you want to drive a specific plan rather than the generic “open the app’s listing” experience.

Deeplinks are stable, shareable URLs. You can hand them out in emails, embed them in your own site, or use them as CTAs from a partner integration, there is nothing to install on the recipient’s side.

URL shape

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

https://www.fanvue.com/app-store/details/<appUuid>

That URL on its own opens the listing exactly as if a creator had browsed there. To turn it into a deeplink, add a plan query parameter (and optionally action=checkout).

ParameterRequiredAllowed valuesEffect
planYes, to trigger any deeplink behaviourThe uuid of one of your app’s pricing plansPreselects that plan in the install dialog.
actionNocheckoutSkips the plan picker and immediately starts the install/checkout flow for the selected plan.

If plan is missing or empty, the page renders normally and action has no effect. action=checkout only makes sense in combination with a valid plan.

The two canonical shapes

$# Open the listing with a plan preselected in the picker dialog
$https://www.fanvue.com/app-store/details/<appUuid>?plan=<planUuid>
$
$# Open the listing and go straight to install / checkout for that plan
$https://www.fanvue.com/app-store/details/<appUuid>?plan=<planUuid>&action=checkout

Use the picker form when you want the user to see plan details before confirming. Use the action=checkout form when the user has already chosen, e.g. they clicked a plan-specific CTA in an email.

Where to get your planUuid

Plan UUIDs are visible in the Pricing tab of your app in the Developer area. Each row in the pricing plans table has a Plan ID cell that shows a truncated UUID; click it to copy the full UUID to your clipboard, then paste it into your deeplink as the value of plan.

Only plans with an Active status can be deeplinked. Plans that are in setup, withdrawn, or otherwise inactive will trigger an error toast on the listing page if used as the target of a deeplink — see Invalid or unusable plan below.

Behaviour by viewer state

Because a deeplink can be opened by any Fanvue user, the resulting experience depends on the viewer’s current relationship with your app. The matrix below summarises what each user sees.

Viewer state?plan=<planUuid>?plan=<planUuid>&action=checkout
Not installed, no subscriptionPicker opens with the plan preselectedInstall / payment dialog opens immediately
Installed on a free plan, target is a paid plan (upgrade)Picker opens in upgrade mode with the paid plan preselected (free plans are hidden)Payment dialog opens immediately for the upgrade
Already subscribed to the targeted paid planNo-op, listing renders normallyNo-op, listing renders normally
Already has access and the target is a free planNo-op, listing renders normallyNo-op, listing renders normally
Targeted plan doesn’t exist on this app, or isn’t activeError toast, listing renders normallyError toast, listing renders normally
Has an abandoned payment for the targeted planPicker opens with the plan preselectedThe existing payment dialog is resumed (no duplicate invoice)

A few of these are worth calling out explicitly.

Already on the targeted plan

If the viewer already has access to the exact plan you’re deeplinking to, either because they’re actively subscribed to that paid plan, or they already have access and the target is a free plan, the deeplink is treated as a no-op and the listing renders as normal. This is safe to send to broad audiences: existing subscribers won’t be pushed back through checkout.

Upgrade mode

If the viewer already has access via a different paid or free plan and the deeplink targets a different paid plan, the picker opens in upgrade mode: free plans are hidden so the user can’t downgrade by accident, and the targeted plan is preselected. The action=checkout form goes straight to the upgrade payment dialog.

Pending / abandoned payment

If the viewer previously started checking out on the targeted plan and closed the dialog without completing payment, the deeplink will resume the same payment rather than creating a new one. Both forms behave the same way here — action=checkout reopens the existing payment dialog, and the plain plan= form preselects the plan so the user can reopen it themselves from the picker.

Invalid or unusable plan

If the plan UUID doesn’t belong to this app, or the plan exists but isn’t active (for example, it has been withdrawn), the listing renders normally and the user sees an inline error toast indicating that the deeplink was invalid. Audit your outbound links if creators report seeing this — usually it means the plan was withdrawn after the link was sent.

Choosing between the two forms

A simple rule of thumb:

  • Use ?plan= (picker form) when the user hasn’t necessarily committed yet — for example, a “Choose your plan” CTA in an onboarding email where you want them to see plan details before paying.
  • Use ?plan=...&action=checkout when the CTA itself is plan-specific — for example, a “Upgrade to Pro” button on your marketing site where the choice has already been made.

Both forms are safe for users who are already subscribed: as shown above, the deeplink no-ops rather than triggering duplicate payments.

Related reading

  • App Store Introduction — overview of the App Store and the build-to-publish journey.
  • App Subscriptions — read pricing lifecycle and current-user entitlement for an app via the API.
  • App Types — embedded vs off-platform apps and how pricing plans interact with each.