organization_wallet_not_provisioned vs insufficient_credits (402)
A Format run can fail at create with 402 for two reasons: an empty wallet or an unfunded organization wallet. How to tell them apart and who fixes each.

Both are 402 on create and both mean nothing ran. insufficient_credits says the workspace wallet cannot fund the run, so top it up; organization_wallet_not_provisioned says an organization workspace has no funded wallet at all, so an admin has to fund it. The distinction matters because the person who sees the error is rarely the person who can fix it.
What are the two 402 codes?
The Formats errors page lists the wallet as the gate that applies at create. The workspace must be able to fund the run, or the create fails before anything is spent.
The first code is for a workspace that exists and is funded but is too low. The second is for an organization workspace that has never been given a wallet.
| Code | Meaning | Who acts | Did anything run? |
|---|---|---|---|
| insufficient_credits | Workspace cannot fund the run | Whoever owns the balance adds funds (next_action add_funds) | No |
| organization_wallet_not_provisioned | Organization workspace with no funded wallet | An admin funds it | No |
Why does a team key matter here?
A Format owned by a team workspace is invoked with an API key created in that workspace. The docs state the rule "follows the money": the team Format's runs bill the team wallet, count against the team's generation concurrency, and read media through the team workspace. A personal key held by a team member is refused with 403 workspace_key_required, which is a different error from either 402.
The changelog for v0.2.59 lists "Org / team pooled wallet and team concurrency controls", which is the feature this error belongs to. If you are the engineer and not the admin, the useful move is to send the admin the workspace id and the code, not the key.
How should a client handle both?
Branch on error.code, not on the status alone. Retrying a 402 will not help; the same idempotency key is released after a failed create, so once the wallet is funded you can resend the identical request and get the run.
The snippet below maps the two codes to the right owner. It only reads error.code, which is the documented envelope field.
import json, urllib.error, urllib.request
OWNER = {
"insufficient_credits": "top up the workspace balance",
"organization_wallet_not_provisioned": "ask an org admin to fund the wallet",
}
def explain(req: urllib.request.Request) -> str:
try:
urllib.request.urlopen(req, timeout=30)
return "accepted"
except urllib.error.HTTPError as e:
if e.code != 402:
return f"HTTP {e.code}"
code = json.load(e).get("error", {}).get("code", "")
return OWNER.get(code, f"402 {code}")What does this not tell you?
It does not tell you how much to add. For that, read the rate card, size the run's spend cap, and check GET /v1/balance. A wallet that clears the create gate can still hit the run's own spend cap later, which ends the run as failed, and the two controls are separate: see Spend caps.
Sources
Related posts
More in Pricing
- Per-second lip-sync and motion bands: Fabric, H3 Max, Kling on Sume
Fabric holds up to $56.25, H3 Max lip-sync up to $3.00 and Kling motion control up to $4.73. Read the catalog bands and the per-second rates behind them.
- Pika commercial license: Creator has it, Starter and Free do not
Pika's pricing page lists a commercial license on Creator and above, none on Free or Starter. What that means for client work, and what Sume's paid plans say.
- Pika credit packs: 60 credits per dollar, from $25 for 1,500
Pika sells one-time credit packs at 60 credits per dollar, from $25 for 1,500 to $1,000 for 66,000. How packs differ from a plan, and how Sume top-ups work.
- Pika Seedance 2.5 clip cost: 122 credits is $1.36 on a plan
Pika lists Seedance 2.5 at 122 credits for a 720p 5-second clip: about $1.36 at plan rates, $2.03 on credit packs. The math, and how Sume prices the same model.
Written by Sume