curl --request POST \
--url https://api.fanvue.com/v1/experiences/request-token \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"action": "publish",
"externalExperienceId": "<string>",
"title": "<string>",
"description": "<string>",
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.fanvue.com/v1/experiences/request-token"
payload = {
"action": "publish",
"externalExperienceId": "<string>",
"title": "<string>",
"description": "<string>",
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
action: 'publish',
externalExperienceId: '<string>',
title: '<string>',
description: '<string>',
appUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.fanvue.com/v1/experiences/request-token', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"token": "req_2f1c…"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Mint a publish/unpublish request token
Mints a short-lived, opaque “request token” the app’s creator surface forwards to Fanvue to ask the creator to confirm a publish or unpublish.
The token is bound to the calling app (a token can only be minted for the app whose credentials make the call — otherwise 403) and to the acting creator, so it can only drive that creator’s native confirmation modal.
A publish request may narrow the access modes the creator is offered with allowedAccessModes; an incoherent constraint (empty, duplicated, or not containing proposedAccessMode) is rejected with 400 and a message naming the rule it broke.
curl --request POST \
--url https://api.fanvue.com/v1/experiences/request-token \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"action": "publish",
"externalExperienceId": "<string>",
"title": "<string>",
"description": "<string>",
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.fanvue.com/v1/experiences/request-token"
payload = {
"action": "publish",
"externalExperienceId": "<string>",
"title": "<string>",
"description": "<string>",
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
action: 'publish',
externalExperienceId: '<string>',
title: '<string>',
description: '<string>',
appUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.fanvue.com/v1/experiences/request-token', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"token": "req_2f1c…"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}write:experience— Request that the creator publish or unpublish a fan-facing experience. The app mints a request token; the creator confirms and Fanvue performs the change.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Body
- Option 1
- Option 2
publish 1FREE, SUBSCRIPTION, PAID, HIDDEN EMBEDDED, EXTERNAL Public https URL of the experience cover image. Fanvue downloads and re-hosts it when the creator confirms the publish.
2048"https://example.com/covers/launch-your-page.jpg"
Restricts which access modes the creator may choose in the Fanvue confirmation modal. Must contain proposedAccessMode and hold no duplicates. Omit to offer all four modes.
1 - 4 elementsFREE, SUBSCRIPTION, PAID, HIDDEN ["FREE"]
Response
The minted request token
The opaque request token to forward to the creator surface for confirmation.
"req_2f1c…"
Was this page helpful?