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

# Revoke scheduled version change

> Cancel the move to another plan version pending for the next renewal, so the subscription stays on its version, and send subscription.version_change_canceled with reason canceled_by_merchant. A move made now has nothing pending to revoke. With nothing pending it changes nothing and sends nothing. Returns the subscription.

Cancel the move to another plan version pending for the next renewal, so the subscription stays on its version, and send subscription.version\_change\_canceled with reason canceled\_by\_merchant. A move made now has nothing pending to revoke. With nothing pending it changes nothing and sends nothing. Returns the subscription.


## OpenAPI

````yaml /openapi/es/rest/2026-08-27.json delete /subscriptions/{id}/scheduled-version-change
openapi: 3.1.0
info:
  title: Commet API
  version: '2026-08-27'
  description: Billing and payments API for SaaS and AI products.
servers:
  - url: https://commet.co/api/v1
security:
  - ApiKeyAuth: []
tags:
  - name: Test Clock
    description: >-
      Simulate the passage of time in sandbox to test billing flows. Mirrors
      Stripe test clocks: forward-only and sandbox-only.
  - name: Customers
  - name: Subscriptions
  - name: Plans
  - name: Markets
    description: >-
      Reusable country groups for market-specific prices and selectable price
      variants.
  - name: Offers
  - name: Promo Codes
  - name: Features
  - name: Usage
  - name: Seats
  - name: Quota
  - name: Add-ons
  - name: Portal
  - name: Credit Packs
  - name: Plan Groups
  - name: Invoices
  - name: Payments
    description: >-
      One-time payments with no subscription or plan. Charge a customer's saved
      payment method off-session, or create a payment link the customer opens to
      pay. Tax, invoice, and receipt are handled automatically.
  - name: Transactions
  - name: Webhooks
  - name: API Keys
  - name: Payouts
    description: >-
      Withdraw available balance to your bank and manage the payout account
      (verification + destination bank accounts).
  - name: Provisioning
    description: >-
      Take ownership of an organization an agent provisioned headlessly. The
      agent holds the API keys from the start; a human claims the account
      through a claim link.
paths:
  /subscriptions/{id}/scheduled-version-change:
    delete:
      tags:
        - Subscriptions
      summary: Revoke scheduled version change
      description: >-
        Cancel the move to another plan version pending for the next renewal, so
        the subscription stays on its version, and send
        subscription.version_change_canceled with reason canceled_by_merchant. A
        move made now has nothing pending to revoke. With nothing pending it
        changes nothing. Returns the subscription.
      operationId: revoke-scheduled-version-change
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: Commet-Version
          in: header
          required: false
          description: >-
            API version used by this reference. Send this header to select this
            contract explicitly.
          schema:
            type: string
            default: '2026-08-27'
          example: '2026-08-27'
      responses:
        '200':
          description: Success
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            RateLimit-Limit:
              description: Maximum number of requests allowed in the current window.
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
              example:
                id: sub_1a2b3c4d
                customerId: cus_1a2b3c4d
                plan:
                  id: plan_1a2b3c4d
                  name: Pro
                  basePrice: 2000
                planVersion:
                  id: plr_1a2b3c4d
                  label: '3'
                scheduledVersionChange: null
                name: Pro
                description: null
                status: active
                billingInterval: monthly
                trialEndsAt: null
                currentPeriod:
                  start: '2026-09-07T12:00:00.000Z'
                  end: '2026-10-07T12:00:00.000Z'
                  daysRemaining: 30
                cancellation: null
                cancelAtPeriodEnd: false
                scheduledPlanChange: null
                startDate: '2026-09-07T12:00:00.000Z'
                endDate: null
                billingDayOfMonth: 7
                nextBillingDate: '2026-10-07T12:00:00.000Z'
                checkoutUrl: null
                createdAt: '2026-09-07T12:00:00.000Z'
                updatedAt: '2026-09-07T12:00:00.000Z'
                offerApplications: []
                pause: null
                priceId: price_1a2b3c4d
                object: subscription
                livemode: false
                consumptionModel: metered
                features:
                  - code: api_calls
                    name: API Calls
                    type: usage
                    usage:
                      current: 250
                      included: 1000
                      overageQuantity: 0
                      unlimited: false
                credits: null
                balance: null
        '400':
          description: Bad request
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: validation_error
                  code: validation_error
                  message: The request contains an invalid parameter.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/validation_error.md
        '401':
          description: Unauthorized
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: authentication_error
                  code: unauthorized
                  message: A valid API key is required.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/unauthorized.md
        '403':
          description: Forbidden
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: authentication_error
                  code: forbidden
                  message: You do not have permission to perform this operation.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/forbidden.md
        '404':
          description: Not found
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: not_found_error
                  code: not_found
                  message: The requested resource was not found.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/not_found.md
        '429':
          description: Too many requests
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            RateLimit-Limit:
              description: Maximum number of requests allowed in the current window.
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: Seconds until the rate limit window resets.
              schema:
                type: string
            Retry-After:
              description: Seconds to wait before retrying the request.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: rate_limit_error
                  code: rate_limited
                  message: >-
                    Too many requests. Retry after the interval specified in the
                    Retry-After header.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/rate_limited.md
        '500':
          description: Internal server error
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: internal_error
                  code: internal_error
                  message: An unexpected error occurred while processing the request.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/internal_error.md
components:
  headers:
    RequestId:
      description: >-
        Server-generated identifier that correlates this response with Platform
        logs.
      schema:
        type: string
        format: uuid
  schemas:
    Subscription:
      type: object
      properties:
        id:
          type: string
        customerId:
          type: string
        plan:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
            basePrice:
              type: number
          required:
            - id
            - name
            - basePrice
          additionalProperties: false
        name:
          type: string
        description:
          type:
            - string
            - 'null'
        status:
          $ref: '#/components/schemas/SubscriptionStatus'
        billingInterval:
          anyOf:
            - $ref: '#/components/schemas/BillingInterval'
            - type: 'null'
        trialEndsAt:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
        currentPeriod:
          anyOf:
            - type: object
              properties:
                start:
                  type: string
                  format: date-time
                end:
                  type: string
                  format: date-time
                daysRemaining:
                  type: number
              required:
                - start
                - end
                - daysRemaining
              additionalProperties: false
            - type: 'null'
        cancellation:
          anyOf:
            - type: object
              properties:
                scheduledAt:
                  type: string
                  format: date-time
                reason:
                  type:
                    - string
                    - 'null'
                effectiveAt:
                  type: string
                  format: date-time
              required:
                - scheduledAt
                - reason
                - effectiveAt
              additionalProperties: false
            - type: 'null'
        cancelAtPeriodEnd:
          type: boolean
        scheduledPlanChange:
          anyOf:
            - type: object
              properties:
                changeType:
                  type: string
                  enum:
                    - plan_downgrade
                    - interval_change
                newPlanId:
                  type:
                    - string
                    - 'null'
                newPlanName:
                  type:
                    - string
                    - 'null'
                newBillingInterval:
                  type:
                    - string
                    - 'null'
                scheduledFor:
                  type: string
                  format: date-time
              required:
                - changeType
                - newPlanId
                - newPlanName
                - newBillingInterval
                - scheduledFor
              additionalProperties: false
            - type: 'null'
        startDate:
          type: string
          format: date-time
        endDate:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
        billingDayOfMonth:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
        nextBillingDate:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
        checkoutUrl:
          type:
            - string
            - 'null'
        hasPaymentMethod:
          type: boolean
          description: >-
            Whether Commet can charge this subscription on its own at its next
            charge (the trial end or the renewal). A trial that started without
            a payment method reports false until the customer adds one for this
            subscription; a payment method saved for another subscription does
            not count. A subscription on a free plan reports false.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        planVersion:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                  description: Public plan version ID.
                label:
                  type: string
                  description: >-
                    Main versions are 1, 2, 3; an experiment's versions carry
                    its own code, like price-test 2.
              required:
                - id
                - label
              additionalProperties: false
            - type: 'null'
          description: >-
            The plan version whose terms the subscription has now. It keeps
            paying and receiving everything from this version until it is moved.
        offerApplications:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionOfferApplication'
        pause:
          anyOf:
            - oneOf:
                - type: object
                  properties:
                    status:
                      type: string
                      const: scheduled
                    mode:
                      type: string
                      const: period_end
                    requestedAt:
                      type: string
                      format: date-time
                    effectiveAt:
                      type: string
                      format: date-time
                    resumeAt:
                      anyOf:
                        - type: string
                          format: date-time
                        - type: 'null'
                  required:
                    - status
                    - mode
                    - requestedAt
                    - effectiveAt
                    - resumeAt
                  additionalProperties: false
                - type: object
                  properties:
                    status:
                      type: string
                      const: active
                    mode:
                      type: string
                      enum:
                        - immediate
                        - period_end
                    requestedAt:
                      type: string
                      format: date-time
                    effectiveAt:
                      type: string
                      format: date-time
                    resumeAt:
                      anyOf:
                        - type: string
                          format: date-time
                        - type: 'null'
                  required:
                    - status
                    - mode
                    - requestedAt
                    - effectiveAt
                    - resumeAt
                  additionalProperties: false
            - type: 'null'
        scheduledVersionChange:
          anyOf:
            - type: object
              properties:
                planVersionId:
                  type: string
                label:
                  type: string
                effectiveAt:
                  type: string
                  format: date-time
              required:
                - planVersionId
                - label
                - effectiveAt
              additionalProperties: false
            - type: 'null'
          description: A move to another version of the plan pending for the next renewal.
        planGrant:
          type: object
          properties:
            id:
              type: string
              description: The active Plan Grant ID.
            plan:
              type: object
              properties:
                id:
                  type: string
                name:
                  type: string
              required:
                - id
                - name
              additionalProperties: false
              description: The higher plan whose access is temporarily applied.
            expiresAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
              description: >-
                When the temporary access ends, or null when it lasts until
                revoked.
          required:
            - id
            - plan
            - expiresAt
          additionalProperties: false
        consumptionModel:
          anyOf:
            - $ref: '#/components/schemas/ConsumptionModel'
            - type: 'null'
        features:
          type: array
          items:
            oneOf:
              - type: object
                properties:
                  code:
                    type: string
                  name:
                    type: string
                  type:
                    type: string
                    const: boolean
                  enabled:
                    type: boolean
                  baseAccess:
                    anyOf:
                      - type: object
                        properties:
                          enabled:
                            type: boolean
                        required:
                          - enabled
                        additionalProperties: false
                      - type: 'null'
                required:
                  - code
                  - name
                  - type
                  - enabled
                additionalProperties: false
              - type: object
                properties:
                  code:
                    type: string
                  name:
                    type: string
                  type:
                    type: string
                    const: usage
                  usage:
                    type: object
                    properties:
                      current:
                        type: number
                      included:
                        type: number
                      overageQuantity:
                        type: number
                      overageUnitPrice:
                        type: number
                      unlimited:
                        type: boolean
                    required:
                      - current
                      - included
                      - overageQuantity
                    additionalProperties: false
                  baseAccess:
                    anyOf:
                      - type: object
                        properties:
                          included:
                            type: number
                          unlimited:
                            type: boolean
                        required:
                          - included
                          - unlimited
                        additionalProperties: false
                      - type: 'null'
                required:
                  - code
                  - name
                  - type
                additionalProperties: false
              - type: object
                properties:
                  code:
                    type: string
                  name:
                    type: string
                  type:
                    type: string
                    const: seats
                  usage:
                    type: object
                    properties:
                      current:
                        type: number
                      included:
                        type: number
                      overageQuantity:
                        type: number
                      overageUnitPrice:
                        type: number
                      unlimited:
                        type: boolean
                    required:
                      - current
                      - included
                      - overageQuantity
                    additionalProperties: false
                  baseAccess:
                    anyOf:
                      - type: object
                        properties:
                          included:
                            type: number
                          unlimited:
                            type: boolean
                        required:
                          - included
                          - unlimited
                        additionalProperties: false
                      - type: 'null'
                required:
                  - code
                  - name
                  - type
                  - usage
                additionalProperties: false
              - type: object
                properties:
                  code:
                    type: string
                  name:
                    type: string
                  type:
                    type: string
                    const: quota
                  usage:
                    type: object
                    properties:
                      current:
                        type: number
                      included:
                        type: number
                      overageQuantity:
                        type: number
                      overageUnitPrice:
                        type: number
                      unlimited:
                        type: boolean
                    required:
                      - current
                      - included
                      - overageQuantity
                    additionalProperties: false
                  baseAccess:
                    anyOf:
                      - type: object
                        properties:
                          included:
                            type: number
                          unlimited:
                            type: boolean
                        required:
                          - included
                          - unlimited
                        additionalProperties: false
                      - type: 'null'
                required:
                  - code
                  - name
                  - type
                additionalProperties: false
        credits:
          anyOf:
            - type: object
              properties:
                remaining:
                  type: number
                  description: Plan credits left. Kept for compatibility; equal to `plan`.
                included:
                  type: number
                purchased:
                  type: number
                  description: >-
                    Purchased credits: purchases and manual adjustments. Spent
                    after plan credits and kept until the subscription ends.
                plan:
                  type: number
                  description: >-
                    Plan credits left this period. Spent first and replaced or
                    rolled over at each reset; negative while overage is owed.
                total:
                  type: number
                  description: 'Credits available: `plan` plus `purchased`.'
              required:
                - remaining
                - included
                - purchased
                - plan
                - total
              additionalProperties: false
            - type: 'null'
        balance:
          anyOf:
            - type: object
              properties:
                remaining:
                  type: number
                  description: >-
                    Balance available in minor units of the subscription
                    currency. Kept for compatibility; equal to `total`.
                included:
                  type: number
                currency:
                  type: string
                plan:
                  type: number
                  description: >-
                    Plan balance left this period, in minor units. Spent first
                    and replaced or rolled over at each reset; negative while
                    overage is owed.
                purchased:
                  type: number
                  description: >-
                    Purchased balance in minor units: top-ups and manual
                    adjustments. Spent after the plan balance and kept until the
                    subscription ends.
                total:
                  type: number
                  description: 'Balance available in minor units: `plan` plus `purchased`.'
              required:
                - remaining
                - included
                - currency
                - plan
                - purchased
                - total
              additionalProperties: false
            - type: 'null'
        priceId:
          type:
            - string
            - 'null'
        object:
          type: string
          const: subscription
        livemode:
          type: boolean
      required:
        - id
        - customerId
        - plan
        - name
        - description
        - status
        - billingInterval
        - trialEndsAt
        - currentPeriod
        - cancellation
        - cancelAtPeriodEnd
        - scheduledPlanChange
        - startDate
        - endDate
        - billingDayOfMonth
        - nextBillingDate
        - checkoutUrl
        - hasPaymentMethod
        - createdAt
        - updatedAt
        - planVersion
        - offerApplications
        - pause
        - scheduledVersionChange
        - consumptionModel
        - features
        - credits
        - balance
        - priceId
        - object
        - livemode
      additionalProperties: false
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            param:
              type: string
            details: {}
            doc_url:
              type: string
          required:
            - type
            - code
            - message
            - doc_url
          additionalProperties: false
      required:
        - error
      additionalProperties: false
    SubscriptionStatus:
      type: string
      enum:
        - draft
        - pending_payment
        - trialing
        - active
        - past_due
        - paused
        - canceled
    BillingInterval:
      type: string
      enum:
        - weekly
        - monthly
        - quarterly
        - semiannual
        - yearly
        - one_time
    SubscriptionOfferApplication:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        appliesTo:
          oneOf:
            - type: object
              properties:
                type:
                  type: string
                  const: plan_price
                id:
                  type: string
              required:
                - type
                - id
              additionalProperties: false
            - type: object
              properties:
                type:
                  type: string
                  const: addon
                id:
                  type: string
              required:
                - type
                - id
              additionalProperties: false
            - type: object
              properties:
                type:
                  type: string
                  const: credit_pack
                id:
                  type: string
              required:
                - type
                - id
              additionalProperties: false
        offerId:
          type:
            - string
            - 'null'
        source:
          type: string
          enum:
            - direct
            - introductory
            - promo_code
            - card_promotion
            - custom
        status:
          type: string
          enum:
            - quoted
            - applied
            - failed
            - expired
        currency:
          type:
            - string
            - 'null'
        subtotal:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
        discountAmount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
        total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
        phases:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionOfferApplicationPhase'
        quotedAt:
          type: string
          format: date-time
        expiresAt:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
        appliedAt:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
      required:
        - id
        - name
        - appliesTo
        - offerId
        - source
        - status
        - currency
        - subtotal
        - discountAmount
        - total
        - phases
        - quotedAt
        - expiresAt
        - appliedAt
      additionalProperties: false
    ConsumptionModel:
      type: string
      enum:
        - metered
        - credits
        - balance
    SubscriptionOfferApplicationPhase:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              const: free_trial
            durationDays:
              type: integer
              exclusiveMinimum: 0
              maximum: 9007199254740991
            durationInterval:
              anyOf:
                - type: string
                  enum:
                    - weekly
                    - monthly
                    - quarterly
                    - semiannual
                    - yearly
                - type: 'null'
            startsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
            endsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
          required:
            - type
            - durationDays
            - durationInterval
            - startsAt
            - endsAt
          additionalProperties: false
        - type: object
          properties:
            type:
              type: string
              const: percentage
            durationCycles:
              anyOf:
                - type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                - type: 'null'
            durationInterval:
              anyOf:
                - type: string
                  enum:
                    - weekly
                    - monthly
                    - quarterly
                    - semiannual
                    - yearly
                - type: 'null'
            percentage:
              type: integer
              exclusiveMinimum: 0
              maximum: 9007199254740991
            startsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
            endsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
          required:
            - type
            - durationCycles
            - durationInterval
            - percentage
            - startsAt
            - endsAt
          additionalProperties: false
        - type: object
          properties:
            type:
              type: string
              const: amount_off
            durationCycles:
              anyOf:
                - type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                - type: 'null'
            durationInterval:
              anyOf:
                - type: string
                  enum:
                    - weekly
                    - monthly
                    - quarterly
                    - semiannual
                    - yearly
                - type: 'null'
            amount:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            startsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
            endsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
          required:
            - type
            - durationCycles
            - durationInterval
            - amount
            - startsAt
            - endsAt
          additionalProperties: false
        - type: object
          properties:
            type:
              type: string
              const: fixed_price
            durationCycles:
              anyOf:
                - type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                - type: 'null'
            durationInterval:
              anyOf:
                - type: string
                  enum:
                    - weekly
                    - monthly
                    - quarterly
                    - semiannual
                    - yearly
                - type: 'null'
            price:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            startsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
            endsAt:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
          required:
            - type
            - durationCycles
            - durationInterval
            - price
            - startsAt
            - endsAt
          additionalProperties: false
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.