Skip to content

API reference

Base URL:

https://api.cinevva.com/v1

All requests and responses are JSON, and all field names are snake_case. Send Content-Type: application/json on any request with a body, and your key as Authorization: Bearer ck_live_... (see authentication).

Endpoints

EndpointDescription
POST /v1/rigsRig a mesh
POST /v1/modelsGenerate a 3D model from an image
GET /v1/jobs/{id}Poll any job
GET /v1/jobsList your jobs
GET /v1/animationsList the CC0 clip catalog
GET /v1/assetsSearch the CC0 asset library
GET /v1/assets/categoriesCategories and packs
GET /v1/formatsSupported input and output formats
GET /v1/accountPlan, balance, rate limit, recent usage

Not everything is an HTTP endpoint. The MCP server exposes the same rigging and asset capabilities to AI agents, and optimization and format conversion are browser tools with no API today.

Access

The API requires an active Standard or Pro subscription. A key on a free account authenticates but every call returns 402 subscription_required. See pricing.

Everything long-running is a job

Rigging and generation both return a job: the same object, the same four statuses, the same polling endpoint. Write the waiting logic once and it serves every operation, including ones added later.

StatusMeaningTerminal
queuedAccepted, waiting for a workerno
processingRunningno
succeededDone, output is populatedyes
failedDid not complete, error explains whyyes

Internal states are collapsed into this set, so a new one appearing upstream cannot break your client. operation is likewise a stable verb rather than a vendor name, so changing the engine behind an operation is not a breaking change.

Errors

Errors carry a machine-readable code alongside a human-readable message. Branch on code; show message.

json
{
  "error": {
    "code": "insufficient_credits",
    "message": "Your balance does not cover this rig."
  }
}
CodeStatusMeaning
unauthorized401Missing, invalid, or revoked API key
forbidden403Key is valid but does not own this resource
not_found404No such rig or endpoint
invalid_request400Malformed body or an unknown parameter value
unsupported_format400The mesh could not be read
insufficient_credits402Balance will not cover the rig
subscription_required402No active Standard or Pro subscription
plan_required402Engine requires a higher plan
rate_limited429Over the per-minute limit; see rate limits
backend_unavailable503Rigger is at capacity or temporarily down; retry
internal_error500Our fault. Retry, and tell us if it persists

Full detail and handling advice on the errors page.

Rate limits

Authenticated responses carry X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. The limit is 60 requests per minute per key. See rate limits.

Versioning

The version is in the path. /v1 will not change field meanings or remove fields once documented. New optional fields may be added to responses, so parse leniently and ignore what you do not recognise.

CORS

/v1 responds with Access-Control-Allow-Origin: * and does not accept cookies. It is built for server-to-server use. Do not call it from a browser with a real key: anything shipped to a browser is public. Proxy through your own backend instead.