# Billing and balance

New accounts pay pay-per-use from a prepaid balance and everything else on a monthly bill. How top-ups, auto top-up, receipts and the $0 refusal work.

New accounts pay pay-per-use from a prepaid balance, and connected accounts, messages and ads on a monthly bill. Accounts created earlier pay everything on the monthly invoice, see [how billing works](/pricing/billing).

## Which accounts use the balance

New signups are on the balance. An account that signed up earlier keeps paying pay-per-use on its monthly invoice, and its Billing page stays as it was.

To check from the API:

- `GET /v1/balance` ([Get balance](/treasury/get-balance)) returns `balanceBilling: true` for an account on the balance. The field is absent otherwise.
- `GET /v1/balance/auto-recharge` answers `409` with code `balance_billing_required` for an account that is not on it.

## What each one pays for

| Paid by | What | When |
|---|---|---|
| Monthly bill | Connected accounts, inbox messages, managed ads and ad automations | Charged to your card on the 1st for last month, or earlier when the bill reaches a threshold (starting at $10) |
| Balance | Phone numbers, calls, SMS and 10DLC fees, RCS, iMessage senders, X API, WhatsApp calls, branded calling, Verify, SIP trunks and support assistant runs | Taken from the balance as you use them |
| Your card, per batch | Creator payouts and their fee | When you pay creators. Payouts are never paid from the balance, see [creator payouts](/pricing/creator-payouts) |

The rates are the same either way. Only where the money comes from changes.

## Topping up

Top up in Billing, or with `POST /v1/balance/top-ups` ([Create a top-up](/treasury/create-topup)) on a saved card.

- **No card fee.** Adding $100 credits $100.00 to the balance.
- **$5 minimum,** $100,000 maximum per top-up.
- **VAT on top where it applies:** 21% in Spain, your country's rate for EU consumers, none for an EU business whose VAT id VIES confirms (reverse charge) and none outside the EU. The top-up drawer and `POST /v1/balance/top-ups/preview` show it before you pay.
- **Invoice and receipt.** Each top-up has an invoice, and Stripe emails a receipt for the charge. Both are in Billing under Card payments.
- **No expiry, no refund.** The balance never expires and is not refundable. Usage paid from it carries no further VAT.

## Auto top-up

Auto top-up refills the balance from your default card: below one amount, the card is charged back up to another. Both are at least $5. A new account starts at below $5, back to $20.

- **Optional, your choice.** You choose it when you add your card or at your first purchase. It starts ticked for businesses (a VAT or tax id, or a billing address outside the EU) and unticked for EU consumers. Adding a card later shows your current choice, unchanged unless you change it.
- **Changeable any time** in Billing, or with `PATCH /v1/balance/auto-recharge` ([Update auto-recharge settings](/treasury/update-auto-recharge)).
- **Monthly limit.** Optional. Once this month's top-ups would pass it, the card is not charged and you get one email. Turning auto top-up on at your first purchase sets a $100 limit, which you can change in Billing.
- **Declines.** A declined charge is retried 1 hour, 1 day and 3 days later, with an email each time, then auto top-up switches off until you update the card. A decline while you are making a request switches it off at once.
- **Emails.** Stripe emails a receipt for every charge. Apart from decline, limit, low-balance and pause emails, Zernio emails you about top-ups once, after your first automatic one.

## At $0

The balance does not go below $0. New pay-per-use is refused with `402` and code `insufficient_balance`, or `usage_limit_reached` when the monthly limit kept it there.

For requests you make in the dashboard or API, with auto top-up on and a saved card, the charge runs first and the request goes through when it lands.

Scheduled and background work never charges the card at $0.

```json
{
  "error": "Your balance is at $0, so SMS is paused. Top up your balance in Billing to continue.",
  "type": "invalid_request_error",
  "code": "insufficient_balance",
  "funding_url": "https://zernio.com/dashboard/billing?funding=1"
}
```

Send the user to `funding_url`, which opens the top-up drawer in Billing (the add-card drawer first when there is no card), then retry.

## How it behaves

- Inbound traffic and calls already connected are never refused at $0.
- Usage already in flight when the balance ran out can land just past $0. The next top-up covers it.
- Background work at $0 pauses until the balance is above $0, and the billing owner gets one email per pause.
- Scheduled X posts at $0 wait up to 24 hours for funds, then fail with one email.
- Phone numbers are charged when activated and renewed on the 1st. A number left unpaid at $0 keeps working, is held for 14 days with reminder emails, then released.
- [Billing webhooks](/webhooks/billing) fire `balance.low`, `balance.empty` and `balance.charged`.

## If it fails

| Error | Cause | Fix |
|---|---|---|
| `402 insufficient_balance` | The balance is at $0 and no auto top-up lifted it | Top up at `funding_url`, then retry |
| `402 usage_limit_reached` | The auto top-up monthly limit stopped the charge | Raise `monthlyLimitCents`, or top up by hand |
| `402 payment_required` on a top-up | No saved card | Add a card in Billing |
| `402 card_declined` on a top-up | The bank refused the charge | Use another card |
| `409 balance_billing_required` | The account is not on the balance | Nothing to set: its pay-per-use is on the monthly invoice |

## Related

- [How billing works](/pricing/billing): the monthly bill, proration and the account ladder.
- [Creator payouts](/pricing/creator-payouts): charged to your card per batch.
- [Billing webhooks](/webhooks/billing): `balance.low`, `balance.empty`, `balance.charged`.
- [Get balance](/treasury/get-balance): the balance, recent top-ups and spend.