Pay per output.
Windpaint bills in prepaid credits at $0.05 each. Every output has a fixed price you see before you submit, and you're charged only when the job completes.
- One credit
- $0.05
- Failed jobs
- Not charged
- First 7 days of storage
- Free

- $0.004
- an image. Z-Image Turbo at 1k; FLUX.2 [klein] 4B is $0.005.
- $0.20
- a clip, coming soon. Wan 2.2 image-to-video, 5 seconds at 480p.
- 200
- free credits when your early-access account is approved, valid for 30 days.
Three paint swatches in teal, amber and coral side by side on textured paper, overhead studio photograph
What each output costs.
One price per output, set by the model and the tier. Aspect ratio and output format don't change it.
| Model | Capability | Tier | Credits | USD |
|---|---|---|---|---|
z-image-turbo | image.generate | 1k 1024 px long edge | 0.08 per image | $0.004 |
flux-2-klein-4b | image.generate | 1k 1024 px long edge | 0.1 per image | $0.005 |
wan-2.2-i2v (coming soon) | video.generate | 480p, 5 s | 4 per clip | $0.20 |
An image request can ask for up to 4 images with num_outputs and costs the per-image price times that number. If a multi-image job delivers fewer images than you asked for, you pay only for the ones delivered.
Prices can change, so read them from GET /v1/generation/capabilities instead of hard-coding them. Each model carries a prices array with one row per tier, and credit amounts are strings to keep them exact. See the model catalogue for what each model takes and returns.
curl https://api.windpaint.ai/v1/generation/capabilities \ -H "Authorization: Bearer $WINDPAINT_API_KEY" \ | jq '.data[] | {capability: .id, models: [.models[] | {model, prices}]}'You pay for completed jobs.
The price is held while a job runs and captured only when it finishes with an output.
Submit
The job's price is fixed and returned as
credits_estimate, and that amount is held from your available balance. If the balance can't cover it, the submit fails with402 billing.insufficient_creditsand nothing is created.Complete
The hold is captured and
credits.actualequals the estimate. A price change after you submit doesn't affect jobs already submitted.Fail, nsfw or cancel
The hold is released in full. A prompt that content moderation blocks at submit is refused before anything is held.
Workflow runs check your balance against the run's total estimate when they start but don't reserve it. Each step holds its own credits when it starts, so a run can fail partway if the balance runs out. Steps that already completed stay charged.
Know the price first.
POST /v1/generation/estimate takes the same body you'd submit, plus capability, and returns the price and output size without creating a job.
curl https://api.windpaint.ai/v1/generation/estimate \ -H "Authorization: Bearer $WINDPAINT_API_KEY" \ -H "Content-Type: application/json" \ -d '{"capability": "image.generate", "prompt": "a red bicycle", "resolution": "1k", "aspect_ratio": "16:9"}'{ "data": { "capability": "image.generate", "model": "z-image-turbo", "credits": "0.08", "width": 1024, "height": 576, "available": true }}With num_outputs, the response also carries unit_credits, and credits is that times the number of outputs. When a model and tier can't run right now, credits is null and available is false. Workflows have their own POST /v1/workflows/{slug}/estimate. Estimates don't run moderation, so an estimate can succeed for a prompt that submit rejects.
Seven days free.
Assets are kept for your organization's retention period, 7 days unless you change it. With 7 days or less, storage never costs anything.
| Storage | Credits | USD |
|---|---|---|
| First 7 days of each asset | 0 | $0.00 |
| Past day 7, per GiB per 30 days | 2 | about $0.10 |
For example, 10 GiB kept for 30 days instead of 7 is 10 GiB × 23 days = 230 GiB-days, about 7.67 GiB-months, or about 15.33 credits ($0.77).
Charges stop when an asset expires or you delete it. If your balance can't cover a day's storage, what's available is charged and the rest is retried later. Assets aren't deleted for non-payment. Retention periods and deletion are covered on the Trust page.
What's free.
You spend credits on outputs and on storage past the free days. Everything else costs nothing.
Uploads and downloads
Uploading inputs and downloading outputs, including through signed links.
Read-only API calls
Listing jobs and assets, reading the price list, and checking your balance with
GET /v1/billing/balance.Estimates
POST /v1/generation/estimatereturns a price without creating a job.Jobs without an output
Failed, canceled and moderation-blocked jobs. Their holds are released in full.
Requests refused with 429
Nothing is created or charged when a request goes over a rate limit.
Prepaid, no plans.
Credits belong to the organization, and every project and member spends from the same balance. Approved early-access accounts start with 200 credits.
| Credits | USD | Expires |
|---|---|---|
| 200 (signup) | Free | 30 days after grant |
| 500 | $25 | 365 days after purchase |
| 1,000 | $50 | 365 days after purchase |
| 2,500 | $125 | 365 days after purchase |
| 5,000 | $250 | 365 days after purchase |
| 100 to 100,000 | $5 to $5,000 | 365 days after purchase |
Buy credits in the dashboard under Settings → Billing, or start a top-up from the API, which returns a Stripe Checkout URL to open in a browser. Stripe emails you the receipt. GET /v1/billing/topups/quote returns the current price per credit, the limits and the expiry period.
curl https://api.windpaint.ai/v1/billing/topups \ -H "Authorization: Bearer $WINDPAINT_API_KEY" \ -H "Content-Type: application/json" \ -d '{"credits": 1000}'Spend order
Credits are spent from the batch that expires soonest, then the oldest. Free signup credits go before purchased ones.
Low-balance alert
Set a threshold under Settings → Billing or with
PUT /v1/billing/settings. Org admins get an email and thebilling.credits_lowwebhook fires once, and again only after the balance recovers.Rate limit tiers
Lifetime purchases of $50, $500, $2,000 raise your concurrent job and submits-per-minute limits. See rate limits.
A small project, priced.
Generate 50 drafts on z-image-turbo, redraw 10 of them on flux-2-klein-4b, and one job fails along the way.
| Item | Detail | Count | Credits each | Credits |
|---|---|---|---|---|
image.generate | z-image-turbo, 1k, 10 requests with num_outputs: 4 and 10 with 1 | 50 | 0.08 | 4 |
image.generate | flux-2-klein-4b, 1k, 10 picks redrawn | 10 | 0.1 | 1 |
image.generate | failed, hold released | 1 | 0 | 0 |
5 credits$0.25 at the top-up rate. It fits inside the free signup credits several times over.
What we don't do.
Credits are the only way to pay. These aren't offered today.
Subscriptions
No monthly plans. Credits are prepaid only.
Invoices
Each top-up gets a Stripe receipt by email instead.
Auto top-up
When credits run out, new jobs fail with
402until you buy more.Spending limits
No per-project budgets. Any key allowed to generate can spend the organization's balance, so use key roles and the low-balance alert.
Questions.
Do I pay for failed jobs?
No. The price is held when you submit and released in full if the job fails, is blocked by moderation, or is canceled. A prompt that moderation blocks at submit is refused before anything is held.
What happens when I run out of credits?
New submits fail with 402 billing.insufficient_credits, and the error details say how much was required and how much was available. There is no auto top-up, so jobs keep failing until you buy more credits.
Is there a free tier or a subscription?
There are no subscriptions or monthly plans. When your early-access account is approved, your organization gets 200 free credits that expire 30 days after they're granted. After that, you buy credits as you need them.
Do credits expire?
Yes. Signup credits expire after 30 days and purchased credits 365 days after purchase. Credits are spent from the batch that expires soonest first, so signup credits go before purchased ones.
Can prices change?
Yes, so read them from GET /v1/generation/capabilities rather than hard-coding them. The price of a job is fixed when you submit it, and a later price change doesn't affect jobs already submitted.
Do aspect ratio or output format change the price?
No. The price depends only on the model and the tier. An image request with num_outputs costs the per-image price times that number, up to 4.
How are workflow runs billed?
Starting a run checks your balance against the run's total estimate but doesn't reserve it. Each step holds its own credits when it starts, so a run can fail partway if your balance runs out. Steps that already completed stay charged.
Can I get an invoice or set a spending limit?
Not today. Each top-up gets a Stripe receipt by email, and there are no per-project budgets. Any key allowed to generate can spend the organization's balance, so use key roles and the low-balance alert to keep an eye on it.