API balance and refunds
The separate API USD balance, model prices, released task holds and where to ask about API payment refunds.
PopNow's API has its own USD balance. API-key calls, the developer MCP and Playground runs on the API pages spend it. A model costs the same on the API as on popnow.ai for the same settings.
This page explains API funding, prices and released holds. For task-level holds, quotes and caps, see API billing.
API balance in one minute
- Starts at $0. Add API funds in API billing before running paid requests, including Playground tests.
- Its own funding. Only API funds added in API billing go into this balance, and they are spent only by the API.
- Quote before running.
jobs/quotereturnsexpectedChargeUsdandmaxChargeUsdas USD decimal strings without starting a task. - Read the settled amount. A task's
costUsdis its final USD charge whensettledistrue. Failed or expired tasks release their holds automatically.
Where API funds come from
Manage API funding and payment records in API billing, using the payment options currently enabled there. Create and manage keys separately under API keys.
What spends the API balance
| Call or surface | Paid from |
|---|---|
REST or compatible API with a sk-popnow- key | API balance |
| Playground on an API model page | API balance |
| Developer MCP with an API key | API balance |
| Saved recipe runs through the API or the developer MCP | API balance |
If an API request cannot cover its hold, add API funds in API billing.
How a generation is priced
Each model has its own price list, set per option: per image, per second of video or audio, per song, or per 1,000 characters of speech. Resolution, length, quality and reference files can change the price.
Some example API prices in USD:
| Model | What you get | USD |
|---|---|---|
| Z-Image Turbo | One image | $0.01 |
| Nano Banana 2.1 | One image at 1K / 2K / 4K | $0.048 / $0.072 / $0.162 |
| Seedream 5.0 Pro | One image at 1K / 2K | $0.036 / $0.072 |
| MiniMax H3 | Image to video, 768p, 5 seconds | $0.185 |
| Suno v6 | One song | $0.072 |
| Background Remover | One transparent PNG | $0.0048 |
| Image Upscaler | One photo, upscaled | $0.012 |
Models links to the model reference pages. Use the live quote for your settings and keep USD decimal precision (up to nine decimal places); do not round API charges. Playground on the API pages spends the same API USD balance.
Ask for the exact amount before you run anything:
curl -X POST "https://api.popnow.ai/api/v1/jobs/quote" \
-H "Authorization: Bearer $POPNOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "minimax/h3/image-to-video", "input": {"image_url": "https://media.popnow.ai/movie/lighthouse.webp", "prompt": "The waves roll in slowly", "duration_seconds": 5}}'import os, requests
quote = requests.post(
"https://api.popnow.ai/api/v1/jobs/quote",
headers={"Authorization": f"Bearer {os.environ['POPNOW_API_KEY']}"},
json={
"model": "minimax/h3/image-to-video",
"input": {"image_url": "https://media.popnow.ai/movie/lighthouse.webp", "prompt": "The waves roll in slowly", "duration_seconds": 5},
},
timeout=30,
).json()["data"]
print(quote["maxChargeUsd"], "USD at most,", quote["expectedChargeUsd"], "USD estimated")const res = await fetch('https://api.popnow.ai/api/v1/jobs/quote', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.POPNOW_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'minimax/h3/image-to-video',
input: { image_url: 'https://media.popnow.ai/movie/lighthouse.webp', prompt: 'The waves roll in slowly', duration_seconds: 5 },
}),
});
const { data } = await res.json();
console.log(`${data.maxChargeUsd} USD at most, ${data.expectedChargeUsd} USD estimated`);What happens when a task fails
When a task is accepted, its highest possible USD price is set aside from your API balance as a hold. When it ends:
| Outcome | What you pay |
|---|---|
succeeded | The actual USD charge, never more than the hold; the unused amount is released |
failed or expired | Nothing; the hold is released |
| Declined on content grounds | Nothing |
Rejected before it starts (400, 402, 403, 429 …) | Nothing; no task, no hold |
A released task hold restores available API funds; it is not a refund of a payment to your bank or card. Read costUsd with settled on the task record for the final USD amount. See API billing.
API payment refunds
For an API funding payment or refund question, open API billing or contact support. Include the relevant payment reference or task ID, but never your API key.
Errors you may meet
| Code | Meaning | What to do |
|---|---|---|
40201 | Available API USD cannot cover this task's hold | Add funds in API billing, or lower the resolution, length or number of outputs |
40202 | The task would go over one of the key's spend caps | Raise or remove the cap in API keys, or wait for it to reset |
40901 | The price changed since your quote | Quote again and show the new USD price |
All codes are listed on Errors.
Do API calls cost more than generating on the website?
No. The same model and settings use the same price rate. API calls are billed in USD from the API balance.
Do I have to ask for a task hold to be released?
No. Failed and expired tasks release their holds automatically. Check the task's settled costUsd for the final USD amount.
Can I get a refund on an API funding payment?
For refund eligibility and help with an API payment, open API billing or contact support.

