Update one of your experiences for this creator

Changed on

Updates an experience your app published for the creator whose token is calling. Only the fields sent change. Re-pricing mints a new price; fans who already paid keep what they bought. actions re-prices the actions listed and withdraws every other active one — declaring a new action is a publish, not an update.

Hiding a published experience that fans have paid for answers 409 with the impact, exactly as a publish does. An experience owned by another app answers 404.
patch/experiences/{experienceUuid}

Request

  • Base URL
    https://api.fanvue.com
  • URL
    https://api.fanvue.com/experiences/{experienceUuid}
  • Auth
    OAuth 2
    Authorization code: https://auth.fanvue.com/oauth2/auth
    Token URL: https://auth.fanvue.com/oauth2/token scopes: write:experience

Path parameters

experienceUuidstring uuid required
Example:00000000-0000-4000-8000-000000000010

Headers

X-Fanvue-API-Versionstring required
Example:2025-06-26

API version to use for the request

Request body

appUuidstring uuid required

Your app's UUID.

titlestring
descriptionstring
imageUrlstring uri nullable

Replaces the cover. null clears it; omit to leave it alone. One that cannot be fetched leaves the current cover in place.

accessMode'FREE' | 'SUBSCRIPTION' | 'PAID' | 'HIDDEN'

Moving an experience that is not PAID to PAID requires priceCents; an experience that is PAID already keeps its price unless re-priced.

deliveryMode'EMBEDDED' | 'EXTERNAL'
externalUrlstring uri nullable

Where an EXTERNAL experience opens. Must be https (checked here). The platform additionally refuses Fanvue, localhost, IP and dev-tunnel hosts; such a URL answers 400 with a message naming the field.

hiddenboolean

Keep the experience off the creator's profile. Ignored when accessMode is HIDDEN, which always hides.

priceCentsinteger

Re-prices a PAID experience (send accessMode: "PAID" alongside). Fans who already paid keep what they bought.

priceRecurringboolean

With priceCents: bill monthly as an app subscription instead of a one-off unlock. Omitted, the experience keeps the cadence of its current price.

experienceType'LIVE_STREAM' | 'LIVE_AUDIO' | 'VIDEO' | 'AUDIO' | 'GAME' | 'CHALLENGE' | 'QUIZ' | 'EVENT' | 'OTHER'

What kind of experience this is. Decides how it presents itself where it is embedded (for example the category tag on a chat card). Omit for the generic OTHER.

acknowledgePaidImpactboolean

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.

Example request

{
  "imageUrl": "https://example.com/covers/photography-101.jpg",
  "externalUrl": "https://example.com/experiences/photography-101",
  "priceCents": 1500,
  "experienceType": "GAME",
  "actions": [
    {
      "externalActionId": "spin",
      "priceCents": 1500
    }
  ],
  "acknowledgePaidImpact": true,
  "acknowledgedImpact": {
    "affectedFanCount": 3,
    "oneTimePurchaseCount": 3
  }
}

Response

The experience as it now stands

Example response

{
  "experience": {
    "externalExperienceId": "course-photography-101",
    "priceCents": 1500,
    "publishedAt": "2026-10-07T10:00:00.000Z",
    "reviewStatus": "approved",
    "reviewRejection": {
      "reasonCodes": [
        "7.3"
      ],
      "message": "The cover and title do not match what the experience shows fans."
    },
    "url": "https://www.fanvue.com/ava/experiences/summer-yoga-course"
  }
}

Changes