Skip to content

Search docs

Search the Skiffly documentation

Billing

Prepaid balance topped up with PayPal, card or crypto, a Free plan with no subscription, Hobby and Pro with usage included, per-resource rates, plan changes, spend limits and what happens when the balance runs out.

Skiffly is prepaid. A workspace has a balance in USD; the plan subscription and usage above what the plan includes are debited from it. There is no card on file and no invoice at the end of the month: when the balance is gone, services are paused after a 3-day grace period on Hobby and Pro. Usage within the Free plan limits is not billed at all.

Plans#

FreeHobbyPro
Subscription$0$5 / month$20 / month
Usage includednone$5$20
Services1 app + 1 databaseunlimitedunlimited
Memory per service512 MiB8 GiB32 GiB
CPU per service1 vCPU8 vCPU32 vCPU
Volume sizeup to 1 GBup to 100 GBup to 250 GB
Free egress100 GB / period100 GB / period100 GB / period
App Sleepingalways onoptionaloptional
PR preview environments, TCP proxies—yesyes
Grace period at zero balancenone (pause immediately)3 days3 days
API rate limit100 / h1 000 / h, 10 / s10 000 / h, 50 / s

Every new workspace starts on Free: no subscription, one small service that sleeps when idle, no card required. Sleeping needs a public domain: a service with one scales to zero after about 10 minutes without HTTP requests, while a bot or worker without a domain keeps running. Usage within the Free limits is not billed: nothing is debited from the balance and nothing is paused at $0. The $5 welcome credit that verified accounts receive pays for usage, not for a plan.

Inactive Free workspaces. A Free workspace with no activity for 30 days is stopped. Activity is any sign-in or API/CLI request by a member, a deploy, or a visit to one of its sites. After 23 days without activity the owner gets an email with the stop date, at least 7 days ahead; signing in or opening a site before that date is enough to keep it running. When stopped, deployments are removed and the data stays: press Redeploy to start a service again. Volume data of a stopped workspace is deleted 60 days after the stop, with reminders 7 days and 1 day before. Static sites do not sleep on Free and are not stopped; Hobby and Pro workspaces are never stopped for inactivity.

The billing period starts on the day the workspace was created and runs one month. The subscription is debited once per period; usage is debited only after the period's gross usage exceeds the included amount.

Changing plan#

Settings → Plans (workspace owner; with two-factor authentication enabled a fresh code is required). The dialog shows what is charged now and when the change takes effect before you confirm.

  • Upgrade (Free → Hobby → Pro) applies immediately. The difference in subscription is debited from the balance for the remaining part of the current billing period ((new − old) × remaining / period, so upgrading Free → Hobby with 10 days left of a 30-day period costs $1.67), and the included usage for the rest of the period grows in the same proportion. If the balance is too low the API answers INSUFFICIENT_BALANCE with the amount; top up first. Welcome, referral and bonus credit does not count toward a plan change. The next full subscription is charged at the start of the next period.
  • Downgrade takes effect at the end of the current billing period, without a refund for the remaining days — the workspace keeps the current plan until then (Workspace.planPending, planChangeAt). Before scheduling it, Skiffly checks that the workspace fits the smaller plan (number of services, memory and CPU per service, volume sizes, TCP proxies, PR environments); anything that does not fit is listed (PLAN_LIMIT with violations) and must be removed or shrunk first. A scheduled downgrade can be cancelled any time before it takes effect (choose the current plan again). When it applies, the new resource limits are enforced on the next deploy of each service; on Free, App Sleeping switches on with that deploy too.

API: planChangePreview(workspaceId, plan) returns the quote; workspacePlanSet(workspaceId, plan) applies it. Every change is written to the audit log (workspace.plan_change), appears in the ledger as a subscription entry and is confirmed by email.

Usage rates#

ResourceRateBasis
Memory$8 per GB-monthreserved limit of each running replica
CPU$15 per vCPU-monthreserved limit of each running replica
Volumes$0.12 per GB-monthprovisioned size
Egress$0.03 per GBafter 100 GB per period, on every plan

A month is 730 hours. Usage is sampled while a replica runs and charged to the balance every hour; a sleeping or paused service costs nothing except its volumes. Examples: a 512 MB / 0.25 vCPU web service is about $7.75 a month; an API (1 GB / 0.5 vCPU) plus Postgres (512 MB / 0.25 vCPU, 10 GB volume) about $24.50. The pricing page has a calculator.

Topping up#

Settings → Billing → Add funds. Presets $10 / $25 / $50 / $100, any amount between $5 and $1 000.

  • Card: Visa, Mastercard, Amex, Apple Pay and Google Pay in a checkout overlay inside the dashboard. Any VAT/sales tax due in your country is added at checkout, and the receipt arrives by email. The balance is credited a few seconds after the card is charged.
  • PayPal: PayPal account or card at PayPal's checkout. The balance is credited when the capture completes.
  • Crypto: stablecoins (USDT, USDC) on TRON and other networks — pick the coin and network in the dialog, then pay the exact amount shown on the payment page within 60 minutes. Credited when the network confirms, usually within a minute on TRON. If you send less, the amount received is credited when the payment link expires; if you send more, the whole amount received is credited.

The CLI shows the state with skiffly billing; the API has billingAccount, topupOptions, topupCreate(workspaceId, provider: paypal | paddle | satqo, amountCents, payMethod) (payMethod is the coin and network for crypto, from topupOptions.cryptoMethods, e.g. USDT:tron; returns a checkoutUrl for PayPal and crypto, a paddleTransactionId for cards — the checkout is finished in the dashboard) and ledger for the full history. Refunds through the provider are reflected as refund entries.

New personal workspaces receive a $5 welcome credit once the account is verified (a GitHub account with some history, or a first payment).

When the balance runs out#

  1. Below $5 the dashboard shows a low-balance warning (billingAccount.lowBalance).
  2. At $0 on Hobby and Pro a 3-day grace period starts (negativeSince, pauseDueAt). Services keep running; usage keeps being debited, so the balance goes negative. On Free usage within the plan limits is not billed: nothing is debited and nothing is paused at $0.
  3. After the grace period every service in the workspace is paused: replicas are set to 0 and the deployments are removed. Volumes and data stay.
  4. A top-up that brings the balance above zero resumes everything automatically: replica counts are restored and the services redeploy. Upgrading a paused Free workspace to Hobby or Pro resumes it as well.

Auto-pause can be turned off on paid plans (billingAutoPauseSet(enabled: false)); the balance then keeps going negative and you settle the debt with the next top-up.

Spend limit#

Set a per-period spend limit on the workspace (Settings → Billing, workspaceUpdate(id, input: { spendLimitCents })). When the period's gross usage reaches it, services are paused with reason spend_limit. Raising or removing the limit resumes them; topping up does not.

Auto top-up#

Auto top-up is not available yet; the dashboard shows it as coming soon. The plan: save a PayPal payment method (paypalAutoTopupSetup makes a first top-up and stores the method), then whenever the balance drops below a threshold (default $5) Skiffly charges a configured amount (default $20), at most once every 6 hours. The API already exposes autoTopupSet(enabled, thresholdCents, amountCents) and paypalVaultDelete, and topupOptions.autoTopupAvailable tells whether the feature is switched on for your workspace. Until then, top up manually or set up a spend limit.

Where to look#

  • Usage in the workspace sidebar: RAM, CPU, disk and egress per service for the period, and the projected bill.
  • Settings → Billing: balance, ledger, payments, plan limits, pause state.
  • skiffly billing, MCP billing-account, GraphQL usage(workspaceId).