Skip to main content

Billing

Every price on Lium is an hourly USD rate โ€” per GPU on the marketplace, per pod on the deploy summary โ€” but you are billed per second: a pod is charged hourly price ร— seconds / 3600 for the exact seconds it existed, with no minimum and no rounding up to a minute or an hour. A pod at $2.40/hour that you delete after 20 seconds costs $0.0133.

What is chargedโ€‹

ItemRateGranularity
PodPod price per hour = provider's per-GPU price ร— GPUs (set at deploy; a later price change by the provider reaches a running pod only as described under When the provider changes the price)Per second, from the moment you click Deploy until the pod is removed
ClusterSum of every node's pod pricePer second, each node billed as its own pod
Volume$/GB/hour on the data actually storedDaily, see Volumes
Backups$/GB/hour on the backup data stored in S3Daily, see Backups

The clock starts when the pod is created (the deploy request), so the short provisioning window before the pod turns RUNNING is included. A reboot keeps the same pod and the same price; the pod stays billed while it reboots. A pod on a node that stops reporting is not charged for the time the node is inactive.

When the provider changes the priceโ€‹

A provider can change a node's price while your pod runs on it. New rentals pay the new price at once. Your pod moves to the listed price too, and what matters is the listed price against the price your pod pays now, not whether the provider moved the number up or down:

  • A listed price above what your pod pays reaches your pod 14 days after you are told. You get an e-mail with both prices and the exact UTC time, and the pod page shows the same line until then. Until that time the pod bills at the price you rented it at. To avoid the new price, delete the pod before that time. If the provider changes the price again inside the 14 days to anything above what you pay, you are told again and the 14 days start over from that mail. A stopped or failed pod gets the same notice: it keeps its price for its next start or reboot, and a reboot keeps the pending change. This also covers a provider who lowers a listing that is still above your price: for your pod that is a raise, with the same 14 days.
  • A listed price below what your pod pays reaches your pod at once, also when the provider raised the listing to get there.
  • A change back to the price you already pay cancels a pending change; the line on the pod page goes away.

GET /pods shows a pending change as pending_price (the hourly price your pod moves to) and price_change_effective_at (when); both are null when nothing is pending.

When it hits your balanceโ€‹

  • Every 5 minutes the platform charges each running pod for the seconds since its previous charge and subtracts the total from your balance. The first charge covers the seconds since deploy, so it is usually less than 5 minutes' worth.
  • When a pod is removed โ€” by you, by a scheduled termination, by the provider reclaiming the node, or because your balance ran out โ€” the seconds since the last 5-minute charge are settled immediately. Nothing is charged after the removal request.

The Billing page shows the balance to the cent and daily totals; the ledger underneath keeps the full precision, so small charges are not lost to rounding.

When the balance runs outโ€‹

  • Deploying requires a balance covering at least 15 minutes of the pod's hourly price; the error tells you the exact amount.
  • If a 5-minute charge takes your balance to zero or below, your pods are removed at that check. The balance can go slightly negative, by about the previous 5 minutes of running pods, because the pods ran before the check noticed. Volumes and backups keep their daily charges until you delete them, so the balance keeps falling while they exist. Top up to clear it.
  • You are warned first. Runway is balance รท hourly cost of everything running (pods plus volumes). You get one email when runway drops below your own threshold (default 24 hours, under Profile โ†’ Notifications, where you can also turn it off). Not in production yet โ€” lium-platform#125 and #127: then one at about 1 hour and one at 15 minutes; each warning is sent once and re-arms after a top-up. The web app shows the same warning as a banner on every page (#127), and GET /users/me carries it as balance_warning (runway_minutes, burn_per_hour) for scripts (#125). When the pods are removed you get an email naming them, the charge that emptied the balance and a top-up link (#125); the banner stays until the balance is positive again.
  • Auto Top Up on the Billing page refills the balance from a card on file when it falls below a threshold. If the card is declined, the charge is retried after 1 hour and 6 hours and paused after three declines; you are emailed once per decline streak. Not in production yet โ€” lium-platform#125 and #127: the banner then shows the bank's reason until you update the card or a payment succeeds.
For agents and automation: API + CLI

GET /users/me returns "billing_granularity": "second" next to balance, so a client can print the unit it reads rather than hard-code it. lium balance shows the balance; lium ps shows each pod's $/h and spend so far (uptime ร— price, displayed to the cent).

GET /transactions lists every payment, credit and refund row of your account (platform, status, amount, amount_in_usd, transaction_paid_at, ...). Each row also carries is_deposit (true when you paid this money in by card, crypto, TAO or alpha and the payment is COMPLETED; false for pending or failed rows, bonus rows, disputes and referral or admin credits) and is_first_deposit (true on the earliest deposit you ever completed, on no other row). The web app reads the two flags to report a completed top-up once.

curl -s https://lium.io/api/users/me -H "X-API-Key: $LIUM_API_KEY" | jq '{balance, billing_granularity}'

Each pod's hourly price is price on GET /pods; the marketplace per-GPU price is price_per_gpu on GET /executors.