Markdown · OpenAPI

API errors

Every error has this shape, with the HTTP status of its code:

{ "error": { "code": "invalid_param", "message": "max_tris must be a whole number.",
  "fix": "Use max_tris=5000", "docs": "https://3dvalley.com/docs/api/errors#invalid_param" } }

The message says what went wrong; fix, when there is one, says what to send instead. Over MCP the same error is a tool result with isError: true and the line code: message fix.

unauthorized

401. No key where one is needed, or a key that is not valid or was revoked. Make one at /account/api and send it as Authorization: Bearer 3dv_live_.... Over MCP this starts the client's sign-in.

insufficient_scope

403. The key lacks the scope: tools for anything that runs a tool. Make a key with it, or approve it when your MCP client asks (insufficient_scope).

not_found

404. No such asset, job or upload on this account. An asset that is not mirrored yet answers this from its download, with source_url.

invalid_param

400. A parameter or field that is unknown, missing or out of range. The message names it and fix lists what is valid. Also: a job that costs more than max_credits, or a missing Idempotency-Key.

insufficient_credits

402. The balance does not cover the job. Comes with balance, price and top_up (/pricing), and fix names a model the balance does cover. Nothing was charged.

spend_cap_reached

429, limit: "spend_cap". This key has spent its daily cap. Raise the cap at /account/api or wait for midnight UTC (Retry-After says how long).

rate_limited

429. Too many requests (limit: "rate", Retry-After until the window resets) or too many jobs running at once (limit: "concurrency"). A free key lifts to the paid tier's limits after one purchase.

idempotency_conflict

422 when the Idempotency-Key was used with a different body: use a new key for a new job. 409 while the first request with that key is still being processed: wait a moment and send it again. details.job_id names the job.

conflict

409. The job is running and cannot be canceled, or the upload already has its file.

input_rejected

422. An input that cannot be used: a URL that does not answer, a picture or mesh that cannot be read, a moderation refusal. Change the input; sending the same one again fails the same way. Nothing was charged.

provider_failed

502. The model's provider failed after we retried. The credits for that stage were given back. Try again later or with another model.

unavailable

503. The model or feature cannot run on this server right now. Nothing was charged.