PopNowAPI Docs
API balance and billing
Main content

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/quote returns expectedChargeUsd and maxChargeUsd as USD decimal strings without starting a task.
  • Read the settled amount. A task's costUsd is its final USD charge when settled is true. 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 surfacePaid from
REST or compatible API with a sk-popnow- keyAPI balance
Playground on an API model pageAPI balance
Developer MCP with an API keyAPI balance
Saved recipe runs through the API or the developer MCPAPI 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:

ModelWhat you getUSD
Z-Image TurboOne image$0.01
Nano Banana 2.1One image at 1K / 2K / 4K$0.048 / $0.072 / $0.162
Seedream 5.0 ProOne image at 1K / 2K$0.036 / $0.072
MiniMax H3Image to video, 768p, 5 seconds$0.185
Suno v6One song$0.072
Background RemoverOne transparent PNG$0.0048
Image UpscalerOne 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}}'
Python
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")
JavaScript
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:

OutcomeWhat you pay
succeededThe actual USD charge, never more than the hold; the unused amount is released
failed or expiredNothing; the hold is released
Declined on content groundsNothing
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

CodeMeaningWhat to do
40201Available API USD cannot cover this task's holdAdd funds in API billing, or lower the resolution, length or number of outputs
40202The task would go over one of the key's spend capsRaise or remove the cap in API keys, or wait for it to reset
40901The price changed since your quoteQuote 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.

On this page