Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.
By the end of this page you’ll have a Next.js app running locally over HTTPS where creators click Login with Fanvue, approve your app and land on a page that shows their account. The Fanvue App Starter already wires the OAuth 2.0 code flow with PKCE and a cookie session, so you configure it rather than write it. The settings come from environment variables, so the same app deploys to any Node.js host.You need:
a Fanvue creator account or agency admin account, to create the app in the Developer Area
A redirect URI must use https:// unless its host is localhost, 127.0.0.1 or [::1]. The starter’s default callback uses the host my-fanvue-app.dev, so you need a local HTTPS proxy in front of the dev server. These steps use mkcert and local-ssl-proxy; if you’d rather skip them, see portless below.Install mkcert:
brew install mkcert
Generate certificates, replacing my-fanvue-app with your app name. The second command writes two files, my-fanvue-app.dev.pem and my-fanvue-app.dev-key.pem.
mkcert -installmkcert my-fanvue-app.dev
Point the host at your machine:
echo "127.0.0.1 my-fanvue-app.dev" | sudo tee -a /etc/hosts
You start the proxy in step 5, once the environment variables are in place. It forwards HTTPS traffic on port 3001 to the Next.js dev server on port 3000.
portless replaces the mkcert, local-ssl-proxy and hosts-file steps. It serves your dev server at a stable https://<name>.localhost URL and trusts a local CA automatically, with no port numbers or /etc/hosts edits.
npm install -g portlessportless my-fanvue-app next dev # serves https://my-fanvue-app.localhost
With portless, use the URL it serves as your callback, for example https://my-fanvue-app.localhost/api/oauth/callback with no :3001 port, both on the Authentication tab and in OAUTH_REDIRECT_URI. Skip the mkcert and local-ssl-proxy steps.
In the Developer Area, click Create app. The dialog that opens shows your Client ID and Client Secret once, so copy both. The Client ID stays visible on the Authentication tab, and Reset secret there issues a new secret if you lose the first; see Managing your OAuth client secret.On the Authentication tab, add the redirect URI https://my-fanvue-app.dev:3001/api/oauth/callback and tick the read:self scope. Both apply when you save.If you’d rather keep redirect URIs and scopes in your repo, set them in an App Manifest. The starter adds the system scopes openid, offline_access and offline to whatever you set in OAUTH_SCOPES, so list only read:self in the manifest’s oauth.scopes.
Create .env.local in the project root. Replace my-fanvue-app with your app name and generate SESSION_SECRET with openssl rand -hex 32; it must be at least 32 characters.
OAUTH_CLIENT_ID=YOUR_CLIENT_IDOAUTH_CLIENT_SECRET=YOUR_CLIENT_SECRETOAUTH_SCOPES=read:selfOAUTH_REDIRECT_URI=https://my-fanvue-app.dev:3001/api/oauth/callbackSESSION_SECRET=YOUR_64_HEX_CHARACTER_SECRETSESSION_COOKIE_NAME=fanvue_oauth# Normally you do not need to change these:OAUTH_ISSUER_BASE_URL=https://auth.fanvue.comAPI_BASE_URL=https://api.fanvue.com
OAUTH_SCOPES must list only scopes your app has on the Authentication tab or in its manifest’s oauth.scopes. Requesting a scope the app lacks fails the authorisation request.
Never commit .env.local to version control. A committed client secret acts on every account that authorised your app; if one leaks, click Reset secret on the Authentication tab.
Visit https://my-fanvue-app.dev:3001 (with your app name) and click Login with Fanvue. Sign in and approve the scopes. The browser returns to the app, which renders your current user as JSON.
Set the same environment variables in your hosting provider, with OAUTH_REDIRECT_URI set to your production callback, for example https://your-app.com/api/oauth/callback
Add that production redirect URI on the Authentication tab, or in your manifest’s oauth.redirectUris followed by Check now on the Versions tab
@fanvue/builder-sdk/nextjs/off-platform exports the same flow as route handlers: createLoginHandler ({ GET }), createCallbackHandler ({ GET, POST }) and createLogoutHandler ({ POST }), plus getSession and getAuthenticatedClient for server code.The SDK reads OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_REDIRECT_URI and SESSION_SECRET from the environment. It stores the session in a fanvue_session cookie that is HttpOnly, SameSite=Lax, lasts 30 days, and is Secure when served over HTTPS. Off-platform apps with the Builder SDK is the full guide.
Invalid redirect URI: OAUTH_REDIRECT_URI must exactly match one of your app’s redirect URIs, including the https:// scheme and port 3001. If your manifest sets them, the Versions tab must show Up to date
Scope mismatch: every scope in OAUTH_SCOPES must be among your app’s scopes (the starter uses read:self)
Missing session secret: set SESSION_SECRET to a random string of at least 32 characters
Certificate errors in browser: run mkcert -install to install the local CA certificate
Cannot reach app at .dev domain: check the hosts file entry with grep my-fanvue-app.dev /etc/hosts
Proxy connection refused: start the Next.js dev server on port 3000 before starting the proxy
Port already in use: if port 3000 or 3001 is taken, stop the other service or change both the proxy ports and the redirect URI
Blank page after login: open browser DevTools and your terminal, then check that every env var is set, the proxy is running and the callback route is reachable
Add scopes both on your app (the Authentication tab, or your manifest’s oauth.scopes) and in OAUTH_SCOPES. Adding a scope makes every existing user authorise again.
Call other endpoints, such as chats or followers, from your server routes.
Protect pages with middleware that checks the session.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Fanvue API Documentation","colors":{"primary":"#418326","light":"#ADFF8C","dark":"#418326"},"logo":{"light":"https://mintcdn.com/fanvue-bad99af4/dtEplVgXFkLaret8/images/logo-light.svg?fit=max\u0026auto=format\u0026n=dtEplVgXFkLaret8\u0026q=85\u0026s=6756e139f7ac586749dced60571ca7fd","dark":"https://mintcdn.com/fanvue-bad99af4/dtEplVgXFkLaret8/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=dtEplVgXFkLaret8\u0026q=85\u0026s=010dc52e39deb4e87206e543e239069c","href":"/"},"favicon":"https://mintcdn.com/fanvue-bad99af4/C0sjSQCXSDawEi8k/images/favicon.svg?fit=max\u0026auto=format\u0026n=C0sjSQCXSDawEi8k\u0026q=85\u0026s=ec3aee67b0ba0a7d91ce7ce6779eae5f","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript"],"prefill":true}},"appearance":{"default":"dark"},"background":{"decoration":"gradient"},"navbar":{"links":[{"icon":"discord","href":"https://discord.gg/dZe3tqVTq4","label":"Join Community"},{"href":"/changelog","label":"Changelog"}]},"footer":{"socials":{"website":"https://www.fanvue.com","discord":"https://discord.gg/dZe3tqVTq4"},"links":[{"header":"Resources","items":[{"label":"Changelog","href":"https://api.fanvue.com/docs/changelog"},{"label":"Join Community","href":"https://discord.gg/dZe3tqVTq4"}]},{"header":"Legal","items":[{"label":"Terms \u0026 Conditions","href":"https://legal.fanvue.com/terms-conditions"},{"label":"Privacy Policy","href":"https://legal.fanvue.com/privacy-policy"}]}]},"seo":{"metatags":{"og:title":"Fanvue API Documentation","og:description":"Build on Fanvue - the creator subscription platform for the future.","og:image":"images/og-image.jpg","twitter:card":"summary_large_image","twitter:title":"Fanvue API Documentation","twitter:description":"Build on Fanvue - the creator subscription platform for the future.","twitter:image":"images/og-image.jpg"},"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fanvue-bad99af4","hasAudioNarration":false,"actualSubdomain":"fanvue-bad99af4","customDomains":["api.fanvue.com"],"gitSource":{"type":"github","owner":"fanvue","repo":"styx-docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec2295d7fc1c00c9c69ee1","collectionId":"d2ee169b-d13b-4bb0-989e-2b4aa88570e3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec2295d7fc1c00c9c69ee1"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec2295d7fc1c00c9c69ee1","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API Reference","count":557},{"language":"default","tag":"Agency","count":271},{"language":"default","tag":"Chats","count":121},{"language":"default","tag":"UI Library","count":94},{"language":"default","tag":"Creator tools","count":88},{"language":"default","tag":"Creator chats","count":61},{"language":"default","tag":"Posts","count":42},{"language":"default","tag":"Webhooks","count":40},{"language":"default","tag":"Insights and earnings","count":31},{"language":"default","tag":"Media","count":28}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar button[aria-expanded]{justify-content:space-between}div.card:not(:has(img)){background-color:#eef0f2!important;border-color:transparent!important;box-shadow:none!important;cursor:default}.dark div.card:not(:has(img)){background-color:rgba(255, 255, 255, 0.06)!important}div.card:has(img){border-color:transparent!important}div.card:has(img):hover{border-color:rgba(0, 0, 0, 0.55)!important}.dark div.card:has(img):hover{border-color:rgba(255, 255, 255, 0.82)!important}@media (min-width: 1024px){[class*=\"page-header:flex\"]{display:flex!important;align-self:flex-start!important}[class*=\"page-header:hidden\"]{display:none!important}}"}],"page":{"pagePath":"get-started/sign-in-with-fanvue","slug":"/get-started/sign-in-with-fanvue","pageMetadata":{"title":"Sign in with Fanvue using the App Starter","sidebarTitle":"Sign in with Fanvue","description":"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.","href":"/get-started/sign-in-with-fanvue"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`By the end of this page you’ll have a Next.js app running locally over HTTPS where creators click `,_jsx(_components.strong,{children:`Login with Fanvue`}),`, approve your app and land on a page that shows their account. The Fanvue App Starter already wires the OAuth 2.0 code flow with PKCE and a cookie session, so you configure it rather than write it. The settings come from environment variables, so the same app deploys to any Node.js host.`]}),`\n`,_jsx(_components.p,{children:`You need:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`a Fanvue creator account or agency admin account, to create the app in the Developer Area`}),`\n`,_jsx(_components.li,{children:`Node.js 18 or later`}),`\n`,_jsx(_components.li,{children:`pnpm`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Adding sign-in to an app you already have? Follow the `,_jsx(_components.a,{href:`/authentication/implementation-guide`,children:`OAuth implementation guide`}),` for framework-agnostic steps, or `,_jsx(_components.a,{href:`#using-the-sdk-without-the-starter`,children:`use the SDK without the starter`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-bootstrap-from-the-fanvue-app-starter`,children:`1) Bootstrap from the Fanvue App Starter`}),`\n`,_jsxs(_components.p,{children:[`The template repository is `,_jsx(_components.a,{href:`https://github.com/fanvue/fanvue-app-starter`,children:`Fanvue App Starter`}),`. Start from it in one of three ways.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use this template on GitHub`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.a,{href:`https://github.com/fanvue/fanvue-app-starter`,children:`Fanvue App Starter`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Use this template`}),`, then `,_jsx(_components.strong,{children:`Create a new repository`})]}),`\n`,_jsx(_components.li,{children:`Clone your new repository locally`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scaffold with degit`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dlx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` degit`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` fanvue/fanvue-app-starter`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Clone and re-init`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://github.com/fanvue/fanvue-app-starter.git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`rm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -rf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .git`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` init`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Use pnpm for install, dev and build commands. The starter’s lockfile is a pnpm lockfile, so npm or yarn installs resolve different versions.`})}),`\n`,_jsx(Heading,{level:`2`,id:`2-set-up-local-https-proxy`,children:`2) Set up local HTTPS proxy`}),`\n`,_jsxs(_components.p,{children:[`A redirect URI must use `,_jsx(_components.code,{children:`https://`}),` unless its host is `,_jsx(_components.code,{children:`localhost`}),`, `,_jsx(_components.code,{children:`127.0.0.1`}),` or `,_jsx(_components.code,{children:`[::1]`}),`. The starter’s default callback uses the host `,_jsx(_components.code,{children:`my-fanvue-app.dev`}),`, so you need a local HTTPS proxy in front of the dev server. These steps use `,_jsx(_components.code,{children:`mkcert`}),` and `,_jsx(_components.code,{children:`local-ssl-proxy`}),`; if you’d rather skip them, see `,_jsx(_components.a,{href:`#alternative-portless`,children:`portless`}),` below.`]}),`\n`,_jsx(_components.p,{children:`Install mkcert:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`brew`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mkcert`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Generate certificates, replacing `,_jsx(_components.code,{children:`my-fanvue-app`}),` with your app name. The second command writes two files, `,_jsx(_components.code,{children:`my-fanvue-app.dev.pem`}),` and `,_jsx(_components.code,{children:`my-fanvue-app.dev-key.pem`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mkcert`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mkcert`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app.dev`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Point the host at your machine:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"127.0.0.1 my-fanvue-app.dev\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tee`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -a`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /etc/hosts`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You start the proxy in step 5, once the environment variables are in place. It forwards HTTPS traffic on port 3001 to the Next.js dev server on port 3000.`}),`\n`,_jsx(Heading,{level:`3`,id:`alternative-portless`,children:`Alternative: portless`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://github.com/vercel-labs/portless`,children:`portless`}),` replaces the `,_jsx(_components.code,{children:`mkcert`}),`, `,_jsx(_components.code,{children:`local-ssl-proxy`}),` and hosts-file steps. It serves your dev server at a stable `,_jsx(_components.code,{children:`https://\u003cname>.localhost`}),` URL and trusts a local CA automatically, with no port numbers or `,_jsx(_components.code,{children:`/etc/hosts`}),` edits.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -g`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` portless`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`portless`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-fanvue-app`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` next`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # serves https://my-fanvue-app.localhost`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`With portless, use the URL it serves as your callback, for example `,_jsx(_components.code,{children:`https://my-fanvue-app.localhost/api/oauth/callback`}),` with no `,_jsx(_components.code,{children:`:3001`}),` port, both on the `,_jsx(_components.strong,{children:`Authentication`}),` tab and in `,_jsx(_components.code,{children:`OAUTH_REDIRECT_URI`}),`. Skip the `,_jsx(_components.code,{children:`mkcert`}),` and `,_jsx(_components.code,{children:`local-ssl-proxy`}),` steps.`]}),`\n`,_jsx(Heading,{level:`2`,id:`3-create-your-fanvue-oauth-app`,children:`3) Create your Fanvue OAuth app`}),`\n`,_jsxs(_components.p,{children:[`In the Developer Area, click `,_jsx(_components.strong,{children:`Create app`}),`. The dialog that opens shows your Client ID and Client Secret once, so copy both. The Client ID stays visible on the `,_jsx(_components.strong,{children:`Authentication`}),` tab, and `,_jsx(_components.strong,{children:`Reset secret`}),` there issues a new secret if you lose the first; see `,_jsx(_components.a,{href:`/authentication/implementation-guide#managing-your-oauth-client-secret`,children:`Managing your OAuth client secret`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Authentication`}),` tab, add the redirect URI `,_jsx(_components.code,{children:`https://my-fanvue-app.dev:3001/api/oauth/callback`}),` and tick the `,_jsx(_components.code,{children:`read:self`}),` scope. Both apply when you save.`]}),`\n`,_jsxs(_components.p,{children:[`If you’d rather keep redirect URIs and scopes in your repo, set them in an `,_jsx(_components.a,{href:`/app-store/app-manifest`,children:`App Manifest`}),`. The starter adds the system scopes `,_jsx(_components.code,{children:`openid`}),`, `,_jsx(_components.code,{children:`offline_access`}),` and `,_jsx(_components.code,{children:`offline`}),` to whatever you set in `,_jsx(_components.code,{children:`OAUTH_SCOPES`}),`, so list only `,_jsx(_components.code,{children:`read:self`}),` in the manifest’s `,_jsx(_components.code,{children:`oauth.scopes`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-configure-environment-variables`,children:`4) Configure environment variables`}),`\n`,_jsxs(_components.p,{children:[`Create `,_jsx(_components.code,{children:`.env.local`}),` in the project root. Replace `,_jsx(_components.code,{children:`my-fanvue-app`}),` with your app name and generate `,_jsx(_components.code,{children:`SESSION_SECRET`}),` with `,_jsx(_components.code,{children:`openssl rand -hex 32`}),`; it must be at least 32 characters.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OAUTH_CLIENT_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`YOUR_CLIENT_ID`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OAUTH_CLIENT_SECRET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`YOUR_CLIENT_SECRET`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OAUTH_SCOPES`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`read:self`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OAUTH_REDIRECT_URI`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://my-fanvue-app.dev:3001/api/oauth/callback`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`SESSION_SECRET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`YOUR_64_HEX_CHARACTER_SECRET`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`SESSION_COOKIE_NAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`fanvue_oauth`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Normally you do not need to change these:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OAUTH_ISSUER_BASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://auth.fanvue.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`API_BASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://api.fanvue.com`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OAUTH_SCOPES`}),` must list only scopes your app has on the `,_jsx(_components.strong,{children:`Authentication`}),` tab or in its manifest’s `,_jsx(_components.code,{children:`oauth.scopes`}),`. Requesting a scope the app lacks fails the authorisation request.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Never commit `,_jsx(_components.code,{children:`.env.local`}),` to version control. A committed client secret acts on every account that authorised your app; if one leaks, click `,_jsx(_components.strong,{children:`Reset secret`}),` on the `,_jsx(_components.strong,{children:`Authentication`}),` tab.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`5-install-and-run-locally`,children:`5) Install and run locally`}),`\n`,_jsx(_components.p,{children:`Install dependencies and start the Next.js dev server:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`In a second terminal, start the local SSL proxy, again with your app name in place of `,_jsx(_components.code,{children:`my-fanvue-app`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` local-ssl-proxy`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --source`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 3001`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --target`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 3000`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --cert`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./my-fanvue-app.dev.pem`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --key`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./my-fanvue-app.dev-key.pem`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Visit `,_jsx(_components.code,{children:`https://my-fanvue-app.dev:3001`}),` (with your app name) and click `,_jsx(_components.strong,{children:`Login with Fanvue`}),`. Sign in and approve the scopes. The browser returns to the app, which renders your current user as JSON.`]}),`\n`,_jsx(Heading,{level:`2`,id:`6-deploy-to-production`,children:`6) Deploy to production`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Set the same environment variables in your hosting provider, with `,_jsx(_components.code,{children:`OAUTH_REDIRECT_URI`}),` set to your production callback, for example `,_jsx(_components.code,{children:`https://your-app.com/api/oauth/callback`})]}),`\n`,_jsxs(_components.li,{children:[`Add that production redirect URI on the `,_jsx(_components.strong,{children:`Authentication`}),` tab, or in your manifest’s `,_jsx(_components.code,{children:`oauth.redirectUris`}),` followed by `,_jsx(_components.strong,{children:`Check now`}),` on the `,_jsx(_components.strong,{children:`Versions`}),` tab`]}),`\n`,_jsx(_components.li,{children:`Build and run`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` build`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pnpm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`how-the-starter-works`,children:`How the starter works`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Next.js App Router with an OAuth callback at `,_jsx(_components.code,{children:`/api/oauth/callback`})]}),`\n`,_jsxs(_components.li,{children:[`A session cookie named by `,_jsx(_components.code,{children:`SESSION_COOKIE_NAME`}),`, signed with `,_jsx(_components.code,{children:`SESSION_SECRET`})]}),`\n`,_jsxs(_components.li,{children:[`Server-side calls to `,_jsx(_components.code,{children:`API_BASE_URL`}),` using the session’s access token`]}),`\n`,_jsx(_components.li,{children:`In local development, the SSL proxy forwards HTTPS requests to the Next.js dev server`}),`\n`]}),`\n`,_jsx(_components.p,{children:`To change it:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`UI and login experience: `,_jsx(_components.code,{children:`src/app/page.tsx`})]}),`\n`,_jsxs(_components.li,{children:[`OAuth callback and session handling: `,_jsx(_components.code,{children:`src/app/api/oauth/callback/route.ts`})]}),`\n`,_jsxs(_components.li,{children:[`API calls after login: server routes under `,_jsx(_components.code,{children:`src/app/api/**`}),` using the session’s access token`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`using-the-sdk-without-the-starter`,children:`Using the SDK without the starter`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@fanvue/builder-sdk/nextjs/off-platform`}),` exports the same flow as route handlers: `,_jsx(_components.code,{children:`createLoginHandler`}),` (`,_jsx(_components.code,{children:`{ GET }`}),`), `,_jsx(_components.code,{children:`createCallbackHandler`}),` (`,_jsx(_components.code,{children:`{ GET, POST }`}),`) and `,_jsx(_components.code,{children:`createLogoutHandler`}),` (`,_jsx(_components.code,{children:`{ POST }`}),`), plus `,_jsx(_components.code,{children:`getSession`}),` and `,_jsx(_components.code,{children:`getAuthenticatedClient`}),` for server code.`]}),`\n`,_jsxs(_components.p,{children:[`The SDK reads `,_jsx(_components.code,{children:`OAUTH_CLIENT_ID`}),`, `,_jsx(_components.code,{children:`OAUTH_CLIENT_SECRET`}),`, `,_jsx(_components.code,{children:`OAUTH_REDIRECT_URI`}),` and `,_jsx(_components.code,{children:`SESSION_SECRET`}),` from the environment. It stores the session in a `,_jsx(_components.code,{children:`fanvue_session`}),` cookie that is `,_jsx(_components.code,{children:`HttpOnly`}),`, `,_jsx(_components.code,{children:`SameSite=Lax`}),`, lasts 30 days, and is `,_jsx(_components.code,{children:`Secure`}),` when served over HTTPS. `,_jsx(_components.a,{href:`/app-store/sdk/off-platform`,children:`Off-platform apps with the Builder SDK`}),` is the full guide.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Invalid redirect URI`}),`: `,_jsx(_components.code,{children:`OAUTH_REDIRECT_URI`}),` must exactly match one of your app’s redirect URIs, including the `,_jsx(_components.code,{children:`https://`}),` scheme and port `,_jsx(_components.code,{children:`3001`}),`. If your manifest sets them, the `,_jsx(_components.strong,{children:`Versions`}),` tab must show `,_jsx(_components.strong,{children:`Up to date`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scope mismatch`}),`: every scope in `,_jsx(_components.code,{children:`OAUTH_SCOPES`}),` must be among your app’s scopes (the starter uses `,_jsx(_components.code,{children:`read:self`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Missing session secret`}),`: set `,_jsx(_components.code,{children:`SESSION_SECRET`}),` to a random string of at least 32 characters`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Certificate errors in browser`}),`: run `,_jsx(_components.code,{children:`mkcert -install`}),` to install the local CA certificate`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cannot reach app at .dev domain`}),`: check the hosts file entry with `,_jsx(_components.code,{children:`grep my-fanvue-app.dev /etc/hosts`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Proxy connection refused`}),`: start the Next.js dev server on port 3000 before starting the proxy`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Port already in use`}),`: if port 3000 or 3001 is taken, stop the other service or change both the proxy ports and the redirect URI`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Blank page after login`}),`: open browser DevTools and your terminal, then check that every env var is set, the proxy is running and the callback route is reachable`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Add scopes both on your app (the `,_jsx(_components.strong,{children:`Authentication`}),` tab, or your manifest’s `,_jsx(_components.code,{children:`oauth.scopes`}),`) and in `,_jsx(_components.code,{children:`OAUTH_SCOPES`}),`. Adding a scope makes every existing user authorise again.`]}),`\n`,_jsx(_components.li,{children:`Call other endpoints, such as chats or followers, from your server routes.`}),`\n`,_jsx(_components.li,{children:`Protect pages with middleware that checks the session.`}),`\n`,_jsxs(_components.li,{children:[`Set up a `,_jsx(_components.a,{href:`/get-started/test-your-app`,children:`test creator account`}),` so development never touches your real profile.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Sign in with Fanvue using the App Starter","sidebarTitle":"Sign in with Fanvue","description":"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.","href":"/get-started/sign-in-with-fanvue"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"1) Bootstrap from the Fanvue App Starter","slug":"1-bootstrap-from-the-fanvue-app-starter","depth":2,"children":[]},{"title":"2) Set up local HTTPS proxy","slug":"2-set-up-local-https-proxy","depth":2,"children":[{"title":"Alternative: portless","slug":"alternative-portless","depth":3,"children":[]}]},{"title":"3) Create your Fanvue OAuth app","slug":"3-create-your-fanvue-oauth-app","depth":2,"children":[]},{"title":"4) Configure environment variables","slug":"4-configure-environment-variables","depth":2,"children":[]},{"title":"5) Install and run locally","slug":"5-install-and-run-locally","depth":2,"children":[]},{"title":"6) Deploy to production","slug":"6-deploy-to-production","depth":2,"children":[]},{"title":"How the starter works","slug":"how-the-starter-works","depth":2,"children":[]},{"title":"Using the SDK without the starter","slug":"using-the-sdk-without-the-starter","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"fanvue-bad99af4","siteName":"Fanvue API Documentation","title":"Fanvue API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-09T12:12:30.763Z","originalFileLocation":"get-started/sign-in-with-fanvue.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Fanvue API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Fanvue API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build on Fanvue - the creator subscription platform for the future.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Fanvue API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fanvue-bad99af4.mintlify.site/docs/images/og-image.jpg\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Fanvue API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build on Fanvue - the creator subscription platform for the future.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fanvue-bad99af4.mintlify.site/docs/images/og-image.jpg\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/fanvue-bad99af4/iiC2ecfj0oZDHNDc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Fanvue API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#418326\">\u003clink data-mint-head rel=\"canonical\" href=\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/get-started/sign-in-with-fanvue.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://api.fanvue.com/#organization\",\"name\":\"Fanvue API Documentation\",\"url\":\"https://api.fanvue.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fanvue-bad99af4/dtEplVgXFkLaret8/images/logo-light.svg?fit=max\u0026auto=format\u0026n=dtEplVgXFkLaret8\u0026q=85\u0026s=6756e139f7ac586749dced60571ca7fd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://api.fanvue.com/docs#website\",\"name\":\"Fanvue API Documentation\",\"url\":\"https://api.fanvue.com/docs\",\"publisher\":{\"@id\":\"https://api.fanvue.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue#webpage\",\"url\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue\",\"name\":\"Sign in with Fanvue using the App Starter\",\"description\":\"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.\",\"dateModified\":\"2026-10-09T12:12:30.763Z\",\"isPartOf\":{\"@id\":\"https://api.fanvue.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start here\",\"item\":\"https://api.fanvue.com/docs/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sign in with Fanvue using the App Starter\",\"item\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue#article\",\"headline\":\"Sign in with Fanvue using the App Starter\",\"name\":\"Sign in with Fanvue using the App Starter\",\"description\":\"Add Sign in with Fanvue to an off-platform Next.js app with the Fanvue App Starter and get an OAuth session working locally.\",\"url\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue\",\"mainEntityOfPage\":{\"@id\":\"https://api.fanvue.com/docs/get-started/sign-in-with-fanvue#webpage\"},\"image\":\"https://api.fanvue.com/docs/images/og-image.jpg\",\"dateModified\":\"2026-10-09T12:12:30.763Z\",\"publisher\":{\"@id\":\"https://api.fanvue.com/#organization\"},\"isPartOf\":{\"@id\":\"https://api.fanvue.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Fanvue API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Fanvue API Documentation","nav":{"global":null,"tabs":[{"tab":"Get started","groups":[{"group":"Start here","pages":[{"title":"Build on Fanvue","mode":"wide","href":""},{"title":"Build your first Fanvue app","sidebarTitle":"Build your first app","href":"/get-started/build-your-first-app"},{"title":"Choose your app type","description":"Compare API-only, off-platform and on-platform Fanvue apps by what each needs, what it unlocks and how to switch between them.","href":"/get-started/choose-your-app-type"},{"title":"Sign in with Fanvue using the App Starter","sidebarTitle":"Sign in with Fanvue","href":"/get-started/sign-in-with-fanvue"},{"title":"Test your app before you submit","sidebarTitle":"Test your app","description":"Install and open an unapproved Fanvue app, send test webhooks and set up a test creator account before you submit it for review.","href":"/get-started/test-your-app"},{"title":"New to APIs","href":"/core-concepts/new-to-apis"}]},{"group":"Authentication","pages":[{"title":"Fanvue API authentication with OAuth 2.0 and PKCE","sidebarTitle":"Authentication overview","href":"/authentication/overview"},{"title":"OAuth 2.0 implementation guide for the Fanvue API","sidebarTitle":"Implementation guide","href":"/authentication/implementation-guide"},{"title":"Scopes","href":"/authentication/scopes"},{"title":"Rate limits","href":"/authentication/rate-limits"},{"title":"Secure your integration","sidebarTitle":"Security","href":"/tutorials/security"}]},{"group":"API concepts","pages":[{"title":"Fanvue object model","sidebarTitle":"Object model","href":"/core-concepts/object-model"},{"title":"API versioning","sidebarTitle":"Versioning","href":"/versions/overview"},{"title":"Moving to v1","sidebarTitle":"Moving to v1","href":"/versions/moving-to-v1"},{"title":"Insights metrics: payment sources, gross vs net, reversals","sidebarTitle":"Insights metrics","href":"/core-concepts/insights-metrics"}]},{"group":"Guides","pages":[{"title":"Read and send messages","sidebarTitle":"Messages","href":"/tutorials/working-with-messages"},{"title":"Reply to unread chats automatically","sidebarTitle":"Automated replies","href":"/tutorials/automated-replies"},{"title":"Keep a local copy of chats in sync","sidebarTitle":"Chat sync","href":"/tutorials/efficient-chat-sync"},{"title":"Send a mass message","sidebarTitle":"Mass messages","href":"/tutorials/sending-mass-messages"},{"title":"Build dynamic lists","sidebarTitle":"Dynamic lists","href":"/tutorials/dynamic-lists"},{"title":"Work with media","sidebarTitle":"Media","href":"/tutorials/working-with-media"},{"title":"Upload media in parts","sidebarTitle":"Upload media","href":"/tutorials/uploading-media"},{"title":"Track clicks and attribute fans with tracking links","sidebarTitle":"Tracking links","href":"/tutorials/tracking-links"}]}]},{"tab":"Fanvue Apps","pages":[{"title":"Fanvue Apps","href":"/app-store/introduction"}]},{"tab":"Payments","pages":[{"title":"Payments","href":"/payments/overview"}]},{"tab":"Webhooks","pages":[{"title":"Webhooks","href":"/webhooks"}]},{"tab":"API Reference","versions":[{"version":"v1","groups":[{"group":"Overview","pages":[{"title":"Fanvue API conventions (v1)","sidebarTitle":"Conventions","href":"/v1/api-reference/overview"},{"title":"Error responses","sidebarTitle":"Errors","href":"/api-reference/errors"}]},{"group":"Popular endpoints","pages":[{"title":"Get current user","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/users/me","href":"/v1/api-reference/get-current-user"},{"title":"Get list of chats (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats","href":"/v1/api-reference/get-list-of-chats-cursor-paginated"}]},{"group":"Account","pages":[{"title":"Get current user","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/users/me","href":"/v1/api-reference/get-current-user"},{"title":"Get current user's account","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/users/account","href":"/v1/api-reference/get-current-users-account"},{"title":"Update subscription price","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/users/me/subscription-price","href":"/v1/api-reference/update-subscription-price"}]},{"group":"Chats","pages":[{"group":"Chats","expanded":false,"pages":[{"title":"Get list of chats (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats","href":"/v1/api-reference/get-list-of-chats-cursor-paginated"},{"title":"Get unread chats, messages, and notifications count","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/unread","href":"/v1/api-reference/get-unread-chats-messages-and-notifications-count"},{"title":"Get a single chat","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}","href":"/v1/api-reference/get-a-single-chat"},{"title":"Get media from a chat","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}/media","href":"/v1/api-reference/get-media-from-a-chat"},{"title":"Create a new chat","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats","href":"/v1/api-reference/create-a-new-chat"},{"title":"Get online statuses for multiple users","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/statuses","href":"/v1/api-reference/get-online-statuses-for-multiple-users"},{"title":"Update chat properties","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/chats/{userUuid}","href":"/v1/api-reference/update-chat-properties"},{"title":"Get fan notes","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}/notes","href":"/v1/api-reference/get-fan-notes"},{"title":"Update fan notes","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/chats/{userUuid}/notes","href":"/v1/api-reference/update-fan-notes"},{"title":"Get messages from a chat","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}/messages","href":"/v1/api-reference/get-messages-from-a-chat"},{"title":"Get a single message","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}/messages/{messageUuid}","href":"/v1/api-reference/get-a-single-message"},{"title":"Resolve media UUIDs for a chat message","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/{userUuid}/messages/{messageUuid}/media","href":"/v1/api-reference/resolve-media-uuids-for-a-chat-message"},{"title":"Send a message","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/{userUuid}/message","href":"/v1/api-reference/send-a-message"},{"title":"Send a typing indicator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/{userUuid}/typing","href":"/v1/api-reference/send-a-typing-indicator"},{"title":"Get messages from multiple chats in bulk","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/messages/batch","href":"/v1/api-reference/get-messages-from-multiple-chats-in-bulk"},{"title":"Delete a message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/{userUuid}/messages/{messageUuid}","href":"/v1/api-reference/delete-a-message"}]},{"group":"Templates","expanded":false,"pages":[{"title":"Get list of template messages (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/templates","href":"/v1/api-reference/get-list-of-template-messages-cursor-paginated"},{"title":"Get list of template folders (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/templates/folders","href":"/v1/api-reference/get-list-of-template-folders-cursor-paginated"},{"title":"Get a single template message","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/templates/{templateUuid}","href":"/v1/api-reference/get-a-single-template-message"},{"title":"Create or edit a template message","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/templates","href":"/v1/api-reference/create-or-edit-a-template-message"},{"title":"Create a template folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/templates/folders","href":"/v1/api-reference/create-a-template-folder"},{"title":"Rename a template folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/chats/templates/folders/{folderUuid}","href":"/v1/api-reference/rename-a-template-folder"},{"title":"Delete a template message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/templates/{templateUuid}","href":"/v1/api-reference/delete-a-template-message"}]},{"group":"Automated messages","expanded":false,"pages":[{"title":"List automated messages","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/automated-messages","href":"/v1/api-reference/list-automated-messages"},{"title":"Enable or update an automated message","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/chats/automated-messages/{trigger}","href":"/v1/api-reference/enable-or-update-an-automated-message"},{"title":"Disable an automated message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/automated-messages/{trigger}","href":"/v1/api-reference/disable-an-automated-message"}]},{"group":"Mass messages","expanded":false,"pages":[{"title":"List mass messages (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/mass-messages","href":"/v1/api-reference/list-mass-messages-cursor-paginated"},{"title":"Send a mass message","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/mass-messages","href":"/v1/api-reference/send-a-mass-message"},{"title":"Update a scheduled mass message","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/chats/mass-messages/{messageUuid}","href":"/v1/api-reference/update-a-scheduled-mass-message"},{"title":"Delete a mass message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/mass-messages/{messageUuid}","href":"/v1/api-reference/delete-a-mass-message"}]},{"group":"Fan lists","expanded":false,"pages":[{"title":"Get smart lists","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/smart","href":"/v1/api-reference/get-smart-lists"},{"title":"Get smart list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/smart/{uuid}","href":"/v1/api-reference/get-smart-list-members-cursor-paginated"},{"title":"Get custom lists (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/custom","href":"/v1/api-reference/get-custom-lists-cursor-paginated"},{"title":"Get custom list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/custom/{uuid}","href":"/v1/api-reference/get-custom-list-members-cursor-paginated"},{"title":"Create a custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/custom","href":"/v1/api-reference/create-a-custom-list"},{"title":"Rename a custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/chats/lists/custom/{uuid}","href":"/v1/api-reference/rename-a-custom-list"},{"title":"Delete a custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/lists/custom/{uuid}","href":"/v1/api-reference/delete-a-custom-list"},{"title":"Add members to a custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/custom/{uuid}/members","href":"/v1/api-reference/add-members-to-a-custom-list"},{"title":"Remove a member from a custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/lists/custom/{uuid}/members/{userUuid}","href":"/v1/api-reference/remove-a-member-from-a-custom-list"}]},{"group":"Dynamic lists","expanded":false,"pages":[{"title":"Get dynamic smart lists","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/dynamic","href":"/v1/api-reference/get-dynamic-smart-lists"},{"title":"Create a dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/dynamic","href":"/v1/api-reference/create-a-dynamic-smart-list"},{"title":"Get dynamic smart list dimensions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/dynamic/dimensions","href":"/v1/api-reference/get-dynamic-smart-list-dimensions"},{"title":"Get dynamic smart list memory topic suggestions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/dynamic/memory-topics","href":"/v1/api-reference/get-dynamic-smart-list-memory-topic-suggestions"},{"title":"Preview a dynamic smart list's member count","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/dynamic/preview/count","href":"/v1/api-reference/preview-a-dynamic-smart-lists-member-count"},{"title":"Preview a dynamic smart list's members","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/dynamic/preview/members","href":"/v1/api-reference/preview-a-dynamic-smart-lists-members"},{"title":"Translate a plain-language description into a dynamic smart list definition","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/chats/lists/dynamic/translate","href":"/v1/api-reference/translate-a-plain-language-description-into-a-dynamic-smart-list-definition"},{"title":"Get a dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/get-a-dynamic-smart-list"},{"title":"Update a dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/update-a-dynamic-smart-list"},{"title":"Delete a dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/delete-a-dynamic-smart-list"},{"title":"Get dynamic smart list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/chats/lists/dynamic/{uuid}/members","href":"/v1/api-reference/get-dynamic-smart-list-members-cursor-paginated"}]}]},{"group":"Notifications","pages":[{"title":"Get notifications feed","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/notifications","href":"/v1/api-reference/get-notifications-feed"}]},{"group":"Posts","pages":[{"group":"Posts","expanded":false,"pages":[{"title":"Get list of posts (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/posts","href":"/v1/api-reference/get-list-of-posts-cursor-paginated"},{"title":"Get post by UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/posts/{uuid}","href":"/v1/api-reference/get-post-by-uuid"},{"title":"Create a new post","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/posts","href":"/v1/api-reference/create-a-new-post"},{"title":"Update a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/posts/{uuid}","href":"/v1/api-reference/update-a-post"},{"title":"Delete a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/posts/{uuid}","href":"/v1/api-reference/delete-a-post"},{"title":"Repost content","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/posts/{uuid}/repost","href":"/v1/api-reference/repost-content"},{"title":"Pin a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/posts/{uuid}/pin","href":"/v1/api-reference/pin-a-post"},{"title":"Unpin a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/posts/{uuid}/pin","href":"/v1/api-reference/unpin-a-post"}]},{"group":"Comments","expanded":false,"pages":[{"title":"Get comments for a post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/posts/{uuid}/comments","href":"/v1/api-reference/get-comments-for-a-post-cursor-paginated"},{"title":"Create a comment on a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/posts/{uuid}/comments","href":"/v1/api-reference/create-a-comment-on-a-post"},{"title":"Delete a comment from a post","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/posts/{uuid}/comments/{commentUuid}","href":"/v1/api-reference/delete-a-comment-from-a-post"}]},{"group":"Likes and tips","expanded":false,"pages":[{"title":"Get tips for a post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/posts/{uuid}/tips","href":"/v1/api-reference/get-tips-for-a-post-cursor-paginated"},{"title":"Get likes for a post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/posts/{uuid}/likes","href":"/v1/api-reference/get-likes-for-a-post-cursor-paginated"}]}]},{"group":"Creator tools","pages":[{"group":"Vault","expanded":false,"pages":[{"title":"List vault folders (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/vault/folders","href":"/v1/api-reference/list-vault-folders-cursor-paginated"},{"title":"Create a vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/vault/folders","href":"/v1/api-reference/create-a-vault-folder"},{"title":"Get vault folder details","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/vault/folders/{folderName}","href":"/v1/api-reference/get-vault-folder-details"},{"title":"Delete vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/vault/folders/{folderName}","href":"/v1/api-reference/delete-vault-folder"},{"title":"Rename vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/vault/folders/{folderName}","href":"/v1/api-reference/rename-vault-folder"},{"title":"List media in folder (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/vault/folders/{folderName}/media","href":"/v1/api-reference/list-media-in-folder-cursor-paginated"},{"title":"Add media to folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/vault/folders/{folderName}/media","href":"/v1/api-reference/add-media-to-folder"},{"title":"Update media properties","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/vault/folders/{folderName}/media/{mediaUuid}","href":"/v1/api-reference/update-media-properties"},{"title":"Remove media from folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/vault/folders/{folderName}/media/{mediaUuid}","href":"/v1/api-reference/remove-media-from-folder"}]},{"group":"Media","expanded":false,"pages":[{"title":"List content collections (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/collections","href":"/v1/api-reference/list-content-collections-cursor-paginated"},{"title":"Create a content collection","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/collections","href":"/v1/api-reference/create-a-content-collection"},{"title":"Rename a content collection","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/collections/{uuid}","href":"/v1/api-reference/rename-a-content-collection"},{"title":"Delete a content collection","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/collections/{uuid}","href":"/v1/api-reference/delete-a-content-collection"},{"title":"Get user's media list (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media","href":"/v1/api-reference/get-users-media-list-cursor-paginated"},{"title":"Get bulk media by UUIDs","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media/bulk","href":"/v1/api-reference/get-bulk-media-by-uuids"},{"title":"Get media by UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media/{uuid}","href":"/v1/api-reference/get-media-by-uuid"},{"title":"Update media name, caption and recommended price","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/media/{uuid}","href":"/v1/api-reference/update-media-name-caption-and-recommended-price"},{"title":"Delete media from vault","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/media/{uuid}","href":"/v1/api-reference/delete-media-from-vault"},{"title":"Get media for an entitled consumer","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media/{uuid}/entitled","href":"/v1/api-reference/get-media-for-an-entitled-consumer"},{"title":"Grant a consumer access to a media item","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/media/{uuid}/grant","href":"/v1/api-reference/grant-a-consumer-access-to-a-media-item"},{"title":"Check if the authenticated user has purchased a media link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media/links/{uuid}/purchased","href":"/v1/api-reference/check-if-the-authenticated-user-has-purchased-a-media-link"},{"title":"Create multipart upload session","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/media/uploads","href":"/v1/api-reference/create-multipart-upload-session"},{"title":"Get signed URL for upload part","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/{partNumber}/url","href":"/v1/api-reference/get-signed-url-for-upload-part"},{"title":"Get signed URLs for a range of upload parts","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/urls","href":"/v1/api-reference/get-signed-urls-for-a-range-of-upload-parts"},{"title":"Complete upload session","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/media/uploads/{uploadId}","href":"/v1/api-reference/complete-upload-session"}]},{"group":"Tracking links","expanded":false,"pages":[{"title":"List tracking links","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/tracking-links","href":"/v1/api-reference/list-tracking-links"},{"title":"List users for a tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/tracking-links/{uuid}/users","href":"/v1/api-reference/list-users-for-a-tracking-link"},{"title":"Get tracking metadata for a user","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/tracking-links/{uuid}/users/{userUuid}/metadata","href":"/v1/api-reference/get-tracking-metadata-for-a-user"},{"title":"Create a tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/tracking-links","href":"/v1/api-reference/create-a-tracking-link"},{"title":"Delete a tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/tracking-links/{uuid}","href":"/v1/api-reference/delete-a-tracking-link"},{"title":"List clicks on a tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/tracking-links/{uuid}/impressions","href":"/v1/api-reference/list-clicks-on-a-tracking-link"}]},{"group":"Free trial links","expanded":false,"pages":[{"title":"List free trial links","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/free-trial-links","href":"/v1/api-reference/list-free-trial-links"},{"title":"Create a free trial link","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/free-trial-links","href":"/v1/api-reference/create-a-free-trial-link"},{"title":"Edit a free trial link","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/free-trial-links/{uuid}","href":"/v1/api-reference/edit-a-free-trial-link"},{"title":"Delete a free trial link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/free-trial-links/{uuid}","href":"/v1/api-reference/delete-a-free-trial-link"}]},{"group":"Promotions","expanded":false,"pages":[{"title":"List promotions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/promotions","href":"/v1/api-reference/list-promotions"},{"title":"Create a promotion","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/promotions","href":"/v1/api-reference/create-a-promotion"},{"title":"Edit a promotion","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/promotions/{promotionUuid}","href":"/v1/api-reference/edit-a-promotion"},{"title":"Stop a promotion","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/promotions/{promotionUuid}","href":"/v1/api-reference/stop-a-promotion"}]},{"group":"Checkout links","expanded":false,"pages":[{"title":"List checkout links (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/checkout-links","href":"/v1/api-reference/list-checkout-links-cursor-paginated"},{"title":"Create a checkout link","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/checkout-links","href":"/v1/api-reference/create-a-checkout-link"},{"title":"Enable or disable a checkout link","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/checkout-links/{uuid}","href":"/v1/api-reference/enable-or-disable-a-checkout-link"},{"title":"Delete a checkout link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/checkout-links/{uuid}","href":"/v1/api-reference/delete-a-checkout-link"}]},{"group":"Media links","expanded":false,"pages":[{"title":"List media links (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/media-links","href":"/v1/api-reference/list-media-links-cursor-paginated"},{"title":"Create a media link","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/media-links","href":"/v1/api-reference/create-a-media-link"},{"title":"Delete a media link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/media-links/{uuid}","href":"/v1/api-reference/delete-a-media-link"}]}]},{"group":"Insights and earnings","pages":[{"group":"Insights","expanded":false,"pages":[{"title":"Get top-spending fans (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/top-spenders","href":"/v1/api-reference/get-top-spending-fans-cursor-paginated"},{"title":"Get subscriber events over time","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/subscribers","href":"/v1/api-reference/get-subscriber-events-over-time"},{"title":"Get fan insights in bulk","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/fans","href":"/v1/api-reference/get-fan-insights-in-bulk"},{"title":"Get fan insights","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/fans/{userUuid}","href":"/v1/api-reference/get-fan-insights"},{"title":"Get fan insights in bulk (POST batch)","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/insights/fans/batch","href":"/v1/api-reference/get-fan-insights-in-bulk-post-batch"},{"title":"Get fan profiles in bulk","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/insights/fans/profiles","href":"/v1/api-reference/get-fan-profiles-in-bulk"},{"title":"Get fan retention summary","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/fan-retention-summary","href":"/v1/api-reference/get-fan-retention-summary"},{"title":"Get unsubscribe reasons","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/unsubscribe-reasons","href":"/v1/api-reference/get-unsubscribe-reasons"},{"title":"Get followers (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/followers","href":"/v1/api-reference/get-followers-cursor-paginated"},{"title":"Get subscribers (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/subscribers","href":"/v1/api-reference/get-subscribers-cursor-paginated"},{"title":"Get subscriber by user UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/subscribers/{userUuid}","href":"/v1/api-reference/get-subscriber-by-user-uuid"},{"title":"Get subscriber history","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/subscribers/{userUuid}/history","href":"/v1/api-reference/get-subscriber-history"}]},{"group":"Earnings and payouts","expanded":false,"pages":[{"title":"Get earnings data","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/earnings","href":"/v1/api-reference/get-earnings-data"},{"title":"Get aggregated earnings summary","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/earnings/summary","href":"/v1/api-reference/get-aggregated-earnings-summary"},{"title":"Get earnings percentile","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/earnings/percentile","href":"/v1/api-reference/get-earnings-percentile"},{"title":"Get spending reversal data","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/insights/spending","href":"/v1/api-reference/get-spending-reversal-data"}]}]},{"group":"Experiences","pages":[{"title":"List the experiences your app has published for this creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/experiences","href":"/v1/api-reference/list-the-experiences-your-app-has-published-for-this-creator"},{"title":"Publish an experience for this creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/experiences","href":"/v1/api-reference/publish-an-experience-for-this-creator"},{"title":"Update one of your experiences for this creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/experiences/{experienceUuid}","href":"/v1/api-reference/update-one-of-your-experiences-for-this-creator"},{"title":"Unpublish one of your experiences for this creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/experiences/{experienceUuid}/unpublish","href":"/v1/api-reference/unpublish-one-of-your-experiences-for-this-creator"},{"title":"Mint a publish/unpublish request token","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/experiences/request-token","href":"/v1/api-reference/mint-a-publishunpublish-request-token"},{"title":"Exchange a fan experience launch token","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/experiences/token/exchange","href":"/v1/api-reference/exchange-a-fan-experience-launch-token"},{"title":"List action purchases for one of your experiences","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/experiences/{experienceUuid}/action-purchases","href":"/v1/api-reference/list-action-purchases-for-one-of-your-experiences"},{"title":"Charge one action from the fan's wallet balance","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/experiences/{experienceUuid}/action-purchases","href":"/v1/api-reference/charge-one-action-from-the-fans-wallet-balance"},{"title":"Get one action purchase by its purchase reference","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/experiences/{experienceUuid}/action-purchases/{purchaseReference}","href":"/v1/api-reference/get-one-action-purchase-by-its-purchase-reference"},{"title":"List an experience's priced actions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/experiences/{experienceUuid}/actions","href":"/v1/api-reference/list-an-experiences-priced-actions"}]},{"group":"Webhooks","pages":[{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/webhooks/subscriptions","href":"/v1/api-reference/list-webhook-subscriptions"},{"title":"Create a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/webhooks/subscriptions","href":"/v1/api-reference/create-a-webhook-subscription"},{"title":"Send a test webhook event","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/webhooks/test","href":"/v1/api-reference/send-a-test-webhook-event"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/webhooks/subscriptions/{id}","href":"/v1/api-reference/delete-a-webhook-subscription"}]},{"group":"Agency","pages":[{"group":"Agency management","expanded":false,"pages":[{"title":"Get agency creators (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators","href":"/v1/api-reference/get-agency-creators-cursor-paginated"},{"title":"List team members","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/team-members","href":"/v1/api-reference/list-team-members"},{"title":"Invite a team member","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/agencies/invites","href":"/v1/api-reference/invite-a-team-member"},{"title":"Invite a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/agencies/creator-invites","href":"/v1/api-reference/invite-a-creator"},{"title":"Update team member","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/agencies/team-members/{userId}","href":"/v1/api-reference/update-team-member"},{"title":"Bulk-create posts across creators","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/agencies/posts","href":"/v1/api-reference/bulk-create-posts-across-creators"},{"title":"Get messages from multiple chats in bulk across the agency's creators (POST batch)","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/agencies/chats/messages/batch","href":"/v1/api-reference/get-messages-from-multiple-chats-in-bulk-across-the-agencys-creators-post-batch"}]},{"group":"Agency insights","expanded":false,"pages":[{"title":"Get agency insights headline metrics","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/insights/overview","href":"/v1/api-reference/get-agency-insights-headline-metrics"},{"title":"Get chatter leaderboard","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/insights/chatter-leaderboard","href":"/v1/api-reference/get-chatter-leaderboard"},{"title":"List chatter earnings by creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/insights/chatter-earnings","href":"/v1/api-reference/list-chatter-earnings-by-creator-cursor-paginated"},{"title":"Get the agency's five highest-spending fans","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/insights/top-fans","href":"/v1/api-reference/get-the-agencys-five-highest-spending-fans"},{"title":"List agency fan spend by country (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/insights/demographics","href":"/v1/api-reference/list-agency-fan-spend-by-country-cursor-paginated"},{"title":"List chats across all agency creators (cursor-paginated, filterable)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/chats","href":"/v1/api-reference/list-chats-across-all-agency-creators-cursor-paginated-filterable"},{"title":"List active subscribers across all agency creators (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/subscribers","href":"/v1/api-reference/list-active-subscribers-across-all-agency-creators-cursor-paginated"},{"title":"List per-creator-per-day earnings across all agency creators (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/earnings","href":"/v1/api-reference/list-per-creator-per-day-earnings-across-all-agency-creators-cursor-paginated"},{"title":"List per-creator-per-day subscriber events across all agency creators (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/subscribers-history","href":"/v1/api-reference/list-per-creator-per-day-subscriber-events-across-all-agency-creators-cursor-paginated"},{"title":"List per-creator-per-day new-follower counts across all agency creators (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/agencies/followers-history","href":"/v1/api-reference/list-per-creator-per-day-new-follower-counts-across-all-agency-creators-cursor-paginated"}]},{"group":"Creator account","expanded":false,"pages":[{"title":"Get account view for a managed creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/account","href":"/v1/api-reference/get-account-view-for-a-managed-creator"},{"title":"Get a creator's account health","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/account-health","href":"/v1/api-reference/get-a-creators-account-health"},{"title":"List a creator's flagged media (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/account-health/flagged-media","href":"/v1/api-reference/list-a-creators-flagged-media-cursor-paginated"},{"title":"Update creator's subscription price","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/subscription-price","href":"/v1/api-reference/update-creators-subscription-price"},{"title":"Get creator notifications feed","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/notifications","href":"/v1/api-reference/get-creator-notifications-feed"},{"title":"Get creator followers (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/followers","href":"/v1/api-reference/get-creator-followers-cursor-paginated"},{"title":"Get creator subscribers (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/subscribers","href":"/v1/api-reference/get-creator-subscribers-cursor-paginated"},{"title":"Get online subscribers","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/subscribers/online","href":"/v1/api-reference/get-online-subscribers"},{"title":"Get creator subscriber by user UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/subscribers/{userUuid}","href":"/v1/api-reference/get-creator-subscriber-by-user-uuid"},{"title":"Get creator subscriber history","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/subscribers/{userUuid}/history","href":"/v1/api-reference/get-creator-subscriber-history"}]},{"group":"Creator blocks","expanded":false,"pages":[{"title":"List users blocked by a creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/blocks","href":"/v1/api-reference/list-users-blocked-by-a-creator-cursor-paginated"},{"title":"Block a user on behalf of a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/blocks/{userUuid}","href":"/v1/api-reference/block-a-user-on-behalf-of-a-creator"},{"title":"Unblock a user on behalf of a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/blocks/{userUuid}","href":"/v1/api-reference/unblock-a-user-on-behalf-of-a-creator"}]},{"group":"Creator chats","expanded":false,"pages":[{"title":"Get chats of a creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats","href":"/v1/api-reference/get-chats-of-a-creator-cursor-paginated"},{"title":"Get unread chats, messages, and notifications count for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/unread","href":"/v1/api-reference/get-unread-chats-messages-and-notifications-count-for-a-creator"},{"title":"Create new chat as creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats","href":"/v1/api-reference/create-new-chat-as-creator"},{"title":"Get online statuses for multiple users as a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/statuses","href":"/v1/api-reference/get-online-statuses-for-multiple-users-as-a-creator"},{"title":"Update a creator's chat with a user","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/chats/{userUuid}","href":"/v1/api-reference/update-a-creators-chat-with-a-user"},{"title":"Get a creator's notes about a fan","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/{userUuid}/notes","href":"/v1/api-reference/get-a-creators-notes-about-a-fan"},{"title":"Update a creator's notes about a fan","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/creators/{creatorUserUuid}/chats/{userUuid}/notes","href":"/v1/api-reference/update-a-creators-notes-about-a-fan"},{"title":"Get creator's smart lists","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/smart","href":"/v1/api-reference/get-creators-smart-lists"},{"title":"Get creator's smart list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/smart/{uuid}","href":"/v1/api-reference/get-creators-smart-list-members-cursor-paginated"},{"title":"Get creator's custom lists (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/custom","href":"/v1/api-reference/get-creators-custom-lists-cursor-paginated"},{"title":"Get creator's custom list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/custom/{uuid}","href":"/v1/api-reference/get-creators-custom-list-members-cursor-paginated"},{"title":"Create a custom list for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/custom","href":"/v1/api-reference/create-a-custom-list-for-a-creator"},{"title":"Rename a creator's custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/chats/lists/custom/{uuid}","href":"/v1/api-reference/rename-a-creators-custom-list"},{"title":"Delete a creator's custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/lists/custom/{uuid}","href":"/v1/api-reference/delete-a-creators-custom-list"},{"title":"Add members to a creator's custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/custom/{uuid}/members","href":"/v1/api-reference/add-members-to-a-creators-custom-list"},{"title":"Remove a member from a creator's custom list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/lists/custom/{uuid}/members/{userUuid}","href":"/v1/api-reference/remove-a-member-from-a-creators-custom-list"},{"title":"List mass messages for a creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/mass-messages","href":"/v1/api-reference/list-mass-messages-for-a-creator-cursor-paginated"},{"title":"Send a mass message as creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/mass-messages","href":"/v1/api-reference/send-a-mass-message-as-creator"},{"title":"Update a creator scheduled mass message","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/chats/mass-messages/{messageUuid}","href":"/v1/api-reference/update-a-creator-scheduled-mass-message"},{"title":"Delete a creator mass message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/mass-messages/{messageUuid}","href":"/v1/api-reference/delete-a-creator-mass-message"},{"title":"Get a creator's template messages (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/templates","href":"/v1/api-reference/get-a-creators-template-messages-cursor-paginated"},{"title":"Get a creator's template folders (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/templates/folders","href":"/v1/api-reference/get-a-creators-template-folders-cursor-paginated"},{"title":"Get one of a creator's template messages","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/templates/{templateUuid}","href":"/v1/api-reference/get-one-of-a-creators-template-messages"},{"title":"List a creator's automated messages","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/automated-messages","href":"/v1/api-reference/list-a-creators-automated-messages"},{"title":"Enable or update a creator's automated message","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/creators/{creatorUserUuid}/chats/automated-messages/{trigger}","href":"/v1/api-reference/enable-or-update-a-creators-automated-message"},{"title":"Disable a creator's automated message","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/automated-messages/{trigger}","href":"/v1/api-reference/disable-a-creators-automated-message"},{"title":"Send a message as creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/{userUuid}/message","href":"/v1/api-reference/send-a-message-as-creator"},{"title":"Get messages from multiple chats in bulk for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/messages/batch","href":"/v1/api-reference/get-messages-from-multiple-chats-in-bulk-for-a-creator"},{"title":"Get messages between a creator and a user","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/{userUuid}/messages","href":"/v1/api-reference/get-messages-between-a-creator-and-a-user"},{"title":"Resolve media UUIDs for a creator chat message","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/{userUuid}/messages/{messageUuid}/media","href":"/v1/api-reference/resolve-media-uuids-for-a-creator-chat-message"},{"title":"Get media from a creator's chat","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/{userUuid}/media","href":"/v1/api-reference/get-media-from-a-creators-chat"},{"title":"Delete a message as a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/{userUuid}/messages/{messageUuid}","href":"/v1/api-reference/delete-a-message-as-a-creator"}]},{"group":"Creator dynamic lists","expanded":false,"pages":[{"title":"Get a creator's dynamic smart lists","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/dynamic","href":"/v1/api-reference/get-a-creators-dynamic-smart-lists"},{"title":"Create a dynamic smart list for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/dynamic","href":"/v1/api-reference/create-a-dynamic-smart-list-for-a-creator"},{"title":"Get a creator's dynamic smart list dimensions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/dynamic/dimensions","href":"/v1/api-reference/get-a-creators-dynamic-smart-list-dimensions"},{"title":"Get a creator's dynamic smart list memory topic suggestions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/dynamic/memory-topics","href":"/v1/api-reference/get-a-creators-dynamic-smart-list-memory-topic-suggestions"},{"title":"Preview a creator's dynamic smart list member count","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/dynamic/preview/count","href":"/v1/api-reference/preview-a-creators-dynamic-smart-list-member-count"},{"title":"Preview a creator's dynamic smart list members","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/dynamic/preview/members","href":"/v1/api-reference/preview-a-creators-dynamic-smart-list-members"},{"title":"Translate a plain-language description into a dynamic smart list definition for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/chats/lists/dynamic/translate","href":"/v1/api-reference/translate-a-plain-language-description-into-a-dynamic-smart-list-definition-for-a-creator"},{"title":"Get a creator's dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/get-a-creators-dynamic-smart-list"},{"title":"Update a creator's dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/update-a-creators-dynamic-smart-list"},{"title":"Delete a creator's dynamic smart list","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/chats/lists/dynamic/{uuid}","href":"/v1/api-reference/delete-a-creators-dynamic-smart-list"},{"title":"Get a creator's dynamic smart list members (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/chats/lists/dynamic/{uuid}/members","href":"/v1/api-reference/get-a-creators-dynamic-smart-list-members-cursor-paginated"}]},{"group":"Creator insights","expanded":false,"pages":[{"title":"Get earnings data for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/earnings","href":"/v1/api-reference/get-earnings-data-for-a-creator"},{"title":"Get aggregated earnings summary for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/earnings/summary","href":"/v1/api-reference/get-aggregated-earnings-summary-for-a-creator"},{"title":"Get earnings percentile for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/earnings/percentile","href":"/v1/api-reference/get-earnings-percentile-for-a-creator"},{"title":"Get spending reversal data for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/spending","href":"/v1/api-reference/get-spending-reversal-data-for-a-creator"},{"title":"Get top-spending fans for a creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/top-spenders","href":"/v1/api-reference/get-top-spending-fans-for-a-creator-cursor-paginated"},{"title":"Get subscriber events over time for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/subscribers","href":"/v1/api-reference/get-subscriber-events-over-time-for-a-creator"},{"title":"Get fan insights in bulk for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/fans","href":"/v1/api-reference/get-fan-insights-in-bulk-for-a-creator"},{"title":"Get fan insights for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/fans/{userUuid}","href":"/v1/api-reference/get-fan-insights-for-a-creator"},{"title":"Get fan insights in bulk for a creator (POST batch)","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/insights/fans/batch","href":"/v1/api-reference/get-fan-insights-in-bulk-for-a-creator-post-batch"},{"title":"Get fan retention summary for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/fan-retention-summary","href":"/v1/api-reference/get-fan-retention-summary-for-a-creator"},{"title":"Get unsubscribe reasons for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/insights/unsubscribe-reasons","href":"/v1/api-reference/get-unsubscribe-reasons-for-a-creator"}]},{"group":"Creator media","expanded":false,"pages":[{"title":"Get creator's media list (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media","href":"/v1/api-reference/get-creators-media-list-cursor-paginated"},{"title":"Get bulk media by UUIDs for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/bulk","href":"/v1/api-reference/get-bulk-media-by-uuids-for-a-creator"},{"title":"Get creator's media by UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/{uuid}","href":"/v1/api-reference/get-creators-media-by-uuid"},{"title":"Update a creator's media name, caption and recommended price","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/media/{uuid}","href":"/v1/api-reference/update-a-creators-media-name-caption-and-recommended-price"},{"title":"Delete a creator's media from the vault","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/media/{uuid}","href":"/v1/api-reference/delete-a-creators-media-from-the-vault"},{"title":"Get media for an entitled consumer of a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/{uuid}/entitled","href":"/v1/api-reference/get-media-for-an-entitled-consumer-of-a-creator"},{"title":"Grant a consumer access to a creator's media item","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/media/{uuid}/grant","href":"/v1/api-reference/grant-a-consumer-access-to-a-creators-media-item"},{"title":"Check if a creator has purchased a media link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/links/{uuid}/purchased","href":"/v1/api-reference/check-if-a-creator-has-purchased-a-media-link"},{"title":"Create multipart upload session for creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/media/uploads","href":"/v1/api-reference/create-multipart-upload-session-for-creator"},{"title":"Get signed URL for upload part","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/{partNumber}/url","href":"/v1/api-reference/get-signed-url-for-upload-part"},{"title":"Get signed URLs for a range of upload parts","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}/parts/urls","href":"/v1/api-reference/get-signed-urls-for-a-range-of-upload-parts"},{"title":"Complete creator's upload session","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/media/uploads/{uploadId}","href":"/v1/api-reference/complete-creators-upload-session"}]},{"group":"Creator posts","expanded":false,"pages":[{"title":"Get posts for a creator (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/posts","href":"/v1/api-reference/get-posts-for-a-creator-cursor-paginated"},{"title":"Get a creator's post by UUID","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/posts/{uuid}","href":"/v1/api-reference/get-a-creators-post-by-uuid"},{"title":"Create a new post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/posts","href":"/v1/api-reference/create-a-new-post-for-a-creator"},{"title":"Update a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/posts/{uuid}","href":"/v1/api-reference/update-a-post-for-a-creator"},{"title":"Delete a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/posts/{uuid}","href":"/v1/api-reference/delete-a-post-for-a-creator"},{"title":"Get comments for a creator's post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/posts/{uuid}/comments","href":"/v1/api-reference/get-comments-for-a-creators-post-cursor-paginated"},{"title":"Create a comment on a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/posts/{uuid}/comments","href":"/v1/api-reference/create-a-comment-on-a-post-for-a-creator"},{"title":"Delete a comment from a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/posts/{uuid}/comments/{commentUuid}","href":"/v1/api-reference/delete-a-comment-from-a-post-for-a-creator"},{"title":"Repost content for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/posts/{uuid}/repost","href":"/v1/api-reference/repost-content-for-a-creator"},{"title":"Pin a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/posts/{uuid}/pin","href":"/v1/api-reference/pin-a-post-for-a-creator"},{"title":"Unpin a post for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/posts/{uuid}/pin","href":"/v1/api-reference/unpin-a-post-for-a-creator"},{"title":"Get tips for a creator's post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/posts/{uuid}/tips","href":"/v1/api-reference/get-tips-for-a-creators-post-cursor-paginated"},{"title":"Get likes for a creator's post (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/posts/{uuid}/likes","href":"/v1/api-reference/get-likes-for-a-creators-post-cursor-paginated"}]},{"group":"Creator tracking links","expanded":false,"pages":[{"title":"List creator's tracking links","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/tracking-links","href":"/v1/api-reference/list-creators-tracking-links"},{"title":"Create a tracking link for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/tracking-links","href":"/v1/api-reference/create-a-tracking-link-for-a-creator"},{"title":"List users for a creator's tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/tracking-links/{uuid}/users","href":"/v1/api-reference/list-users-for-a-creators-tracking-link"},{"title":"Get tracking metadata for a user on a creator's tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/tracking-links/{uuid}/users/{userUuid}/metadata","href":"/v1/api-reference/get-tracking-metadata-for-a-user-on-a-creators-tracking-link"},{"title":"Delete a tracking link for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/tracking-links/{uuid}","href":"/v1/api-reference/delete-a-tracking-link-for-a-creator"},{"title":"List clicks on a creator's tracking link","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/tracking-links/{uuid}/impressions","href":"/v1/api-reference/list-clicks-on-a-creators-tracking-link"}]},{"group":"Creator free trial links","expanded":false,"pages":[{"title":"List creator's free trial links","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/free-trial-links","href":"/v1/api-reference/list-creators-free-trial-links"},{"title":"Create a free trial link for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/free-trial-links","href":"/v1/api-reference/create-a-free-trial-link-for-a-creator"},{"title":"Edit a creator's free trial link","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/creators/{creatorUserUuid}/free-trial-links/{uuid}","href":"/v1/api-reference/edit-a-creators-free-trial-link"},{"title":"Delete a creator's free trial link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/free-trial-links/{uuid}","href":"/v1/api-reference/delete-a-creators-free-trial-link"}]},{"group":"Creator promotions","expanded":false,"pages":[{"title":"List creator's promotions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/promotions","href":"/v1/api-reference/list-creators-promotions"},{"title":"Create a promotion for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/promotions","href":"/v1/api-reference/create-a-promotion-for-a-creator"},{"title":"Edit a creator's promotion","deprecated":null,"version":null,"openapi":"/openapi-v1.json put /v1/creators/{creatorUserUuid}/promotions/{promotionUuid}","href":"/v1/api-reference/edit-a-creators-promotion"},{"title":"Stop a creator's promotion","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/promotions/{promotionUuid}","href":"/v1/api-reference/stop-a-creators-promotion"}]},{"group":"Creator checkout links","expanded":false,"pages":[{"title":"List a creator's checkout links (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/checkout-links","href":"/v1/api-reference/list-a-creators-checkout-links-cursor-paginated"},{"title":"Create a checkout link for a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links","href":"/v1/api-reference/create-a-checkout-link-for-a-creator"},{"title":"Enable or disable a creator's checkout link","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/checkout-links/{uuid}","href":"/v1/api-reference/enable-or-disable-a-creators-checkout-link"},{"title":"Delete a creator's checkout link","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/checkout-links/{uuid}","href":"/v1/api-reference/delete-a-creators-checkout-link"}]},{"group":"Creator checkout payments","expanded":false,"pages":[{"title":"List a creator's checkout-link payments","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/checkout-links/payments","href":"/v1/api-reference/list-a-creators-checkout-link-payments"},{"title":"Get a creator's checkout-link payment by invoice number","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/checkout-links/payments/{invoiceNumber}","href":"/v1/api-reference/get-a-creators-checkout-link-payment-by-invoice-number"}]},{"group":"Creator checkout subscriptions","expanded":false,"pages":[{"title":"List a creator's checkout-link subscriptions","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/checkout-links/subscriptions","href":"/v1/api-reference/list-a-creators-checkout-link-subscriptions"},{"title":"Cancel a creator's checkout-link subscription at the period end","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel","href":"/v1/api-reference/cancel-a-creators-checkout-link-subscription-at-the-period-end"},{"title":"Reactivate a cancelled checkout-link subscription","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/uncancel","href":"/v1/api-reference/reactivate-a-cancelled-checkout-link-subscription"}]},{"group":"Creator checkout refund requests","expanded":false,"pages":[{"title":"Ask Fanvue to refund a checkout-link payment","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links/payments/{invoiceNumber}/refund-requests","href":"/v1/api-reference/ask-fanvue-to-refund-a-checkout-link-payment"},{"title":"List a creator's checkout-link refund requests","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/checkout-links/refund-requests","href":"/v1/api-reference/list-a-creators-checkout-link-refund-requests"},{"title":"Withdraw a checkout-link refund request","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links/refund-requests/{uuid}/withdraw","href":"/v1/api-reference/withdraw-a-checkout-link-refund-request"}]},{"group":"Creator vault","expanded":false,"pages":[{"title":"List creator vault folders (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/vault/folders","href":"/v1/api-reference/list-creator-vault-folders-cursor-paginated"},{"title":"Create a creator vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/vault/folders","href":"/v1/api-reference/create-a-creator-vault-folder"},{"title":"Get creator vault folder details","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/vault/folders/{folderName}","href":"/v1/api-reference/get-creator-vault-folder-details"},{"title":"Rename creator vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json patch /v1/creators/{creatorUserUuid}/vault/folders/{folderName}","href":"/v1/api-reference/rename-creator-vault-folder"},{"title":"Delete creator vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/vault/folders/{folderName}","href":"/v1/api-reference/delete-creator-vault-folder"},{"title":"List media in creator vault folder (cursor-paginated)","deprecated":null,"version":null,"openapi":"/openapi-v1.json get /v1/creators/{creatorUserUuid}/vault/folders/{folderName}/media","href":"/v1/api-reference/list-media-in-creator-vault-folder-cursor-paginated"},{"title":"Add media to creator vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/creators/{creatorUserUuid}/vault/folders/{folderName}/media","href":"/v1/api-reference/add-media-to-creator-vault-folder"},{"title":"Remove media from creator vault folder","deprecated":null,"version":null,"openapi":"/openapi-v1.json delete /v1/creators/{creatorUserUuid}/vault/folders/{folderName}/media/{mediaUuid}","href":"/v1/api-reference/remove-media-from-creator-vault-folder"}]}]},{"group":"Onboarding","pages":[{"title":"Onboard a creator","deprecated":null,"version":null,"openapi":"/openapi-v1.json post /v1/onboarding/creators","href":"/v1/api-reference/onboard-a-creator"}]}]},{"version":"v0","pages":[{"title":"v0","href":"/api-reference/overview"}]}]},{"tab":"UI Library","pages":[{"title":"UI Library","href":"/ui"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]}]},"basePath":"","title":"Fanvue API Documentation","buildId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","deploymentId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","dynamics":[],"chunks":[]}