---
title: "Preview Wix plan change"
method: POST
path: "/api/billing/dynamic-offering/preview-subscription"
---

# Preview Wix plan change

`POST /api/billing/dynamic-offering/preview-subscription`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/billing/dynamic-offering/preview-subscription`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Shows what an upgrade with [Change Wix plan](/api-reference/change-wix-plan) would charge, without changing or charging anything. Send the same `new_product_id` and `period_unit` you plan to send there. Only the workspace owner can preview.

Only upgrades can be previewed. A downgrade returns 400, because it charges nothing now and takes effect at the end of the billing period.

This works only for workspaces billed through Wix. For a Stripe-billed workspace, use [Preview plan change](/api-reference/preview-plan-change). Wix billing is still rolling out, so this can return 404 for your account.

The base rate limit is 20 requests per minute per user. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Request body

- PreviewDynamicOfferingRequest
  - `new_product_id` string, required: Wix product of the plan to preview, from `wix_product_id` in [List plans](/api-reference/list-plans).
  - `period_unit` 'MONTH' | 'YEAR', required: Billing period of the new plan: `MONTH` or `YEAR`.

## Response `200`

What the upgrade costs now and at renewal.

- WixPlanChangePreview: What a Wix plan upgrade costs now and at renewal.
  - `prorated_amount_due` number, required: Amount [Change Wix plan](/api-reference/change-wix-plan) charges now for this upgrade, in major units of `currency` (dollars, not cents).
  - `currency` string, required: Lowercase three-letter currency code of both amounts.
  - `recurring_amount` number, required: What the new plan costs at each renewal, in major units of `currency`.
  - `next_billing_date` integer, required: When the new plan next renews, as a Unix timestamp in seconds.
  - `billing_interval` 'month' | 'year', required: How often the new plan renews: `month` or `year`.
  - `card_last4` string, nullable, required: Last four digits of the card that would be charged, or the wallet's name for a wallet such as Apple Pay. `null` when Wix doesn't report one.

## Other responses

- `400`: `new_product_id` isn't a Base44 plan, the workspace isn't billed through Wix, the target is a downgrade, the change isn't allowed (yearly to monthly billing, or a Business plan cheaper than the current plan), or Base44 couldn't open a Wix billing session for you.
- `401`: Missing or invalid credentials. A read-only token gets this response too.
- `402`: The plan has an unpaid invoice (`detail.error_type` is `past_due`). Pay it before upgrading.
- `403`: You aren't the workspace owner.
- `404`: Wix billing isn't available to your account yet.
- `422`: Validation Error
- `429`: Rate limit exceeded. The base rate limit is 20 requests per minute per user. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Changes

> 66 revisions in range; 1 not diffed.

- **2026-10-26** `395a6758864a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/billing/dynamic-offering/preview-subscription/post.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/d877a932dc19?raw)
