Pricing & billing

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.00

Balances 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):

ModelInput / 1MCached input / 1MOutput / 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.

ModelPrice / 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_MP

Many 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.

ModelPrice / 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.