> ## 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.

# Apply an Offer to a subscription

> Apply a direct Offer to a subscription. On a pending payment checkout it quotes or replaces the checkout discount and the existing checkout URL remains unchanged. On an active subscription it applies the Offer immediately with its discount phases starting at the next billing cycle; the call is rejected while another applied Offer still has active or upcoming discount phases. Offers with a free trial phase cannot be applied after checkout creation.

Apply a direct Offer to a subscription. On a pending payment checkout it quotes or replaces the checkout discount and the existing checkout URL remains unchanged. On an active subscription it applies the Offer immediately with its discount phases starting at the next billing cycle; the call is rejected while another applied Offer still has active or upcoming discount phases. Offers with a free trial phase cannot be applied after checkout creation.


## OpenAPI

````yaml /openapi/es/rest/2026-08-27.json put /subscriptions/{id}/offer
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}/offer:
    put:
      tags:
        - Subscriptions
      summary: Apply an Offer to a subscription
      description: >-
        Apply a direct Offer to a subscription. On a pending payment checkout it
        quotes or replaces the checkout discount and the existing checkout URL
        remains unchanged. On an active subscription it applies the Offer
        immediately with its discount phases starting at the next billing cycle;
        the call is rejected while another applied Offer still has active or
        upcoming discount phases. Offers with a free trial phase cannot be
        applied after checkout creation.
      operationId: apply-subscription-offer
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Unique key used to safely retry this write for 24 hours without
            applying it twice.
          schema:
            type: string
            minLength: 1
            maxLength: 200
        - 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'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                offerId:
                  type: string
                  minLength: 1
                expiresAt:
                  type: string
                  format: date-time
              required:
                - offerId
      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
                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:
                  - id: application_1a2b3c4d
                    name: Launch discount
                    appliesTo:
                      type: plan_price
                      id: price_1a2b3c4d
                    offerId: offer_1a2b3c4d
                    source: direct
                    status: applied
                    currency: usd
                    subtotal: 2000
                    discountAmount: 400
                    total: 1600
                    phases:
                      - type: percentage
                        durationCycles: 3
                        durationInterval: monthly
                        percentage: 20
                        startsAt: '2026-09-07T12:00:00.000Z'
                        endsAt: '2026-12-07T12:00:00.000Z'
                    quotedAt: '2026-09-07T12:00:00.000Z'
                    expiresAt: null
                    appliedAt: '2026-09-07T12:00:00.000Z'
                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
        '409':
          description: Conflict
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: conflict_error
                  code: idempotency_in_progress
                  message: >-
                    A request with this idempotency key is still being
                    processed.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_in_progress.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
        '503':
          description: Service unavailable
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  type: internal_error
                  code: idempotency_unavailable
                  message: >-
                    Idempotency storage is temporarily unavailable. Retry with
                    the same idempotency key.
                  doc_url: >-
                    https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_unavailable.md
      x-codeSamples:
        - lang: typescript
          label: TypeScript
          source: |-
            import { Commet } from "@commet/node";

            const commet = new Commet({ apiKey: "ck_xxx" });

            const subscription = await commet.subscriptions.applyOffer({
              id: "sub_xxx",
              offerId: "ofr_xxx",
            });
        - lang: python
          label: Python
          source: |-
            from commet import Commet

            commet = Commet("ck_xxx")

            subscription = commet.subscriptions.apply_offer(
                "sub_xxx",
                offer_id="ofr_xxx",
            )
        - lang: go
          label: Go
          source: "client, err := commet.New(\"ck_xxx\")\nif err != nil {\n\tlog.Fatal(err)\n}\nctx := context.Background()\n\nsubscription, err := client.Subscriptions.ApplyOffer(ctx, \"sub_xxx\", &commet.ApplySubscriptionOfferParams{\n\tOfferID: \"ofr_xxx\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import co.commet.Commet;
            import co.commet.params.ApplySubscriptionOfferParams;

            var commet = Commet.builder().apiKey("ck_xxx").build();

            var subscription = commet.subscriptions().applyOffer(
                "sub_xxx",
                ApplySubscriptionOfferParams.builder("ofr_xxx").build()
            );
        - lang: php
          label: PHP
          source: |-
            use Commet\Commet;

            $commet = new Commet('ck_xxx');

            $subscription = $commet->subscriptions->applyOffer(
                id: 'sub_xxx',
                offerId: 'ofr_xxx',
            );
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:
          anyOf:
            - type: string
            - type: '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:
                  anyOf:
                    - type: string
                    - type: '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:
                  anyOf:
                    - type: string
                    - type: 'null'
                newPlanName:
                  anyOf:
                    - type: string
                    - type: 'null'
                newBillingInterval:
                  anyOf:
                    - type: string
                    - type: '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:
          anyOf:
            - type: string
            - type: 'null'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        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'
        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
                included:
                  type: number
                purchased:
                  type: number
              required:
                - remaining
                - included
                - purchased
              additionalProperties: false
            - type: 'null'
        balance:
          anyOf:
            - type: object
              properties:
                remaining:
                  type: number
                included:
                  type: number
                currency:
                  type: string
              required:
                - remaining
                - included
                - currency
              additionalProperties: false
            - type: 'null'
        priceId:
          anyOf:
            - type: string
            - type: '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
        - createdAt
        - updatedAt
        - offerApplications
        - pause
        - 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
        - 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:
          anyOf:
            - type: string
            - type: 'null'
        source:
          type: string
          enum:
            - direct
            - introductory
            - promo_code
            - card_promotion
            - custom
        status:
          type: string
          enum:
            - quoted
            - applied
            - failed
            - expired
        currency:
          anyOf:
            - type: string
            - type: '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
                    - 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
                    - 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
                    - 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
                    - 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

````

## Related topics

- [Offers](/docs/es/offers.md)
- [Create subscription](/docs/es/api-reference/subscriptions/create-subscription.md)
- [List subscriptions](/docs/es/api-reference/subscriptions/list-subscriptions.md)
- [Reactivate a past due or canceled subscription](/docs/es/api-reference/subscriptions/reactivate-subscription.md)
- [Remove an Offer from a pending checkout](/docs/es/api-reference/subscriptions/remove-subscription-offer.md)


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