> ## Documentation Index
> Fetch the complete documentation index at: https://api.fanvue.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Reactivate a cancelled checkout-link subscription

> Reverse a pending cancel-at-period-end while the paid period is still running, so the subscription renews again at `expiresAt`. Emits the `checkout_link.subscription.cancel_at_period_end_changed` webhook with `cancel_at_period_end: false`. Returns 400 if the subscription is not set to cancel or has already ended (an ended subscription cannot be revived), and 404 if it does not exist or does not belong to this creator.

Only cancellations the creator made themselves (`cancelledBy: creator`) can be reversed here. If the subscriber cancelled — or Fanvue support did, or the cancellation is older than actor tracking and carries `cancelledBy: null` — the endpoint returns 409 and the cancellation stands: only the subscriber can restart their own subscription, by purchasing again.

<Info>
  **Required scope**

  * `write:creator` — Modify creator profiles, settings, and creator-specific data.
</Info>


## OpenAPI

````yaml /openapi-v1.json post /v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/uncancel
openapi: 3.1.0
info:
  title: Fanvue API
  version: '0.1'
servers:
  - url: https://api.fanvue.com
security: []
paths:
  /v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/uncancel:
    post:
      summary: Reactivate a cancelled checkout-link subscription
      description: >-
        Reverse a pending cancel-at-period-end while the paid period is still
        running, so the subscription renews again at `expiresAt`. Emits the
        `checkout_link.subscription.cancel_at_period_end_changed` webhook with
        `cancel_at_period_end: false`. Returns 400 if the subscription is not
        set to cancel or has already ended (an ended subscription cannot be
        revived), and 404 if it does not exist or does not belong to this
        creator.


        Only cancellations the creator made themselves (`cancelledBy: creator`)
        can be reversed here. If the subscriber cancelled — or Fanvue support
        did, or the cancellation is older than actor tracking and carries
        `cancelledBy: null` — the endpoint returns 409 and the cancellation
        stands: only the subscriber can restart their own subscription, by
        purchasing again.
      operationId: uncancelCreatorCheckoutLinkSubscription
      parameters:
        - $ref: '#/components/parameters/ApiVersionHeader'
        - schema:
            type: string
            format: uuid
          required: true
          name: creatorUserUuid
          in: path
        - schema:
            type: string
            format: uuid
            description: Fanvue subscription identifier.
          required: true
          description: Fanvue subscription identifier.
          name: uuid
          in: path
      responses:
        '200':
          description: Subscription renewing again
          content:
            application/json:
              schema:
                type: object
                properties:
                  uuid:
                    type: string
                    description: Fanvue's unique subscription identifier.
                  status:
                    type: string
                    enum:
                      - active
                      - expired
                    description: >-
                      Access state of the subscription, matching the
                      `checkout_link.subscription.*` webhooks: `active` means
                      the fan currently has access (including subscriptions
                      scheduled to cancel at the period end — check
                      `cancelAtPeriodEnd`), `expired` means access has ended.
                      Revoke access only on `expired`.
                  cancelAtPeriodEnd:
                    type: boolean
                    description: >-
                      True when the subscription is set to end (not renew) at
                      its period end.
                  expiresAt:
                    type: string
                    format: date-time
                    description: >-
                      End of the current paid period: when access ends, or the
                      next renewal date.
                required:
                  - uuid
                  - status
                  - cancelAtPeriodEnd
                  - expiresAt
              example:
                uuid: 5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a
                status: active
                cancelAtPeriodEnd: false
                expiresAt: '2026-07-19T08:30:00.000Z'
        '400':
          description: >-
            Bad Request - API version not supported OR validation failed OR
            invalid UUID
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/UnsupportedVersionError'
                  - $ref: '#/components/schemas/ValidationError'
                  - $ref: '#/components/schemas/InvalidUuidError'
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '403':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '409':
          description: >-
            The cancellation was made by the subscriber (or Fanvue support), or
            predates actor tracking, so the creator cannot reverse it
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
        '410':
          $ref: '#/components/responses/SunsetVersionResponse'
        '429':
          $ref: '#/components/responses/RateLimitResponse'
      security:
        - BearerAuth:
            - write:creator
components:
  parameters:
    ApiVersionHeader:
      name: X-Fanvue-API-Version
      in: header
      required: true
      schema:
        type: string
        default: '2025-06-26'
        example: '2025-06-26'
      description: API version to use for the request
  schemas:
    UnsupportedVersionError:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
      required:
        - error
        - message
      description: API version not supported
    ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
      required:
        - errors
      description: Request validation failed
    InvalidUuidError:
      type: object
      properties:
        message:
          type: string
      required:
        - message
      description: Invalid UUID format provided
  responses:
    UnauthorizedResponse:
      description: Unauthorized Response
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
            required:
              - error
    NotFoundResponse:
      description: Not Found Response
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
            required:
              - message
    SunsetVersionResponse:
      description: API version no longer supported (sunset)
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
              message:
                type: string
              nextVersion:
                type: string
            required:
              - error
              - message
    RateLimitResponse:
      description: Too many requests - rate limit exceeded
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying the request
          schema:
            type: integer
        X-RateLimit-Limit:
          description: The maximum number of requests allowed in the current window
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: The number of requests remaining in the current window
          schema:
            type: integer
        X-RateLimit-Reset:
          description: The Unix timestamp (seconds) when the rate limit window resets
          schema:
            type: integer
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
            required:
              - error
  securitySchemes:
    BearerAuth:
      type: oauth2
      description: >-
        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.
      flows:
        authorizationCode:
          authorizationUrl: https://auth.fanvue.com/oauth2/auth
          tokenUrl: https://auth.fanvue.com/oauth2/token
          refreshUrl: https://auth.fanvue.com/oauth2/token
          scopes:
            read:self: >-
              Access your own user profile information, including basic account
              details and settings.
            read:chat: >-
              Read chat conversations, messages, and chat-related data. This
              includes viewing chat lists and message history.
            write:chat: >-
              Create new chats and send messages. This scope is required for any
              chat-related actions that modify data.
            read:experience: >-
              Exchange a fan's experience token for the resolved experience and
              the fan's identity, so an embedded fan-facing experience can
              render the right content.
            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.
            read:fan: Access fan-related data and information within the platform.
            read:post: Read posts, including post details, comments, likes, and tips.
            write:post: Create, edit, and manage posts and content on behalf of users.
            read:media: Access media files, images, videos, and other content assets.
            write:media: >-
              Upload, modify, and manage media files and content assets. Also
              required for vault folder management.
            read:creator: >-
              Access creator profiles, content, and creator-specific
              information.
            write:creator: Modify creator profiles, settings, and creator-specific data.
            read:insights: >-
              Access analytics, metrics, and insights data for performance
              tracking.
            read:tracking_links: >-
              Read tracking links and the users associated with them, including
              per-user tracking metadata.
            write:tracking_links: Create and delete tracking links.
            read:agency: Read agency information, including the agency's team members.
            write:agency: >-
              Manage agency team members and invites, including inviting new
              team members and creators.

````