Calculate Plan Upgrade
### Calculate the cost of upgrading to a different subscription plan.
**Available to:** All authenticated users
**Environments:** Live
**[Rate Limit](/overview/core-concepts/rate-limits):** No endpoint-specific limit
Preview what switching the calling user's Tradovate subscription to another plan would cost before committing to the change. This is a read-only calculation — it doesn't modify the subscription or charge anything.
The response returns:
- `estimatedAmount` — the new plan's price minus any prorated refund for the unused portion of the current plan
- `refund` — the prorated credit from the current plan, when one applies
- `current` — the user's current subscription
- `startDate` and `expirationDate` — the period the new plan would cover
**Field Details**
The `tradovateSubscriptionPlanId` identifies the target plan. Use the `/tradovateSubscriptionPlan/list` endpoint to retrieve available plan IDs.
The calculation applies to the authenticated user's own subscription.
**Common Failure Scenarios**
- Target plan doesn't exist or isn't available
- Target plan is the user's current plan
- Target plan is a trial and the user already had one, or has an active live account
- Switch would be a downgrade, which isn't allowed through this flow
**Error Messages**
| `errorText` | Trigger |
|-------------|---------|
| `"Membership plan is not available."` | `tradovateSubscriptionPlanId` doesn't match an available plan |
| `"Switch to the same plan is not allowed. Your membership will be renewed at the end of period"` | Target plan is the current plan (`errorCode: ConflictWithExisting`) |
| `"Gap between subscriptions are not allowed"` | Current subscription expires before the upgrade would start (`errorCode: ConflictWithExisting`) |
| `"Trial with active live account is not allowed"` | Target is a free trial plan and the user has an active live account (`errorCode: SingleTrialOnly`) |
| `"Only one trial is allowed"` | Target is a free trial plan and the user already had a trial (`errorCode: SingleTrialOnly`) |
| `"Cannot downgrade from Lifetime plan"` | Current plan is a lifetime membership (`errorCode: DowngradeNotAllowed`) |
| `"Please contact Customer Service about downgrading the plan"` | New plan's price minus the refund is negative (`errorCode: DowngradeNotAllowed`) |
**Related Endpoints**
- Use [`addTradovateSubscription`](/api/rest-api-endpoints/users/add-tradovate-subscription) to apply a plan change after previewing the cost.
Authentication
AuthorizationBearer
Bearer authentication of the form Bearer <token>, where token is your auth token.
Request
This endpoint expects an object.
tradovateSubscriptionPlanId
Response
PlanUpgradeResponse
startDate
expirationDate
errorText
Non-empty if the request failed
errorCode
ConflictWithExisting, DowngradeNotAllowed, IncompatibleCMEMarketDataSubscriptionPlans, IncorrectPaymentMethod, InsufficientFunds, PaymentProviderError, PlanDiscontinued, SingleTrialOnly, Success, UnknownError
estimatedAmount
current
refund

