curl --request POST \
--url https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish"
payload = { "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({appUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'})
};
fetch('https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "fan_experiences_not_enabled",
"message": "<string>"
}{
"message": "<string>"
}{
"error": "paid_impact_acknowledgement_required",
"message": "Fans have paid for access this would take away; acknowledge the paid impact to proceed.",
"impact": {
"affectedFanCount": 3,
"activeSubscriptionCount": 0,
"pendingSubscriptionInvoiceCount": 0,
"oneTimePurchaseCount": 3,
"pendingPurchaseCount": 0
}
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Unpublish one of your experiences for this creator
Takes an experience your app published off the creator’s profile. The row is kept and the same externalExperienceId can be published again.
Fans holding paid access answer 409 with the impact: retry with acknowledgePaidImpact and the impact echoed as acknowledgedImpact to proceed, unless fans hold live recurring access, which blocks it outright. A POST rather than a DELETE: the body names your app and carries the acknowledgement, and the row survives to be published again.
curl --request POST \
--url https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"appUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish"
payload = { "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({appUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'})
};
fetch('https://api.fanvue.com/v1/experiences/{experienceUuid}/unpublish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "fan_experiences_not_enabled",
"message": "<string>"
}{
"message": "<string>"
}{
"error": "paid_impact_acknowledgement_required",
"message": "Fans have paid for access this would take away; acknowledge the paid impact to proceed.",
"impact": {
"affectedFanCount": 3,
"activeSubscriptionCount": 0,
"pendingSubscriptionInvoiceCount": 0,
"oneTimePurchaseCount": 3,
"pendingPurchaseCount": 0
}
}{
"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"
Path Parameters
"00000000-0000-4000-8000-000000000010"
Body
Your app's UUID.
Set to true on a retry to accept the paid impact a previous attempt answered 409 with. Send the 409's impact alongside as acknowledgedImpact.
true
The impact the previous 409 reported, echoed back verbatim.
Show child attributes
Show child attributes
Response
Experience unpublished
Was this page helpful?