Skip to content
Get your keyGet a key

Get started

Errors

Every refusal has the same shape: an HTTP status, and a code your program can switch on.

Response402 Payment Required
{
  "error": {
    "code": "insufficient_credits",
    "message": "You need 58 credits for this and have 12. Credits can be added at https://vessero.com/pricing.",
    "retryable": false,
    "requestId": "req_7Lq2XbN0vT4mKc9P"
  }
}
Response400 Bad Request
{
  "error": {
    "code": "invalid_request",
    "message": "A field is missing or not accepted.",
    "retryable": false,
    "requestId": "req_7Lq2XbN0vT4mKc9P",
    "details": {
      "issues": [
        {
          "field": "durationSec",
          "message": "Seedance 2.5 makes clips of 4 to 15 seconds."
        }
      ]
    }
  }
}

An error is { "error": { "code", "message", "retryable", "requestId", "details" } }. Switch on code, not the message, which may change. retryable says whether the same call may work if sent again later. details carries what the refusal knows as data: the fields refused, a new quote, the cap. Every answer carries X-Request-Id: quote it to support.

CodeStatusMeaning
missing_api_key401No API key was sent.
invalid_api_key401The key opens nothing: revoked, mistyped, or the API is not on for the account.
insufficient_scope403The key was not given the permission this needs.
feature_unavailable403The studio this needs is switched off for the account right now.
route_not_found404No such address in the API.
method_not_allowed405The address takes other methods.
unsupported_media_type415The body must be JSON (or a form, for a file).
payload_too_large413The body is larger than the address takes.
invalid_json400The body is not valid JSON.
invalid_request400A field is missing or not accepted: see details.
invalid_idempotency_key400An Idempotency-Key is 8–64 letters, digits, - or _.
idempotency_key_reused422This Idempotency-Key was used with a different body: make a new one.
invalid_webhook_url400webhookUrl must be a public https address.
confirm_credits_required400A run that spends needs confirmCredits: the quote is in details.
price_changed409The price is above the confirmCredits sent: nothing ran; the new quote is in details.
confirm_not_quoted409confirmCredits is above the price and was not quoted for this Idempotency-Key.
request_in_progress409A call with this Idempotency-Key is still running; it was not started again.
insufficient_credits402The account has too few credits for this.
daily_cap_reached429The key’s daily credit cap would be passed: see Retry-After.
content_refused422The content check refused it.
generation_failed422It was tried and did not come: details say whether it was charged.
not_found404Not found on this account.
conflict409It clashes with the state it is in.
forbidden403Not allowed on this account.
refused400Refused, in the app’s words: see the message.
rate_limited429Too many calls this minute: see Retry-After.
unavailable503Not available right now: try again in a while.
internal_error500Something went wrong on our side.