{ "error": "..." } body. Extra diagnostic fields only appear on some codes.
400 — request rejected
400 — request rejected
The request body could not be read or did not pass validation. No job is created and no credits are deducted.
401 — authentication failed
401 — authentication failed
Never repeat a
401 request blindly. Fix the credentials first.402 — not enough credits
402 — not enough credits
requiredCredits with the estimated price from the catalog before sending a batch.403 — not your job
403 — not your job
GET /api/v1/jobs/{id} uses an id belonging to another account — usually a hardcoded id, or the key in use changed. Your own jobs never hit this code.413 — file too large
413 — file too large
429 — capacity
429 — capacity
Three different causes, each with its own body shape:All concurrent slots used (Unlimited account)Daily video quota exhaustedServer queue full / uploads too frequentOn
POST /api/v1/upload, the response carries a Retry-After header in seconds. Honor its value.500 — failure on the Vidgen side
500 — failure on the Vidgen side
503 — cannot be processed right now
503 — cannot be processed right now
Use exponential backoff and keep the same
idempotencyKey.Failures that arrive as failed, not as an HTTP status
These cases show up later, in the errorMessage of GET /api/v1/jobs/{id}. Credits were deducted and then refunded, so check the creditsCharged value that is left at 0.
errorMessage values are deliberately in English in the API response. Translate them into your UI language, but do not change their meaning when showing them to an end user.