WHBMP

Hourly billing

Oct 22, 2026

What it is

A VPS or dedicated server product can be sold by the hour next to its normal billing cycles. The client picks Pay hourly when ordering, pays only the setup fee (and a deposit, if you ask for one) at checkout, and then pays for the hours the server runs on one usage invoice a month, issued after the month has ended (billing in arrears).

Hourly billing is off for every product until you turn it on. It works for the product types VPS and Dedicated Server. Shared hosting, domains, licences and other products cannot be sold by the hour.

Turn it on for a product

Open Settings > Products & Pricing, edit the product, and go to the Pricing tab. Under Hourly billing:

Setting What it does
Sell by the hour Customers can pick "Pay hourly" when they order this product.
Hourly rate The price of one hour, with up to 6 decimals, for example 0.0089. Left empty, it is the monthly price divided by 730 hours.
Monthly cap The most one service is charged in a calendar month. Left empty, it is the monthly price. 0 means no cap. Add-ons raise the cap by their monthly price.
Setup fee Charged once, on the invoice made when the order is placed.
Minimum deposit Account credit the client must hold before the server is created. A client with less is taken to Add Funds and the server starts once the credit is there. 0 means no deposit.
Pay from account credit The usage is taken from the client's account credit as it is metered, instead of a monthly usage invoice (see "Paying from account credit" below). Needs a minimum deposit above 0.
Bill a stopped instance On by default, because hosting platforms charge for a stopped server too. Switch it off to bill only the hours the server is running.

An add-on (a configurable option such as extra backups) has its own Hourly column on Settings > Configurable Options. Left empty, it is the add-on's monthly price divided by 730.

Other currencies and server locations

  • Another currency follows the exchange rate until you give it hourly prices of its own: on the Pricing tab, under that currency, the rows Hourly rate, Hourly monthly cap, Hourly setup fee and Hourly minimum deposit. An empty field keeps following the base value.
  • A server location can have its own Hourly rate and Hourly monthly cap (Locations tab), in the base currency. Without them, the product's rate and cap are used, plus or minus the location's Adjust prices by percentage. The setup fee and the deposit are the product's whatever the location.

There are no free hours: the clock starts when the server is created and every hour that starts is charged.

What the client sees

On the plan page and the cart the hourly choice reads like $0.0089 / hour (up to $6.00 a month). Hourly rates are shown with up to six decimals; every amount on an invoice is rounded to cents.

On the service page the client sees the rate, the cap, the hours used this month and the cost so far this month. A billing term change does not apply to an hourly service.

Changing plan

The client can ask for another plan (Change Plan) when you have listed one that is also sold by the hour under the product's Upgrades tab. Nothing is charged for the change, because there is no billing period to prorate. Your team makes the change (the compute modules cannot resize a server by themselves) and, from the moment the product on the service changes, the new product's rate and cap apply. The hours before it stay at the old rate, and what was already charged this month counts towards the new cap.

How the hours are metered

  • Every hour the job hourly:accrue writes the hours that have started since the last run, for every service that is active or suspended. The hours run from the moment the service was created (provisioned), not from the moment it was ordered.
  • A run that was missed is caught up by the next one, and a second run over the same hours never charges twice.
  • Hours are recorded one row per calendar month. Within a month the charges never go above the cap; the last row is cut to fit.
  • If Bill a stopped instance is off, the server's status is read from the compute module on every run. A stopped or unreadable status means the hour is recorded with no charge. None of the VPS modules has been tested against a live platform yet, so test one server before you rely on this setting.
  • A service that is suspended for non-payment is stopped on the platform. It is still billed unless the product bills only running hours.
  • A terminated service is metered up to the moment of termination (the hour that has started counts in full) and its final usage invoice is made at once.

The Hourly Usage report (Reports > Billing) lists, for one month and one currency, every service sold by the hour with its hours, the amount at 6 decimals and the usage invoice that holds it, with a CSV download.

On the admin service page, the Hourly billing card shows the rate, the cap, the hours and cost this month, what has not been invoiced yet, and the metering rows. Meter now runs the meter for that service immediately.

The usage invoice

Every day at 01:00 the job hourly:invoice meters up to that moment and invoices the usage of finished months. In practice the first run of a month does the work, and a day the site was down is caught up the next day.

  • One invoice per client and currency, with one line per service and month, for example Cloud VPS — vps1.example.com (312 hours at $0.0089 an hour, capped at $6.00, Oct 2026).
  • The 6-decimal charges are added up first and the sum is rounded to cents once per line. A line under one cent is not invoiced.
  • The line is taxed like the product (Apply Tax). Automatic credit use applies as for any invoice.
  • The invoice is emailed with the Invoice Generated template, and reminders, late fees, suspension and termination work as for any invoice. The service gets the invoice's due date until the invoice is paid.
  • Usage invoices stay separate from renewal invoices, also when One Invoice Per Month is on.

Paying from account credit

With Pay from account credit on, the client pays for the hours with the account credit they already use for Add Funds, like a prepaid wallet.

  • The balance goes down as the hours are metered. Every hour, after the metering, the new usage is taken from the client's credit. The client sees the balance on the dashboard and on the new Account Credit page (Credit History lists every deduction), together with the hourly rate of their servers and about how many hours the credit still covers.
  • One invoice a month, kept up to date. The money still goes through an invoice, so tax, invoice numbers, PDFs and the revenue reports work as always. Each client has one running usage invoice per calendar month and currency; every settlement adds the newly metered hours to its lines, raises its total (with tax) and pays the increase from the credit. When the month is over the invoice is complete and paid. It is not emailed, because it would be sent every hour.
  • A low credit warning. When the credit covers fewer hours than General Settings > Credit > Low Balance Warning (Hours) (72 by default), the client gets the email Hourly Billing: Low Credit once. It is sent again only after the credit has recovered.
  • Power off at zero. When the credit is used up, whatever is not covered stays on the usage invoice as an amount due, and after Power Off After (Hours Without Credit) (0 by default: at once) the client's wallet servers are powered off: the service is suspended and the compute module stops the instance. The client gets the email Hourly Billing: Server Powered Off. Nothing is deleted. A powered-off server is not metered while it is off. If you have Enable Termination on in Automation Settings, a powered-off service is terminated after the days you set there, like an overdue service.
  • Switching back on. When the client adds funds, the amount owed on the usage invoices is paid first. When the credit that is left covers an hour of usage, the servers start again by themselves and are metered from that moment; the time they were off is not charged.
  • Termination. Terminating a service takes its last hours from the credit at once.

The minimum deposit is what makes this safe to sell: the server is only created once the client holds that credit. A product with Pay from account credit needs a minimum deposit above 0.

Deposit

With a minimum deposit, a client whose account credit is lower is taken to Add Funds right after ordering, with the missing amount filled in. Adding funds is a deposit, not an invoice (the client reports the payment with its transaction ID and you confirm it), so the order invoice (if any) holds only the setup fee. The server is created as soon as the credit reaches the minimum. The deposit stays as account credit: it is used on usage invoices when Automatic Credit Use is on, and otherwise the client can apply it to an invoice by hand.

An order that has nothing to pay (no setup fee) has no invoice, and the server is created at once, or when the minimum deposit is there.

Mobile API

The order products list (order-products) has an hourly object (rate, cap, setup fee, deposit) for every product sold by the hour, and an order is placed with billing_cycle set to hourly. A service has hourly_rate, hourly_cap and hourly_started_at, and the single-service endpoint also hourly_usage (month, hours, cost, uninvoiced).

A client's account credit is also in the mobile API (needs the billing permission): GET clients/{client}/credit returns the balance, the hourly usage paid from it, the waiting deposits and the latest credit history; POST clients/{client}/deposits records funds that have already arrived (amount, payment_method, transaction_id and paid_on are required, notes optional; the credit is added at once, no invoice); POST deposits/{id}/complete confirms a payment the client reported (payment_method and transaction_id required) and POST deposits/{id}/cancel cancels it; the credit call also lists the payment_methods to choose from. The mobile admin app 1.13.0 uses them.

Powered by WHBMP