Pricing & billing
All API usage is paid from a single GeraiPoints (GP) balance. No subscriptions or monthly quotas — you only pay for the tokens you actually use.
GeraiPoints
- Top up your balance on the Top up page. Balance never expires.
- Usage history per request and per key is in the Dashboard.
How cost is calculated
The cost of each request is calculated from the usage reported by the model, using that model’s rate per 1 million tokens, then rounded up to the nearest GP.
biaya = ceil(
input_tokens / 1000000 × tarif_input
+ output_tokens / 1000000 × tarif_output
+ cache_read_tokens / 1000000 × tarif_cache_read
+ cache_write_tokens / 1000000 × tarif_cache_write
)
tagihan = max(biaya, minimum_per_request)Example with the current claude-sonnet-5 rates:
| Component | Value |
|---|---|
| Input rate | 2,300 GP / 1M token |
| Output rate | 11,600 GP / 1M token |
| Per-request minimum | 50 GP |
| Usage (example) | 20,000 input + 1,000 output |
| Charge | 58 GP |
Figures come from the current catalog and may change; the official rates for each model are on the pricing page.
Per token or per request?
All models are billed per token with a small per-request minimum. The exception is when a flat-rate promo is active: models marked as promo are billed a flat amount per request equal to their minimum, regardless of token count.
Cache pricing
Models that support prompt caching have separate rates for tokens read from the cache (cache read) and, on some models, tokens written to the cache (cache write). Cache read tokens are much cheaper than regular input, so keeping the same prompt prefix (system prompt, file contents) saves money. Each model’s cache rates are listed on the pricing page.
Per-request minimum & balance check
Every model has a per-request minimum (floor). Small requests whose token cost is below the floor are billed at the floor — it is not an extra charge on top of the token cost.
- Before a request is forwarded, the server checks your balance and reserves its estimated cost. An insufficient balance gets 402
insufficient_quotaat no charge. - The final charge is calculated after the response has finished sending, based on actual usage.
Cancelled requests
Requests cancelled on the buyer’s side (app timeout, stop button, dropped connection) before the response arrives are charged according to the cost the AI server actually incurred, at the model’s current rates; they are not charged if the AI server does not charge for them. The initial charge may be higher, and the difference is refunded to your balance automatically. Empty output is compensated only for problems on our side (an empty response or error from the server, or no output for ≥60 seconds). Applies from 1 November 2026.
To avoid paying for interrupted requests, set a timeout of at least 300 seconds and enable stream. Per-tool guides are in Agentic tool settings.
When you are and aren’t billed
| Event | Billed? |
|---|---|
| Response completed | Yes — based on usage |
| Error on our server before the response starts (502/503) | No |
| Rejected before processing (400/401/402/403/404) | No |
| Cancelled on your side (app timeout, stop button, dropped connection) | Yes — for usage already incurred |
| Automatic retry | Yes — each attempt is a new request |