---
title: "Preview a subscription change"
method: POST
path: "/api/billing/preview-subscribe"
tags: ["billing"]
---

# Preview a subscription change

`POST /api/billing/preview-subscribe`

[cloud-only] Returns a preview of what a subscription change would cost, including prorations.

## Request body

- object
  - `plan_id` string, required — ID of the plan to preview

## Response `200`

Subscription preview

- PreviewSubscribeResponse — [cloud-only] Itemized cost preview for a pending subscription change.
  - `allowed` boolean, required — Whether this subscription change is allowed
  - `reason` string — Reason why the change is not allowed (only present if allowed=false)
  - `transition_type` 'new_subscription' | 'upgrade' | 'downgrade' | 'duration_change', required — Type of subscription transition
  - `effective_at` string, date-time, required — When the change takes effect
  - `is_immediate` boolean, required — Whether the change takes effect immediately (true) or at period end (false)
  - `cost_today_cents` integer, required — Amount to charge today in cents (0 for downgrades)
  - `cost_next_period_cents` integer, required — Amount that will be charged at next billing period in cents
  - `credits_today_cents` integer, required — Credits granted today in cents (prorated for mid-period upgrades)
  - `credits_next_period_cents` integer, required — Credits that will be granted at next billing period in cents
  - `current_plan` PreviewPlanInfo — [cloud-only] Plan information for preview display
    - `slug` string, required — Plan slug
    - `tier` 'FREE' | 'STANDARD' | 'CREATOR' | 'PRO' | 'FOUNDERS_EDITION', required — [cloud-only] Subscription tier (uppercase to match comfy-api)
    - `duration` 'MONTHLY' | 'ANNUAL', required — [cloud-only] Billing period (uppercase to match comfy-api)
    - `price_cents` integer, required — Per-seat price in cents
    - `credits_cents` integer, required — Per-seat credits in cents
    - `seat_summary` PlanSeatSummary, required — [cloud-only] Summary of seat costs based on current workspace members
      - `seat_count` integer, required — Total number of seats (owner + members) that would be charged
      - `total_cost_cents` integer, required — Total cost for all seats in cents
      - `total_credits_cents` integer, required — Total credits granted for all seats in cents
    - `period_start` string, date-time — Current billing period start (only for current_plan)
    - `period_end` string, date-time — Current billing period end (only for current_plan)
  - `new_plan` PreviewPlanInfo, required — [cloud-only] Plan information for preview display
    - `slug` string, required — Plan slug
    - `tier` 'FREE' | 'STANDARD' | 'CREATOR' | 'PRO' | 'FOUNDERS_EDITION', required — [cloud-only] Subscription tier (uppercase to match comfy-api)
    - `duration` 'MONTHLY' | 'ANNUAL', required — [cloud-only] Billing period (uppercase to match comfy-api)
    - `price_cents` integer, required — Per-seat price in cents
    - `credits_cents` integer, required — Per-seat credits in cents
    - `seat_summary` PlanSeatSummary, required — [cloud-only] Summary of seat costs based on current workspace members
      - `seat_count` integer, required — Total number of seats (owner + members) that would be charged
      - `total_cost_cents` integer, required — Total cost for all seats in cents
      - `total_credits_cents` integer, required — Total credits granted for all seats in cents
    - `period_start` string, date-time — Current billing period start (only for current_plan)
    - `period_end` string, date-time — Current billing period end (only for current_plan)

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `500` — Internal server error

## Changes

- **2026-05-22** `c4db9e1283df` — 6 warning, 11 info
  - removed the optional property `amount_due` from the response with the `200` status
  - removed the optional property `currency` from the response with the `200` status
  - removed the optional property `next_billing_date` from the response with the `200` status
  - removed the optional property `plan_id` from the response with the `200` status
  - …13 more
- **2026-05-22** `09a5075587c8` — 2 info
  - api operation id `previewSubscription` removed and replaced with `previewSubscribe`
  - added the non-success response with the status `500`
- **2026-05-08** `c9640fded659` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/comfy-org/apis/comfyui-api/changes/api/billing/preview-subscribe/post.md)

---

[API](https://skmtc.dev/comfy-org/apis/comfyui-api.md) · [All operations](https://skmtc.dev/comfy-org/apis/comfyui-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/comfy-org/comfyui-api/revisions/c4db9e1283df/schema)
