Plans and billing
devboxes charges for work on capacity that devboxes manages, and for Runs on your own Runners beyond 3 at once. Up to 3 Runs at once on your own Runners cost nothing in devboxes and need no plan or credit. Your model provider bills the model usage of every Run and Chat reply to your model account.
Plans
| Free | Basic | Premium | |
|---|---|---|---|
| Price | €0 | €50 a month, or €500 a year | €200 a month, or €2,000 a year |
| Managed usage included monthly | none | €50 | €250 |
| Managed Runs at once | 3 | 5 | 20 |
| History of a Session after its last activity | 30 days | 90 days | 1 year |
| Free Runs at once on your own Runners | 3 | 3 | 3 |
| Prepaid credit you can buy | at most €20 in one purchase, and only while the credit you bought is below €15 | up to €100 of bought credit in total | up to €500 of bought credit in total |
| Storage | 5 GB | no limit | no limit |
| Tool cache archive of one path | 500 MB | no limit | no limit |
| Priority Support | no | yes | yes |
| Onboarding calls and a shared Slack channel | no | no | yes |
| Organizations on this plan a person owns | one | no limit | no limit |
An Organization without a paid plan is on Free. A yearly plan costs ten months. A yearly plan includes its usage month by month, like a monthly plan. Included usage that a month doesn't use does not carry over. Months count from the day the subscription started.
devboxes erases a Session, with its Runs, transcript and files, once its last activity, such as a Run or a saved file, is older than the plan's history, and nothing keeps it busy: no Run of it is queued or running, and its Review isn't open. After your Organization leaves a plan, or moves from Premium to Basic, the longer history still applies for 30 days.
Priority Support answers requests before Free requests, with no promised reply time.
devboxes can raise an Organization's limits on request: how many managed Runs it runs at once, how much credit it can hold, and how much extra usage a month bills. A raised credit limit replaces Free's rule: the Organization can then buy credit up to that limit in total, as on a paid plan, in any whole amount of at least €10 instead of only the packs. billing.inspect shows the limits in limits.
devboxes can also grant your Organization Basic or Premium until a date. A granted plan is a subscription whose plan price a 100% discount keeps free, and it ends on that date. It includes the plan's monthly usage, Runs at once, history and storage. Once you save a payment method, it bills extra usage as a paid plan does; without one, it bills none. billing.inspect shows it with plan.subscription.granted. While it runs, you can buy credit, and billing.portal opens only to save a payment method. billing.change-plan moves the granted plan to a paid one, which ends the grant. It needs a saved payment method, and starts a fresh period today: it charges the plan's full price at once, for a month or a year from today, whichever plan and interval you choose. When the charge fails, the grant stays as it was. billing.subscribe answers SUBSCRIPTION_EXISTS.
Changes to a plan
| Change | Effect |
|---|---|
Change the plan or the interval with billing.change-plan | Stripe charges the difference at once. In the month of the change, the included usage is shared: the old plan's monthly amount for the part of the month before the change, and the new plan's amount for the rest. Changing from Basic to Premium halfway through a month gives that month €150. Extra usage until the change is billed at the old interval's price. |
| Cancel in the customer portal | The plan stays until the end of the paid period. |
| Renewal | A paid period that renews keeps its plan for one day after its end, while the renewal's payment arrives, also when Stripe retries a failed charge. In that day, managed work spends only what is left of the last month's included usage, and no extra usage, and keeps starting and running even when that is used up. A subscription set to cancel gets no such day: its plan ends with the period. |
Prepaid credit
| Property | Value |
|---|---|
| Packs | €10, €25, €50, and €100. With a raised credit limit, any whole amount of at least €10. |
| Validity | 12 months from payment |
| Order of use | The credit that expires first is spent first. |
| Promotion code | Lowers the price, not the credit you get |
| Credit that devboxes gives you | Spent like bought credit, and valid 12 months |
How managed work is charged
devboxes bills a managed Run's machine time per second, at the hourly price of the Run's machine size:
| Machine size | Price per hour |
|---|---|
| Medium | €0.25 |
| Large | €0.60 |
| XL | €1.35 |
devboxes counts the time up to the Run's last sign of life. A managed Run's machine stops 12 hours after devboxes creates it. When a managed Run stops, devboxes charges its cost:
- from the current month's included usage of your plan, then
- from your prepaid credit, the credit that expires first first, then
- on a paid plan, as extra usage, up to the month's limit.
devboxes doesn't charge what none of them covers.
Managed work starts only while your Organization has money left: the included usage that is left, plus your credit, plus the extra usage left below the limit, minus what your running managed work has cost so far. Without money left, starting managed work fails with COMPUTE_CREDIT_EXHAUSTED. When running work uses up what is left, devboxes stops it. The Run keeps the reason in its error, and the Session keeps the work saved so far. Continue the Session once your Organization has money again.
The Runs that count against the limit of managed Runs at once are the managed Runs that are queued, running, or being stopped. Runs on your own Runners don't count.
Extra usage
On Basic and Premium, usage that the month's included usage and your prepaid credit don't cover is extra usage. Stripe bills it on your plan's next monthly invoice, or, on a yearly plan, on a separate invoice at the end of the month, with tax added as on the plan.
| Plan interval | Price of €1 of usage |
|---|---|
| Monthly | €1 |
| Yearly | €0.80, 20% less |
Extra usage has a monthly cap, counted in what you pay.1 At the cap, devboxes stops work as when credit runs out; buy credit to go on. Usage that reaches Stripe after its month's invoice is made appears on the next invoice, so one invoice can carry extra usage from two months. billing.inspect shows the price in plan.overage.rate and what this month's usage has billed so far in plan.overage.usedEur. Free has no extra usage.
How Runs on your own Runners are charged
Your Organization runs up to 3 Runs at once on its own Runners for free, on every plan. Only Runs that are running count; queued Runs don't, so Runs waiting in the queue of one Runner cost nothing. A Run that a Runner starts while 3 or more of your Organization's Runs on its own Runners are running or being stopped takes a Runner slot. A Runner slot costs €0.15 an hour, counted from when devboxes saw the Run start up to its last sign of life, and at most 24 hours after it started. A Run keeps its slot, at the price it started with, until it stops, even when an earlier Run stops first.
A slot is charged like managed work: when the Run stops, from the current month's included usage of your plan, then from your prepaid credit, then as extra usage. A Run that would take a slot starts only while your Organization has money left: on Free, prepaid credit; on a paid plan, the included usage that is left, prepaid credit, or extra usage below the limit. Without money, the Run stays queued, and sessions.inspect shows queueReason: credit until one of the other Runs ends or your Organization has money again. New work on your own Runners waits in the queue with queueReason: credit while 3 Runs already run there and your Organization has no money. When running work uses up what is left, devboxes stops it, as it stops managed work.
Parked usage
devboxes doesn't charge a managed Run right away when:
- the Run failed for a cause on devboxes' side, such as a machine that went away or a workspace that devboxes couldn't prepare, or
- the Run's agent reported 3 or more different unexpected issues.
Its cost is parked. Runner slots are parked by the same rules. Parked usage counts against neither your included usage nor your credit. billing.inspect shows it as parkedEur. devboxes then either charges it, from the included usage of the month it is charged in and then from your credit, or waives it so that it is never charged.
A stop that the work caused itself, such as running out of memory or disk, is charged.
Refunds and disputes
| Event | Effect |
|---|---|
| A credit purchase is refunded | devboxes takes back the refunded share of that purchase's credit, from the credit that is left. Spent credit stays spent. |
| A plan's first or renewal payment is fully refunded | The paid period ends. Your Organization is on Free until a newer period is paid. |
| A plan payment is partly refunded | The period and its included usage stay. |
| Any refund of a plan payment | The subscription continues, and Stripe bills the next period. To end it, cancel in the customer portal. |
| A dispute is open or lost | devboxes takes back all of the credit that is left from that purchase, or the paid period's included usage, also for a plan change's payment. |
| A dispute is won | devboxes gives back what it took. |
To ask for a refund, write to [email protected]. Support lists every way to reach devboxes.
Who can run the billing operations
| Operation | Role |
|---|---|
billing.inspect, billing.prices | Any member |
billing.buy-credits, billing.subscribe, billing.complete-checkout, billing.change-plan | Owner or admin |
billing.portal, billing.set-spending-limit | Owner |
What billing.inspect shows
| Field | What it holds |
|---|---|
prepaidEur | The prepaid credit that is left and hasn't expired. |
lots | The purchases and grants that haven't expired: amountEur, remainingEur, and expiresAt. |
runningEur | What your running managed work and paid Runner slots have cost so far. |
parkedEur | The cost of your parked managed work and Runner slots. |
storedBytes | What your Organization stores, in bytes: its Sessions' files, checkpoints and workspaces, and its Projects' tool caches. |
plan.name | free, basic, or premium. |
plan.subscription | The subscription as Stripe reports it now: plan, interval, status, currentPeriodEnd, cancelAt: when a cancelled plan ends, or null, granted: whether devboxes granted the plan, and paymentMethod: whether Stripe can charge it without asking you, which billing.change-plan needs to end a grant. |
plan.included | The current month's included usage: eur, usedEur, windowStart, windowEnd, and periodEnd. |
plan.overage | rate, what €1 of extra usage costs on your plan's interval, and usedEur, the extra usage this month billed so far in euros paid; null on Free. |
plan.subscriptionUnavailable | Why Stripe couldn't answer, or null. |
limits | concurrentTasks, the managed Runs at once; topUpEur, the most credit your Organization can hold after a purchase, or null on Free; overageEur, the most extra usage a month bills in euros paid, or null on Free; two flags that say whether devboxes raised a limit (concurrentTasksOverridden, topUpEurOverridden); overageOverrideEur, the extra usage cap devboxes set, or null; spendingLimitEur, the owner's own cap on extra usage, or null; overageCeilingEur, the most that cap may be, or null on Free; overageNeedsPaymentMethod, true while a granted plan bills no extra usage because no payment method is saved, which billing.portal saves; storageBytes, the most your Organization stores before work can't start, or null without a limit, with storageBytesOverridden; and historyDays, how many days a Session stays after its last activity, or null where devboxes erases nothing, with historyDaysOverridden. |
Errors
| Code | When |
|---|---|
COMPUTE_CREDIT_EXHAUSTED | Managed work can't start because the included usage, the credit and the extra usage up to the limit are used up. The message names the date when the plan's included usage renews. |
MANAGED_CONCURRENCY_REACHED | Your Organization already has as many managed Runs at once as it may. |
STORAGE_QUOTA_EXCEEDED | Work can't start because your Organization on Free stores 5 GB or more. Erase Sessions with sessions.erase, or subscribe to a paid plan. |
TOOL_CACHE_ENTRY_TOO_LARGE | A Run on Free didn't save a tool cache path because its archive is over 500 MB. The Run's Session names the path. Later Runs restore its last saved archive, if any. |
CREDIT_PACK_REQUIRED | billing.buy-credits was called with an amount other than the packs. Write to [email protected] for a different amount. |
TOP_UP_LIMIT | The purchase is above what your limit lets you buy now. |
FREE_ORGANIZATION_LIMIT | organizations.create was called while you own an Organization on Free. Subscribe it to a paid plan or delete it first. |
SUBSCRIPTION_EXISTS | billing.subscribe was called while your Organization has a paid or granted plan. Change it with billing.change-plan. |
PLAN_CHANGE_UNPAID | The plan change wasn't paid, because Stripe couldn't charge it or a granted plan has no saved payment method, so the plan stays as it was. Add or update the payment method with billing.portal and change the plan again. |
SPENDING_LIMIT_ABOVE_CEILING | billing.set-spending-limit was called with more than your plan's cap on extra usage, or the cap devboxes set for your Organization. On a granted plan without a saved payment method the cap is €0; save one with billing.portal. |
SUBSCRIPTION_NOT_FOUND | billing.portal, billing.change-plan or billing.set-spending-limit was called for an Organization without a subscription. |
PAYMENT_PROVIDER_REFUSED | Stripe refused the request. The message gives Stripe's reason. |
PAYMENT_PROVIDER_UNAVAILABLE | Stripe didn't answer. Try again later. |
Footnotes
-
Extra usage has a monthly cap, to prevent fraud: €100 on Basic and €500 on Premium. Your Organization's owner can lower it with
billing.set-spending-limitor on the Billing page in Settings, and raise it again up to that cap. To go above it, write to [email protected].billing.inspectshows the cap that applies inlimits.overageEur. ↩