Balance & usage
Mafdet has two separate balances. They never top each other up, and they pay for different things:
| API Wallet | Playground Credit | |
|---|---|---|
| Pays for | API key calls (api.mafdet.ai) | Playground calls in the console |
| Comes from | Recharging | Your subscription plan, per period |
| Rolls over | Yes, until spent | No — resets each period |
| When it runs out | Calls rejected until you recharge | Playground stops until the next period (or a top-up) |
A Playground conversation never touches your API Wallet, and API calls never consume Playground credit.
API Wallet
Your wallet is prepaid runtime credit. Each call is charged (input + output tokens) × the model's unit price, except free trial models. Unit prices are listed on the Models overview.
Not everything is billed per token: image embedding is billed per image, video embedding per second, and text-to-speech charges text tokens in plus audio tokens out. The unit is shown with each model.
Reserve, then settle. Before a call the system reserves an estimated amount, then settles against actual usage and releases the remainder. A briefly "frozen" amount is normal; the final charge always follows actual usage, and a failed call releases its reservation in full.
When you see insufficient_credit or a "runtime credit insufficient" message:
- check your balance;
- top up — see Recharge;
- an administrator can also grant credit (for example test credit).
Playground Credit
Every subscription period includes an amount of Playground credit:
| Plan | Included per period |
|---|---|
| Free | $0.50 |
| Enterprise | $500.00 |
| Starter | $9.50 |
| Pro | $28.50 |
Playground calls draw this credit down at the same model prices as the API. The console shows used / remaining for the current period, and you are notified at 50%, 70%, 90% and 100% of the allowance.
At 100% the Playground stops accepting calls (PLAYGROUND_CREDIT_EXHAUSTED,
HTTP 402) until the next period. A single request larger than the remaining
credit is refused up front (PLAYGROUND_REQUEST_EXCEEDS_REMAINING) instead of
being half-run.
Unused credit does not roll over to the next period.
Top-up pack
A $10 top-up adds $9.50 of Playground credit to the current period only. It does not carry into the next period, does not touch the API Wallet, and does not change your plan. See Recharge.
How a charge is calculated, exactly
Amounts are held as whole micro-USD (µ$), where 1 USD = 1,000,000 µ$, in
integer arithmetic. No floating-point value is ever used for money, so repeated
charges cannot accumulate rounding drift.
The charge for one billed dimension is:
charge_µ$ = ceil(quantity × unit_price_µ$ / 1,000,000)
Rounding is always up, to the whole micro-USD. Worked examples, using
$0.60 / 1M tokens (= 600,000 µ$ per 1M):
| Tokens | Exact value | Charged |
|---|---|---|
| 1 | 0.6 µ$ | 1 µ$ |
| 7 | 4.2 µ$ | 5 µ$ |
| 1,000 | 600 µ$ | 600 µ$ |
| 1,667 | 1000.2 µ$ | 1001 µ$ |
Two consequences worth knowing:
- Any non-zero usage costs at least 1 µ$ (
$0.000001). There is no smaller charge and no free rounding-down. - A model billing on several dimensions is rounded per dimension, not once at the end. A chat call rounds its input and its output separately.
Usage records
The console usage / billing page lists each call with its model, usage and cost. Playground calls show a $0 wallet charge — they were paid from Playground credit.
Records are written after settlement, so a call that just finished may take a moment to appear. The amount you see is the settled amount, not the reservation.