PopNowAPI Docs
Main content

Credits and billing

How API calls spend credits, how holds and final charges work, quotes before you run, balance, usage and spend caps.

The API spends the same credits as popnow.ai. There is no separate API plan, no subscription and no minimum: buy a credit pack when you need more, and the free credits you received at sign-up work here too.

  • 1 credit = $0.01 at the base rate. Larger packs include bonus credits, so each credit costs you a little less.
  • Prices are per model and per option — per image, per second of video or audio, per request, or per 1,000 characters of speech. Each model's page lists them.
  • Responses give every amount twice: as whole credits (credits, maxCredits, availableCredits …) and as a US dollar string (cost, maxCharge, available …). Use the credit fields; the dollar strings are there for accounting.

How one task is charged

hold
settlerelease
Credits are held when the task is accepted, then resolved exactly once: settled against actual usage, or released in full.
  1. Hold. When createTask accepts a task, the highest price it can reach is set aside from your balance (estimatedCredits). Held credits cannot be spent twice, but they are not charged yet.
  2. Settle or release. When the task finishes:
    • succeeded → you pay what it actually used, rounded up to whole credits and never more than the hold. The rest of the hold returns to your balance.
    • failed or expired → the whole hold is released. You pay nothing.

The task record shows where it stands: while settled is false, credits is the hold; once settled is true, credits is the final charge.

A few models charge for a request their maker refused on content grounds. When that applies, the model's page says so; everywhere else, failure is free.

SituationCharged?
createTask rejected (400, 402, 403, 429, 50301 …)No — no task, no hold
Task succeededYes, the actual amount, capped at the hold
Task failed or expiredNo, except the content-refusal case above
Your connection dropped after sendingUnknown until you check — resend with the same Idempotency-Key to find the task
Reading tasks, models, balance or usageNever

Ask the price first

POST /api/v1/jobs/quote takes exactly the body you would send to createTask and returns the price without creating anything or holding credits:

curl -X POST "https://api.popnow.ai/api/v1/jobs/quote" \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "alibaba/wan-3.0/image-to-video", "input": {"image_url": "https://media.popnow.ai/movie/lighthouse.webp", "resolution": "720p", "duration_seconds": 5}}'
{
  "code": 200,
  "msg": "success",
  "data": {
    "quoteId": "q_…",
    "model": "alibaba/wan-3.0/image-to-video",
    "maxCredits": 68,
    "expectedCredits": 68,
    "estimatedCost": "0.68",
    "maxCharge": "0.68",
    "currency": "USD",
    "quantity": "5",
    "unit": "per_second",
    "expiresAt": "2026-10-16T09:25:00Z"
  },
  "request_id": "req_…"
}

maxCredits is the most the request can cost — the amount that will be held. expectedCredits is what it usually costs; the two differ only when the final charge depends on the output, such as a clip's real length.

To make sure the price does not change between showing it to a user and running the task, pass quoteId and expectedCredits (the maxCredits you showed) in createTask within five minutes. If anything changed, createTask answers 40901 and nothing is held; quote again.

Balance

curl "https://api.popnow.ai/api/v1/chat/credit" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

availableCredits is what new tasks can use, heldCredits is set aside for running tasks, and totalCredits is both together (available, held and total give the same amounts in US dollars). The path name is historical; it has nothing to do with chat. When the available balance cannot cover a new task's hold, createTask returns 40201.

Usage

GET /api/v1/usage?from=2026-10-01&to=2026-10-16 returns, for the key you call it with, the number of tasks, how many succeeded and failed, and what they cost in credits — in total (totalCredits), per day and per model. Dates are UTC, to is exclusive and the range is at most 92 days. Only settled charges count, so a day's total can still move while late tasks finish. This report is limited to 30 requests per minute; for the whole account, use the usage page in the API console.

Spend caps

Each key can have a daily, monthly and lifetime cap, set in the API console and shown in credits. A request that would go over a cap returns 40202 and holds nothing. Daily caps reset at 00:00 UTC, monthly caps on the 1st of the month at 00:00 UTC, and a lifetime cap never resets. Keys have no caps unless you add them.

Buying credits and refunds

Credits are bought on the website, not through the API. Packs and prices are on the pricing page; the refund policy explains what can be refunded and when.

On this page