Proration

When a customer upgrades or downgrades, Rollo lets you schedule the new plan for the next period and optionally credit unused time as free days on the current period.

Change plan is a Dashboard action today (Subscriptions → Change plan). There is no public POST /v1/subscriptions/:id/change_plan. After you change the plan, sync your app from webhooks / GET.

How Rollo approaches plan changes

Pick a target recurring price in the dashboard. Rollo stores a pending price and amount on the subscription. At period end, renewals use the pending plan. Optional credit days extend the current period immediately — functionally a credit for unused time on the old plan.

Calculating credit days

A simple approach: unused fraction of the period × days in the period, rounded down. For example, 10 days left on a 30-day month ≈ 10 credit days when moving to a similar-priced plan.

After a dashboard plan change

Example request

GET /v1/subscriptions/sub_01HXYZ...
Authorization: Bearer rk_live_...

Example response

{
  "id": "sub_01HXYZ...",
  "object": "subscription",
  "status": "active",
  "amount": 2900,
  "currency": "usd",
  "interval": "month",
  "cancel_at_period_end": false,
  "payment_collection_paused": false,
  "trial_ends_at": null,
  "current_period_end": 1726800000000,
  "customer": "cus_...",
  "customer_email": "ada@example.com",
  "created": 1723000100000,
  "livemode": true
}

How to handle it

You will also receive subscription.updated. Update entitlements when the new amount/period takes effect. For an immediate upgrade charge, create a separate one-time checkout session for the difference, then schedule the plan change with fewer credit days.