---
title: "Upgrade the current Stripe subscription to a higher published price"
method: POST
path: "/billing/subscription-changes"
tags: ["Billing"]
---

# Upgrade the current Stripe subscription to a higher published price

`POST /billing/subscription-changes`

## Request

- Base URL: `https://api.flashdata.dev/v2`
- URL: `https://api.flashdata.dev/v2/billing/subscription-changes`
- Auth: API key in cookie `__Host-fd_session` and API key in header `X-CSRF-Token`

The server verifies that the FlashData price is active, available in the current livemode, USD-denominated, recurring, the same interval, and strictly more expensive than the current subscription price. Product, provider price, currency and proration options are never accepted from the browser. Local entitlement and credits change only after a verified provider event is projected.

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `priceId` string, required

## Response `201`

Subscription change submitted to Stripe

- SubscriptionChange
  - `id` string, required: FlashData subscription public ID. Entitlement still updates only after a verified provider event.
  - `fromPriceId` string, required
  - `toPriceId` string, required
  - `effective` 'immediate', required
  - `status` 'submitted', required

## Other responses

- `401`: Authentication required or invalid
- `403`: Authenticated but not permitted, or CSRF validation failed
- `404`: Resource not found or not owned by the caller
- `409`: Resource state or idempotency conflict
- `422`: Request validation failed
- `502`: An upstream provider failed
- `503`: The billing catalog or provider is not configured or is temporarily unavailable

---

[API](https://skmtc.dev/flashdata/apis/flashdata-customer-api.md) · [All operations](https://skmtc.dev/flashdata/apis/flashdata-customer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flashdata/apis/flashdata-customer-api/revisions/109179fe9313?raw)
