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
Three paint swatches in teal, amber and coral side by side on textured paper, overhead studio photograph
$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 photographZ-Image Turbo · seed 11

What each output costs.

One price per output, set by the model and the tier. Aspect ratio and output format don't change it.

Current prices, plus planned prices for models marked coming soon. 1 credit = $0.05. Read live prices from the API.
ModelCapabilityTierCreditsUSD
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.

Read the price listbash
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.

  1. 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 with 402 billing.insufficient_credits and nothing is created.

  2. Complete

    The hold is captured and credits.actual equals the estimate. A price change after you submit doesn't affect jobs already submitted.

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

Requestbash
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"}'
Responsejson
{  "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 is charged once a day from your credit balance, for each finished UTC day.
StorageCreditsUSD
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/estimate returns 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.

Top-up presets. Any amount from 100 credits to 100,000 credits also works.
CreditsUSDExpires
200 (signup)Free30 days after grant
500$25365 days after purchase
1,000$50365 days after purchase
2,500$125365 days after purchase
5,000$250365 days after purchase
100 to 100,000$5 to $5,000365 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.

Start a top-upbash
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 the billing.credits_low webhook 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.

Totals at $0.05 per credit.
ItemDetailCountCredits eachCredits
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 402 until 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.

Start yours.

Request early access. We’ll email you when your account is approved, with 200 free credits to spend in the first 30 days.