# Billing & usage
> Credits, prepaid generation and understanding, successful usage settlement, and refunds.

Credits are the independent quota and billing unit agents spend when they call
Beatra skills. There is no fixed credit-to-currency exchange rate. Top-up
offers define how many credits a payment buys in each market; public model
prices define how many credits an operation consumes.

## How charging works

Generation, speech, voice, music, and dedicated image/video understanding tasks
are prepaid. Beatra charges the price of the accepted task at submit; generation
whose final quantity varies settles against measured usage on success.
Understanding uses the full number of accepted images, or input-video
seconds rounded up, so the amount charged at submit is exact. Public social-data reads
(`beatra.social.execute`) are also prepaid: the credit price is 6, 12, 30, or
60, and it is confirmed before the task is created.

If the balance cannot cover the prepaid amount, the API returns
`402 insufficient_balance` and no task is created.

## How many at a time

| Plan | At a time |
| --- | ---: |
| No plan | 2 |
| Starter | 4 |
| Builder | 6 |
| Pro | 8 |
| Studio | 8 |

When this many creations are already in progress, a new request is not started
and nothing is charged. Wait for one to finish and retry the same request, or
pick a plan that allows more at a time. REST per-minute limits are documented
on the rate-limits page.

## Prepaid understanding

- `POST /v1/images/responses` charges the accepted `image_count` at 5 credits
  per image, up to eight images.
- `POST /v1/videos/responses` charges the accepted `input_video_seconds` at 0.4
  credits per second; milliseconds are rounded up to a whole second.
- `detail` and provider token usage do not change the price.
- Failed or confirmed-canceled understanding tasks automatically refund the
  amount charged at submit through the standard prepaid refund path.

## Successful prepaid usage settlement

For a task whose final billable quantity depends on accepted media or measured
output, the submission debit is an estimate. On success, Beatra settles against
authoritative measured usage using the price snapshot captured at submission:

- lower actual usage returns the unused estimate in `refunded_credits`;
- equal usage needs no wallet adjustment;
- higher valid actual usage within the accepted request contract adds a
  supplemental debit to `charged_credits`.

Measured usage that is inconsistent with its own input/output breakdown or
exceeds the accepted request and model limits is never applied as actual usage
or as a supplemental debit. The original submission debit remains unchanged
while the task stays pending settlement for operator review.

The final amount is returned directly as `billing.net_charged_credits` (and is
equal to `billing.charged_credits - billing.refunded_credits`). A successful overage can
leave the wallet below zero; the artifact remains valid, while new billable
work is rejected until the balance is topped up.

## Automatic refunds on failure

When a task is `failed` or cancellation is confirmed and the task becomes
`canceled`, the held credits are **automatically refunded to source** — no
request needed. A cancellation conflict means the task is still running and
does not trigger a refund:

```json
"billing": {
  "charged_credits": 48.0,
  "refunded_credits": 48.0,
  "net_charged_credits": 0.0
}
```

## Billing fields in responses

Every task response carries:

| Field | Description |
| --- | --- |
| `usage.credits` | Net credits consumed by the successful request |
| `usage.image_count` | Admitted image count for image understanding, or successful output count for image generation |
| `usage.video_seconds` | Authoritative billable **output** video seconds after settlement (equals `usage.output_video_seconds`; any billed input component is reported separately) |
| `usage.input_video_seconds` / `usage.output_video_seconds` | Authoritative input/output components when available; `null` means no authoritative component was returned, not zero |
| `billing.net_charged_credits` | Final net wallet charge after actual-usage settlement and refunds |
| `billing.charged_credits` / `billing.refunded_credits` | Cumulative wallet debits / cumulative refunds; subtract them for the final net charge |

## Balance and top-up

On the global console, credit purchases are one-time payments (card, Apple Pay,
Google Pay, or Link). View your balance and add credits at
[console.beatra.ai/wallet?intent=buy](https://console.beatra.ai/wallet?intent=buy).

Credits belong to the account you are signed in to when you add them, and an Agent
can only spend the credits of the account it is connected to. The top-up page names
that account ("Adding credits to: …"). If you have two accounts, see
[Accounts and merging](https://docs.beatra.ai/en/docs/accounts).
