Domainee Docs

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 50 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. 400 GB included with any active subscription; $0.05/GB above. Free-tier accounts (no card on file) get 100 GB/month before traffic is blocked.

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 (≤50 domains and ≤400 GB on a paid plan; ≤50 and ≤100 GB on free), the invoice is $0 and your card isn't touched.

What happens at the limits

ScenarioBehavior
Free tier, attempting to create domain #51POST /v1/domains returns 402 billing_required. Add a card to continue.
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, 51st domainAllowed. End-of-cycle invoice includes the chargeable domain count.
Paid plan, 401 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 — the 50 free domains count toward your tier).

Domain countPer-domainDiscount
51–1,000$0.20
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 = 50 free + 950 × $0.20 + 500 × $0.19 = $285/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