Pricing & billing
Crustoff is prepaid and metered. You buy credits; each request debits the exact cost. There are no subscriptions, and you can never spend more than your balance.
Credits
The unit of account is the credit, a micro-dollar:
1,000,000 credits = $1.00Balances and charges are whole-number credits, so there’s no rounding drift. Top up from the dashboard via Stripe.
Check your balance any time:
curl https://api.crustoff.app/v1/credits \
-H "Authorization: Bearer $CRUSTOFF_API_KEY"
# {"user_id": "...", "credits": 994271, "usd": 0.994271}Text pricing (per token)
Text models charge a per-million-token rate for input and output. Some models also offer a discounted cached input rate for prompt-cache hits (see below):
| Model | Input / 1M | Cached input / 1M | Output / 1M |
|---|---|---|---|
qwen3.6-35b-a3b | $0.1275 | — | $0.8075 |
qwen2.5-7b-instruct | $0.20 | — | $0.60 |
deepseek-v4-flash | $0.085 | $0.017 | $0.17 |
glm-5.2 | $0.8075 | $0.153 | $2.55 |
kimi-k2.7-code | $0.629 | $0.1275 | $2.975 |
deepseek-v4-pro | $1.105 | $0.085 | $2.21 |
Embeddings are billed on input tokens only. Streaming is billed on the tokens actually delivered.
Prompt caching. Models with a cached input rate cache your prompt prefix — when a later
request reuses that prefix (the same system prompt, tools, or conversation history), the repeated
tokens bill at the lower cached rate automatically. Caching kicks in for prefixes of ~1K tokens
or more; you can pass prompt_cache_key to improve cache hits. Your usage.prompt_tokens_details .cached_tokens shows how many tokens hit the cache on each request.
Image pricing (per megapixel)
Image models charge per megapixel of output — the honest megapixel count, not rounded up.
| Model | Price / MP | ≈ per 1024×1024 |
|---|---|---|
sdxl | $0.0015 | ~$0.0016 |
flux-schnell | $0.0018 | ~$0.0019 |
qwen-image | $0.012 | ~$0.013 |
megapixels = width × height × n ÷ 1,000,000
cost = megapixels × price_per_MPMany providers bill a 1024×1024 image as 2 MP by rounding up. We bill the real 1.05 MP, so the same image costs you less here.
Video pricing (per second)
Video models charge per second of output video, settled when the job completes.
| Model | Price / second | ≈ per 5s clip |
|---|---|---|
wan2.2-i2v | $0.030 | $0.15 |
A failed job (worker error) is never charged — the credit hold is released in full.
Holds and settlement
Every request places a short-lived hold for its worst-case cost before running, then settles the actual cost when it finishes:
- Text — the hold covers the prompt plus the maximum output; you’re charged only for the tokens generated, and the remainder is released.
- Images — the cost is known up front (megapixels), so the hold equals the charge. If generation fails on our side, the hold is released and you pay nothing.
This is why you may briefly see available credit dip by more than the final charge during a long-running request.
How charges appear
Each request writes one usage row (visible in your dashboard) and one ledger entry. The
x-prox-request-id response header is the id you’ll see against that charge.