DomaineeDocs

Pricing

How billing works, what counts toward usage, and how the free tier is enforced.

For the marketing pricing breakdown with an interactive estimator, see /pricing. This page covers the billing mechanics for developers integrating against the API.

What you pay for

Two usage axes, both metered automatically:

  1. Custom domains. Count of Domain rows in your workspace. The first 20 are free; beyond that, $0.20/domain/month with volume discounts that reach 50% off at 10,001+ domains.

  2. Bandwidth. Total bytes (request + response bodies) flowing through the edge for your domains. The first 100 GB/month is included on every workspace; $0.05/GB above. Workspaces without an active subscription are blocked after 100 GB/month instead of billed.

Both axes appear as separate line items on the same monthly invoice.

How quantity gets to Stripe

  • Domains: every POST /v1/domains and DELETE /v1/domains/{id} updates the subscription item's quantity in real time. Stripe prorates mid-cycle changes automatically. A reconciliation worker also re-pushes the count every 30 minutes as a safety net against drift.
  • Bandwidth: the edge counts bytes per request, buffers them in memory, and flushes to our control plane every 30 seconds. We aggregate to daily totals and push usage records to Stripe hourly with backdated timestamps so cycle boundaries are handled correctly.

When am I charged?

End of each monthly billing cycle. Stripe runs the graduated tier formula on your final domain count and sums all bandwidth usage records, generates an invoice, and charges the card on file automatically.

If your usage stayed within the free quotas (≤20 domains and ≤100 GB), the invoice is $0 and your card isn't touched.

What happens at the limits

ScenarioBehavior
No card on file, creating any domain (even the first)POST /v1/domains returns 402 billing_required. Add a card to continue; it's charged $0 until you pass the free tier.
Free tier, exceeded 100 GB this monthCustomer traffic returns 402 at the edge until a card is added. New domain creates also blocked with 402.
Paid plan, 21st domainAllowed. End-of-cycle invoice includes the chargeable domain count.
Paid plan, 101 GB usedAllowed. End-of-cycle invoice includes 1 GB × $0.05 = $0.05 overage.
Subscription past_due (failed payment)New POST /v1/domains returns 402. Existing traffic continues serving for ~3 weeks of dunning, then traffic is cut off.
Subscription canceledEdge returns 404 on every customer hostname for that workspace.

Admin bypass

Workspaces owned by a platform admin (users.isAdmin = true) skip every billing gate — useful for internal/test workspaces.

Volume discounts

Apply automatically based on your total domain count (not chargeable count, since the 20 free domains count toward your tier).

Domain countPer-domainDiscount
21–1,000$0.20None
1,001–2,000$0.195% off
2,001–3,000$0.1810% off
3,001–4,000$0.1715% off
4,001–5,000$0.1620% off
5,001–6,000$0.1525% off
6,001–7,000$0.1430% off
7,001–8,000$0.1335% off
8,001–9,000$0.1240% off
9,001–10,000$0.1145% off
10,001+$0.1050% off (cap)

Tiers are graduated — domains within each bracket are charged at that bracket's rate. So 1,500 domains = 20 free + 980 × $0.20 + 500 × $0.19 = $291/mo.

Self-serve billing

Customers manage their card, view invoices, and cancel from the Stripe-hosted Customer Portal, accessible from the dashboard's Billing page.

You can drop them straight into the portal via:

POST https://domainee.dev/api/billing/portal

(Authenticated via dashboard session — not API key. The Customer Portal isn't an API operation; it's a self-service UI for end users.)

On this page