Change Plan (Self-Service)
The Change Plan tab lets you move to a different service plan without contacting your ISP — pick the new plan from a list, see the prorated cost, confirm. The system charges (or refunds) your wallet, updates your speed limits on the router, and disconnects you so you reconnect with the new pool / speed.
This is an optional feature. Your ISP and your reseller both have toggles that can disable it — if the Change Plan tab is missing, ask your provider whether they’ve enabled self-service plan changes.
How to get here
Section titled “How to get here”From the portal sidebar:
- Sidebar → Change Plan
- Direct URL:
/customer/change-plan - Mobile app: More → Change Plan
The tab is hidden when:
- System-wide setting
customer_change_serviceis off (admin disabled it globally), or - Your reseller’s setting
customer_change_planis off (your specific operator disabled it for their customers).
Both must be on for the tab to appear.
Layout
Section titled “Layout”The Change Plan page has two sections:
| Section | What it shows |
|---|---|
| Current plan card | Your active plan, balance, days left. |
| Available plans list | Every plan your reseller offers. Yours is marked “Current”. Each row is tappable. |
How prorated billing works
Section titled “How prorated billing works”When you change plan mid-cycle, the system charges or refunds based on the days remaining until your current expiry. The formula is:
remaining_days = min(expiry_date − today, 30) # capped at 30old_daily_price = old_plan.price / 30new_daily_price = new_plan.price / 30prorated_amount = (new_daily_price − old_daily_price) × remaining_daysWhat happens depending on the sign:
| Case | Effect |
|---|---|
| Upgrade (new plan more expensive) | prorated_amount is positive. Charged from your balance. An optional upgrade_change_service_fee is added if your ISP set one. |
| Downgrade (new plan cheaper) | prorated_amount is negative. Refunded to your balance — but only if your ISP enabled downgrade_refund. Without that, you just switch to the cheaper plan without getting money back. An optional downgrade_change_service_fee reduces the refund. |
| Same price (lateral) | No charge, no refund. |
Example
Section titled “Example”You’re on a $30/month plan, 10 days into your cycle (20 days remaining). You upgrade to a $50/month plan.
old_daily = 30/30 = $1new_daily = 50/30 = $1.67diff = $0.67/dayremaining_days = 20prorated = 0.67 × 20 = $13.40
Your wallet is charged $13.40. Your speed bumps up immediately. Your expiry date doesn’t change.
Balance check
Section titled “Balance check”If prorated_amount > balance, the change is rejected with a message like:
Insufficient balance. Need $5.40 more (prorated 20 days). Current balance: $8.00.
You need to top up your wallet first (or ask your operator to do it).
Downgrade flag
Section titled “Downgrade flag”By default, downgrades are allowed. The system-wide allow_downgrade setting (admin-controlled) can be turned off — in which case the Change Plan page will refuse downgrades:
Downgrade is not allowed. Contact your provider.
Some ISPs prefer to handle downgrades manually so customers think twice about it. If your ISP has this off, you can still ask them to change your plan from the admin side.
What changes when you switch
Section titled “What changes when you switch”Switching plan does five things in sequence:
- Charges or refunds your wallet based on the prorated math above.
- Updates
Mikrotik-Rate-Limitin radreply — the new speed (including any burst settings) will be applied on next session. - Clears your
Framed-IP-Addressin radreply and releases the IP back to the pool — the new plan may use a different IP pool, so we let the router assign a fresh IP on reconnect. - Updates
Framed-Poolto the new service’s pool (if defined). - Disconnects your active session via MikroTik API (or CoA Disconnect as fallback) so you reconnect immediately with the new settings.
Your internet drops for a couple of seconds while the router reconnects. Speed and IP both change. Expiry date does not change — only the plan, the speed, and the price-per-day change.
What does NOT change
Section titled “What does NOT change”- Your expiry date. Your cycle keeps running to the original date.
- Your daily / monthly used counters. What you’ve already consumed this period stays counted.
- Your username / password.
- Your wallet balance, beyond the prorated charge / refund.
- Your WiFi SSID / password on the router (if you have a TR-069 device).
Common workflows
Section titled “Common workflows”Upgrading to a faster plan mid-month
Section titled “Upgrading to a faster plan mid-month”- Change Plan → look at the plans list. The faster ones have higher prices.
- Tap the plan you want — a confirmation modal shows the prorated cost.
- Verify the math: “$X.XX for 20 remaining days”.
- Confirm. Wallet is charged. Your router disconnects for ~3 seconds and reconnects.
- Check the Dashboard — new plan name and new speed should be reflected.
Downgrading to save money
Section titled “Downgrading to save money”- Change Plan → tap a plan with a lower price.
- If
downgrade_refundis on, you’ll see a refund amount. - If
allow_downgradeis off, you’ll see “Downgrade is not allowed” — contact your ISP. - Confirm. Wallet is credited (if refund is on). Router disconnects briefly and reconnects with the slower plan.
”I want to upgrade but my balance is too low”
Section titled “”I want to upgrade but my balance is too low””- Change Plan → tap the target plan. Modal shows
Insufficient balance — need $X.XX more. - Cancel.
- Top up your wallet — either through your ISP’s payment channel, or via the Buy Extra Data page if you have credit there.
- Once balance is enough, retry the upgrade.
Edge cases
Section titled “Edge cases”| Case | Behavior |
|---|---|
| Expired plan | remaining_days = 0 → prorated = 0. Switching plan doesn’t charge anything, but you’re still expired. Renew first. |
| More than 30 days left | Capped at 30 in the prorated formula. Avoids absurd charges for prepaid annual plans. |
| Same plan | Rejected with “Already on this plan”. |
| Plan deleted | The dropdown only shows plans is_active = true AND deleted_at IS NULL. Deleted plans cannot be selected. |
| Plan not assigned to your reseller | The available list is filtered to plans the reseller has assigned to themselves. Other plans are hidden. |
Transaction record
Section titled “Transaction record”A successful plan change creates one transaction row in your history:
| Field | Value |
|---|---|
type | service_change |
amount | Negative (upgrade) or positive (downgrade refund). |
description | "Upgrade: Fiber 10M → Fiber 20M (prorated 20 days, $13.40)" |
old_service_name / new_service_name | Populated for audit. |
You can see this row in the Invoices & Receipts section or on the operator side under the subscriber’s billing tab.
Permissions
Section titled “Permissions”The Change Plan tab has no permission gates beyond the two toggles described above. Visibility:
| Condition | Effect |
|---|---|
System customer_change_service = false | Tab hidden for all customers across all resellers. |
Reseller customer_change_plan = false | Tab hidden for that reseller’s customers. |
Both enabled, but allow_downgrade = false | Tab visible, but only same-or-higher-price plans are selectable. |
Related pages
Section titled “Related pages”- Dashboard & Live Traffic — see the new speed after the switch.
- Buy Extra Data — top up balance to fund an upgrade.
- Invoices & Receipts — the
service_changetransaction shows up here. - Customer Portal Overview — the rest of the portal.
- Reseller → Sub-Resellers — the operator side that enables this toggle.