Billing & Plans

Billing & Plans

Everything billing-related lives in the dashboard under Billing (/account/billing). Billing is scoped to your account — the account is the billing entity, not the individual user — and only an account owner can run the mutating actions (checkout, cancel, pause, resume, payment methods, retention add-on). A member whose role grants Billing write or update can also top up the prepaid balance, paying with a card already on the account. Members with billing-read permission can view the plan, invoices, balance history and usage estimate.

Secure card payments. Ngris never stores raw card numbers. 3-D Secure (3DS) is supported — if your bank requires it, the dashboard completes the challenge before activating the change.

Choosing & changing a plan

Pick a plan from the plans grid and confirm checkout. The same action handles a brand-new subscription and a plan change on an existing one.

Monthly vs yearly

Each plan can be billed monthly or yearly. If you don't pick one, checkout defaults to monthly. A plan must have a price for the interval you choose — if its yearly price isn't set up, yearly checkout is rejected.

Upgrade vs downgrade timing

When you change plans, Ngris decides whether the change takes effect immediately or at the end of your current billing period:

  • Immediate upgrade — moving to a plan whose effective monthly rate is strictly higher than your current one. The difference is prorated and charged now.
  • Scheduled downgrade — moving to a cheaper plan is scheduled at the end of the current period, so you keep what you paid for until then. The response action is downgrade_scheduled.
  • Cadence switch — same plan, switching monthly↔yearly, is also scheduled at the period boundary rather than restructured mid-cycle.

On a successful immediate upgrade the response action is upgraded. If your bank requires 3DS, the response carries requires_action with a client_secret and the dashboard completes the challenge.

Downgrade grace

When a downgrade takes effect, features the new plan doesn't include keep working for a grace period (7 days by default). Then they're turned off. This applies when a scheduled downgrade lands, when an admin moves your account to another plan, and when a feature is removed from your plan. Features ending on a date are listed in the dashboard and in the grace field of GET /account/entitlements. Upgrading before the date keeps them.

When the grace period ends, resources that depend on a removed feature are mostly disabled, not deleted:

  • Custom-domain and dedicated-port endpoints go inactive.
  • Non-owner members are suspended.
  • Edge functions are disabled.
  • Dedicated IPs are released to standby.
  • Applications your plan no longer includes are paused. Visitors see a neutral “This site is paused” page. Managed backends, WordPress sites and functions scale to zero, and their files, deploys and data are kept.
  • If the new plan doesn't include databases, your databases are closed: apps can't connect to them, and apps connected to them for production (Both or Production only) are paused. Their data is kept. See Closed databases.

Upgrading again re-enables them. Paused applications resume on their own within a few minutes. Two things you turn back on yourself: endpoint health monitoring and automatic backup schedules. Uploaded TLS certificates are replaced by automatically issued ones.

A lower limit applies right away to new resources, and existing ones are kept. Edge functions are the exception: the newest functions over the new limit are disabled when the grace period ends.

Settle what you owe before subscribing again. A checkout that would start a new subscription — your first one, a new one after a cancellation, or a change to a usage-billed plan (which replaces your subscription) — is refused with 402 and code unpaid_subscription while your account still owes money: a subscription that is past due or unpaid, or an unpaid invoice (written off as uncollectible, a charge that failed or awaits confirmation, or one past its due date). Nothing is created or canceled. The response names the invoice (invoice_id, hosted_invoice_url): pay it from Billing → Invoices or that link, then check out again. A card declined on an earlier checkout attempt doesn't count — retrying with another card works (the abandoned attempt is canceled and a new subscription created) — and a plan change on an existing fixed-price subscription isn't affected. In the dashboard the refusal comes with a Pay invoice button that opens the invoice.
One live subscription per account. The same checkout is refused with 409 and code unlinked_subscription while your billing account has another live subscription (active, trialing or paused) that isn't linked to the account yet — typically for the minute after you pay a past-due or unpaid subscription's invoice, before it links itself back and your plan returns. Refresh and try again after a moment; if it persists, contact support.
One change at a time. Concurrent subscription changes for the same account are serialized; a second change while one is in flight returns "Another subscription change is in progress for this account" — just retry after a few seconds.

Plan-change preview

Before you confirm a plan change, the billing page shows the exact amount due. The numbers come from a preview of your next invoice, so they match what you will actually be charged:

  • Due today — the prorated charge for switching right now. Already nets any account credit balance against the charge; it never goes below zero (excess credit rolls forward).
  • Next amount & date — the recurring charge you'll pay each cycle after the change, and when the next full charge lands.

The preview is read-only — it never mutates the subscription. If a plan has no fixed price for the chosen interval (for example a usage-only plan), or you've never subscribed or topped up, the page falls back to neutral copy and never blocks the upgrade.

Payment methods

Add and manage cards from the billing page:

  • Add a card — enter the card in the secure card form; it is saved to your account.
  • Set default — choose which card future charges use.
  • Remove — detach a card you no longer want on file.

When you check out or top up without naming a card, Ngris uses your customer's default payment method, falling back to any attached card. If none is on file you'll be prompted to add one first.

Invoices

The invoices view lists your account's invoices, paginated (use the page control). Each invoice shows its number, amount due / amount paid, currency, status, billing period, and line items, plus links to:

  • Hosted invoice — the invoice's online page, where an open invoice can be paid.
  • Invoice PDF — a downloadable PDF.

If you've never subscribed or topped up, the list is simply empty.

Unpaid invoice → suspension

If an invoice stays unpaid, the account is suspended. The countdown starts when ngris first sees the invoice unpaid — usually within an hour of a failed payment:

  • Every dashboard page shows a banner with the date the account will be suspended. The owner and members with billing access get a Pay invoice button; other members see the date and are asked to contact the account owner.
  • The owner gets a warning email before that date, with the date and a Pay invoice button.
  • Still unpaid on that date, the account is suspended and the owner gets an email.

Paying before the date stops the countdown — nothing is suspended. The number of days isn't fixed: the banner and the warning email give the exact date.

What stops

  • Endpoints and tunnels: visitors get an “Account suspended” page, and agents are disconnected.
  • Static sites, previews, apps, WordPress and functions stop serving.
  • Builds, deploys, cron jobs and scheduled backups don't run.
  • Databases are closed: apps can't connect to them (see Closed databases).
  • The account can't be used: its pages, resources, logs, data and backups can't be opened in the dashboard, the API or the CLI, and Iris is off.

What keeps working

  • Signing in, your own settings (including your personal data export), and switching to your other accounts.
  • Billing: invoices, payment methods and plans. Paying.
  • Support: open a ticket or reply to one.
  • Your databases' data, your domains and DNS records, and certificate renewals. Nothing is deleted.

Restoring the account

Pay the invoice: the Pay invoice button in the banner or the email, or Billing → Invoices. Once nothing is owed, the account is active again within a few minutes and the owner gets an email. Databases open again, and sites, apps and functions come back by themselves (apps start small and scale up again; overdue cron jobs run once).

Restart your agents. Tunnels don't reconnect by themselves after a suspension: restart the ngris agent on each server (restart its service or container, or run the ngris command again).

While the account is suspended, the owner can still stop the subscription from renewing (Cancel); the invoice stays owed and the account stays suspended until it is paid. A new subscription can't start before the invoice is paid.

Usage metering & estimate

For plans with a metered (hybrid / pay-as-you-go) billing model, the billing page shows a live cost estimate for the current period. The estimate reads from the same account usage totals that your invoice is calculated from, so what you see equals what you'll be billed.

Meters

Each metered line shows used quantity, the quantity included in your plan, the billable overage, the per-unit price, and the estimated cost:

Meter Unit How it's measured
bandwidth_gb GB Inbound + outbound bytes for the period, converted to whole GB.
requests_1k per 1,000 Total requests for the period, in thousands.

Overage is used − included (never negative); estimated cost is overage × unit price. The page also shows the total estimate, the billing-period window, and the raw period usage (bytes in / out / requests). Plans with no metered prices show an empty meter list.

Requests to private deploy-preview URLs don’t count toward usage on the Team and Enterprise plans; public previews count on every plan. See Preview traffic and usage.

Prepaid balance & top-up

Your account can hold a prepaid credit balance. Billing → Payment & Billing shows the current balance and, below it, the full Balance history: every top-up, credit, refund, adjustment and usage deduction on the account, newest first, each with its date, type, description, amount and the balance after it. Filter it by type and use Load more to page back through older entries. A card refund of a top-up shows how much went back to your card.

Topping up

Enter an amount and confirm. Limits:

  • Minimum — $5.00.
  • Maximum — $500.00.

The top-up charges your selected (or default) card. If it succeeds the balance is credited immediately and the response returns the new balance. If your bank requires 3DS, the response carries requires_action with a client_secret; the dashboard completes the challenge and finalizes the top-up.

Safe retries. Identical top-ups (same account, amount, and card) collapse to a single charge, so a double-click or network retry never double-charges you.

Promo codes

If you have a promo code, add it when you subscribe: on Billing → Plan & Add-ons, choose a plan, then in the payment dialog click Have a promo code?, enter the code and Apply. The dialog shows the discount (a percentage or a fixed amount off the first invoice) and the code is saved for you — it's used when that subscription starts.

  • New subscriptions only — a code discounts the first invoice of your next new subscription, not a plan change on a subscription you already have, so the field only appears when you don't have a live subscription.
  • Plan and minimum — a code can be limited to one plan or to a minimum amount; both are checked again against the real price when the subscription starts.
  • Once per person — each code can be redeemed once per user. A code you redeemed but haven't used yet applies to your next new subscription automatically.
  • Codes can't be redeemed while the account is suspended; you can still subscribe without one.

Extra log retention add-on

Keep traffic logs longer than your plan's base retention (it depends on the plan; GET /v1/account/plan returns it as plan_limits.traffic_log_retention_days) from Billing → Traffic Log Retention. Extended retention is a recurring add-on on a paid subscription: you choose how many extra days you want (up to 365), and they're added on top of the plan's base retention.

It's billed per extra day, as an item on your plan subscription at the same monthly or yearly cadence as the plan. If you cancel it, you keep the extra days until the end of the current billing period.

Pause, cancel & resume

Owner-only subscription controls on the billing page:

Cancel

Schedules cancellation at the end of the current billing period (cancel_at_period_end). The subscription stays active and keeps all features until the period ends. The account then keeps its plan for a grace period (7 days by default) before it moves to the free plan. A subscription that ends because payment failed gets the same grace period. The response shows the status, the cancel_at_period_end flag, and the current period end. The owner can cancel this way even while the account is suspended for an unpaid invoice: it doesn't lift the suspension, and the invoice stays owed.

Reactivate

Removes the scheduled cancellation — un-cancels a subscription that was set to end at period close. Reactivate any time before the period ends.

Pause

Temporarily stops billing and drops your account to free-plan entitlements while paused. If the free plan doesn't include databases, your databases are closed while paused: apps can't connect to them, their data is kept, and they open again when your plan comes back (see Closed databases). You can't pause the free plan, and you can't pause an already-paused or inactive subscription. Dedicated IPs — single or per-region groups — are released to standby while paused (reserved to your account for 7 days and re-acquired on resume; the one-time setup fee is re-charged on re-activation). See the Dedicated IPs guide.

Resume

Starts a new billing period right away: the pause ends, your billing date moves to today, and the new period is invoiced and charged immediately. Your pre-pause plan and entitlements come back as soon as that invoice is paid. If you resume inside a period you had already paid for, the unused part of it is credited on the new invoice; a period the pause skipped was never charged, so nothing is credited for it. A subscription still in its trial ends the trial and starts its first paid period.

If the charge is declined or your bank asks you to confirm it (3DS), the account stays paused on the free plan and the resume answers 402 with the invoice to pay (hosted_invoice_url, plus a client_secret when the payment needs confirming). Pay it with the Pay invoice button the dashboard shows, from Billing → Invoices, or update your payment method: the plan comes back once it is paid. Resuming again while that invoice is open never charges a second period.

Unpaid invoices suspend an account. An invoice that stays unpaid suspends the account on the date shown in the dashboard banner and the warning email — see Unpaid invoice → suspension. An unpaid invoice also keeps a suspension for usage over quota in place: that one lifts automatically — when usage is back under the limit, or when a paid plan change lands — only while no invoice is unpaid. Unpaid means written off as uncollectible, a charge that failed or awaits confirmation, or past its due date; a renewal invoice that has just been issued and not yet charged doesn't count, nor the declined first payment of a checkout attempt that never started a subscription. Paying lifts the suspension within minutes.

Each lifecycle action is recorded in your account's plan-change history (upgrade / downgrade / cancel / pause / resume), visible to admins and support. Pause and cancel also trigger a confirmation email.

Was this helpful?