---
title: "Extends a running pause, once, up to six months total (Roles: user)"
method: POST
path: "/payment/subscription/pause/extend"
tags: ["Payments"]
---

# Extends a running pause, once, up to six months total (Roles: user)

`POST /payment/subscription/pause/extend`

## Request body

- ExtendPauseRequest
  - `extraMonths` integer, required — Extra months to add to a running pause (1, 2 or 3). Refused if the resulting resume date would put the pause past six months from the day it started, or if this pause has already been extended once.

## Response `200`

Success

- Subscription
  - `id` string
  - `object` string
  - `collection_method` string
  - `cancel_at_period_end` boolean
  - `canceled_at` integer
  - `cancel_at` integer
  - `created` integer
  - `current_period_end` integer
  - `current_period_start` integer
  - `customer` string
  - `days_until_due` integer
  - `ended_at` integer
  - `plan` PaymentPlan
    - `id` string, required
    - `object` string
    - `description` string
    - `amount` integer
    - `statement_descriptor` string
    - `trial_period_days` integer
    - `created` integer
    - `currency` string
    - `interval` string
    - `interval_count` integer
    - `livemode` boolean
    - `active` boolean
    - `billing_scheme` string
    - `product` string
    - `name` string
    - `usage_type` string
    - `nickname` string
    - `amount_off` integer
    - `percent_off` integer
    - `metadata` PaymentPlanMetadata
      - `projects` string
      - `description` string
      - `seats` string
      - `favorites` string
      - `team` string
      - `amount_text` string
      - `credits` string
      - `premium` string
      - `magic_link` string
      - `api` string
      - `rate_limits` string
  - `quantity` integer
  - `start_date` integer
  - `status` string
  - `tax_percent` integer
  - `trial_end` integer
  - `trial_start` integer
  - `billing_cycle_anchor` integer
  - `latest_invoice` string
  - `from_team` boolean
  - `pause_collection` SubscriptionPauseCollection
    - `behavior` string
    - `resumes_at` integer
  - `resume_requires_payment` boolean — Present (true) only while the subscription is paused and at least one billing cycle was skipped (voided) during the pause, meaning a resume will immediately charge the full plan price for a fresh cycle.
  - `pause_started_at` integer — When the current pause was REQUESTED. Stripe records only where a pause ends (pause_collection.resumes_at), so this is stamped into subscription metadata by pauseSubscription. Audit only: the ceiling and the mid-pause email are measured from pause_billing_from, and fall back to this only when that is absent. Absent on pauses that began before the extension feature shipped.
  - `pause_billing_from` integer — When collection actually stops, i.e. the current_period_end that was current at the moment of pausing, and the anchor the six-month extension ceiling and the mid-pause midpoint are measured from. Must be stamped at pause time: with pause_collection.behavior "void" Stripe keeps advancing the billing cycle through the pause, so current_period_end read later names a different period. Absent on pauses that began before the extension feature shipped, which are then capped from pause_started_at instead (stricter, by the length of the paid-through tail).
  - `pause_extended_at` integer — When the current pause was extended. Present at most once per pause; while it is present the Extend control must not be offered, because extendPause refuses a second extension.
  - `pause_can_extend` boolean — Present (true) only when extendPause would accept at least one more month right now: the pause is running, has not been extended, is not scheduled to cancel, and one more month still fits under the six-month ceiling measured from pause_billing_from (or pause_started_at). Gate the Extend control on this rather than on pause_extended_at alone, which would invite a subscriber already at the ceiling to extend and then refuse them. Absent on pauses with no anchor, where the server cannot tell from Stripe alone.

## Other responses

- `400` — Error

## Changes

- **2026-09-03** `8c2e600e07d4` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/ludo/apis/ludo-ai-api/changes/payment/subscription/pause/extend/post.md)

---

[API](https://skmtc.dev/ludo/apis/ludo-ai-api.md) · [All operations](https://skmtc.dev/ludo/apis/ludo-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ludo/ludo-ai-api/revisions/8c2e600e07d4/schema)
