Billing overview
Deploys.app meters everything you run in real time and bills monthly. Costs roll up from projects to a billing account, which is the entity invoices are issued to.
How pricing works#
Pricing is pay-as-you-go. You’re charged for what your deployments actually used during the billing period — there’s no upfront commitment and no per-deployment monthly minimum. The metered quantities are:
| Resource | Metered in | Allocated or actual |
|---|---|---|
| CPU | vCPU-hours | Allocated (the requests.cpu you set) |
| Memory | GiB-hours | Allocated (the requests.memory you set) |
| Disk | GiB-hours | Allocated (the size you provisioned) |
| Registry storage | GiB-hours | Actual stored size |
| Static site storage | GiB-months | Actual stored size of your published static site releases |
| Dropbox storage | GiB-months | Actual stored size of your project’s Dropbox files |
| Egress | GiB transferred out | Actual bytes leaving the container (destination isn’t tracked) |
| External route egress | GiB transferred out | Actual bytes served from the edge for an external HTTP route |
Sizing your resources.requests matters — that’s the number that hits the
invoice for CPU and memory, whether or not the workload uses every cycle.
Where a location provides edge caching, the CDN that fronts your custom domains is included at no extra charge — there’s no separate CDN line item.
Billing accounts#
A billing account is the cost center invoices roll up to. One billing
account can own multiple projects (e.g. acme and acme-staging both bill
to Acme Billing); a project belongs to exactly one billing account at any
moment.
Each account carries:
- Name — the human label.
- Entity type —
individualorcompany(defaultindividual). A company is a juristic person, so its tax invoices and receipts print the branch designation “Head Office (สำนักงานใหญ่)” beside its address, as Thai tax law requires; an individual does not. Set it on the create/edit form or via thetypefield onbilling.create/billing.update. - Tax ID / name / address — what appears on invoices.
- Active — whether new charges can post. Inactive accounts can’t have new resources created against them.
Our own company address (the seller) always shows “Head Office (สำนักงานใหญ่)” on every invoice and receipt.
Manage billing accounts at Billing → Accounts in the console, or via the
billing.create, billing.update, billing.list API functions.
An account has one owner and can invite others to help manage it — an admin to co-run the account or an accountant who only pays invoices. See Members & roles for the roles and how to invite or remove people.
Invoices#
At the close of each billing period, the platform issues an invoice for each billing account. Invoices have:
- A number like
INV-2026-0009. - A period (
periodStart, exclusiveperiodEnd). - Line items — one per resource SKU (CPU, memory, disk, egress).
- Subtotal, tax (rate + amount), and total in the account’s currency.
- A status —
draft,open,paid, orvoid.
Drafts are working-in-progress invoices the platform builds during the
period. Once the period closes, the invoice moves to open and stays there
until paid (then paid) or voided (void). You’ll see the badge change on
the Billing → Invoices page as it progresses.
When an invoice is marked paid, it is also assigned a separate receipt
number (receiptNumber) of the form DPLY-RC-YYYYMM-NNNN. This is the
receipt / tax-invoice document’s own running number — a gapless sequence that
resets each calendar month — and is distinct from the invoice number
(number). A paid invoice’s receipt can be downloaded as its own PDF, which
carries the receipt number as its document number.
curl https://api.deploys.app/billing.listInvoices \
-H "Authorization: Bearer $DEPLOYS_TOKEN" \
-d '{ "id": "ba_…" }'
curl https://api.deploys.app/billing.downloadInvoice \
-d '{ "id": "inv_…" }' # returns a URL to the invoice PDF
curl https://api.deploys.app/billing.downloadReceipt \
-d '{ "id": "inv_…" }' # paid invoices only; returns the receipt PDF
Paying an invoice#
Invoices are settled by bank transfer. On the Billing → Invoices page, open
an open invoice and press Pay: the dialog shows the seller’s bank account
and a PromptPay QR (for THB invoices) for the amount due. Transfer the amount,
then upload your bank transfer slip as proof. An operator verifies the slip
against the payment and marks the invoice paid — at which point it is
assigned its receipt number and its receipt / tax-invoice PDF becomes available.
Withholding tax (หัก ณ ที่จ่าย)#
If your billing account is a company (a juristic person), you can withhold 3% tax on the payment, as Thai law requires for service payments. In the Pay dialog, tick Withhold 3% tax:
- The withheld amount is 3% of the pre-VAT subtotal (the service value, before VAT) — not of the gross total.
- Transfer the net amount the dialog shows:
Total − withholding. For example, a ฿1,070 invoice (฿1,000 subtotal + 7% VAT) withholds ฿30, so you transfer ฿1,040. - Optionally attach your withholding tax certificate (หนังสือรับรองการหักภาษี ณ ที่จ่าย, “50 ทวิ”) alongside the slip — or later, from the invoice page’s Attach WHT certificate button (certificates commonly arrive a few days after the transfer).
The invoice is still settled in full — the withheld 3% is remitted to the
Revenue Department on the seller’s behalf, so it is a tax credit, not an unpaid
balance. The receipt shows the deduction explicitly (Less withholding tax (3%)) and the net amount received. Withholding is a company-only option;
individual accounts pay the full total.
Where to watch your costs#
Two places:
- Project dashboard — a live “allocated price” per deployment, summed across the project. Useful for “did anything just balloon?” checks.
- Billing report — usage over a date range, broken down by project and resource. The right tool for monthly review and for splitting costs between teams.