Skip to content

Reference

REST API

Every endpoint in /api/v1, rendered from the live OpenAPI document.

This page is generated from the OpenAPI 3.1 document at /api/v1/openapi.json, so it lists exactly what the server implements: 49 operations. Point any OpenAPI tool at that URL for client generation or a Postman collection.

Base URL#

base
https://lumorig.com/api/v1

Self-hosted servers use their own origin (MF_PUBLIC_URL). Every request needs Authorization: Bearer lr_sk_… except the ones marked no key needed. See Authentication.

ConventionDetail
BodiesJSON (Content-Type: application/json). Uploads also take multipart/form-data.
Lists{ "object": "list", "data": [ … ] }
Deletes{ "id": "…", "object": "…", "deleted": true }
Long work202 with a Job. Poll GET /jobs/{id}?wait=60, stream /jobs/{id}/events, or use a webhook.
Errors{ "error": { "code", "message", "details" } }, see Errors.
IdsPrefixed: msc_ mascot, anm_ animation, cnv_ canvas, ver_ version, job_, file_, whk_, key_.

Mascots#

List mascots#

GET/mascots

Response · 200

Mascots

List mascots response
FieldTypeNotes
object"list"
dataMascot[]

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create a mascot#

POST/mascots

prompt designs a new mascot; upload_id/image_url rebuilds an existing one as a rigged vector; spec imports a MascotSpec directly (synchronous, 201).

Request body

One of 2 shapes:

Option 1 · prompt, style…

Create a mascot body, option 1
FieldTypeNotes
promptstring3–2000 chars
stylestring0–400 chars
upload_idstring
image_urlstring (uri)
namestring0–80 chars
notesstring0–1000 chars
detail"standard" | "high"high: richer rendering at a higher credit price
max_cost_usdnumber> 0

Option 2 · with spec

Create a mascot body, option 2
FieldTypeNotes
specrequiredMascotSpec
namestring

Response · 202

Mascot and its generation job

Create a mascot response
FieldTypeNotes
mascotMascot
jobJob

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"a sleepy moth who guards the docs","style":"outlined"}'

Get a mascot#

GET/mascots/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
include"spec" · query

Response · 200

Mascot

A Mascot object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123?include=spec" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Update a mascot#

PATCH/mascots/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Update a mascot body
FieldTypeNotes
namestring
publicboolean

Response · 200

Mascot

A Mascot object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X PATCH "https://lumorig.com/api/v1/mascots/msc_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"public":true}'

Delete a mascot#

DELETE/mascots/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Response · 200

Deleted

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X DELETE "https://lumorig.com/api/v1/mascots/msc_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Get the MascotSpec#

GET/mascots/{id}/spec

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
versionstring · query

Response · 200

Spec

A MascotSpec object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/spec" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Replace the MascotSpec (new version)#

PUT/mascots/{id}/spec

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

A MascotSpec object.

Response · 200

Mascot

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X PUT "https://lumorig.com/api/v1/mascots/msc_123/spec" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d @spec.json

Recolor (instant)#

POST/mascots/{id}/recolor

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Recolor (instant) body
FieldTypeNotes
paletterequiredrecord<string, string>

Response · 200

Mascot

A Mascot object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/recolor" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"palette":{"body":"#3a5bff"}}'

Edit by instruction#

POST/mascots/{id}/edit

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Edit by instruction body
FieldTypeNotes
instructionrequiredstring
max_cost_usdnumber

Response · 202

Job

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/edit" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"instruction":"make the antennae longer"}'

Create a rig-compatible look variant#

POST/mascots/{id}/variants

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Create a rig-compatible look variant body
FieldTypeNotes
namerequiredstring
instructionrequiredstring

Response · 202

Job

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/variants" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"winter","instruction":"wearing a knitted scarf"}'

List versions#

GET/mascots/{id}/versions

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Response · 200

Versions

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/versions" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Restore a version#

POST/mascots/{id}/versions/{versionId}/restore

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
versionIdrequiredstring · path

Response · 200

Mascot

A Mascot object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/versions/ver_123/restore" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Render a still#

GET/mascots/{id}/preview

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
formatstring · query
animationstring · query
tnumber · query
sizenumber · query
vstring · query

Response · 200 · image/png, image/svg+xml

Image

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/preview?format=png&animation=wave&t=0.4&size=512" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Player bundle for <lumorig-player>#

GET/mascots/{id}/bundleno key needed

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
tokenstring · querySigned share token for private mascots

Response · 200

Bundle

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/bundle"

Create an expiring share link#

POST/mascots/{id}/share

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Create an expiring share link body
FieldTypeNotes
ttl_secondsinteger

Response · 200

Share link

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/share" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ttl_seconds":86400}'

Mascot concepts from a website#

POST/analyze

Request body

Mascot concepts from a website body
FieldTypeNotes
urlrequiredstring (uri)

Response · 202

Job (result: brand analysis + 3 concepts)

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/analyze" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

Animations#

List animations#

GET/mascots/{id}/animations

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Response · 200

Animations

List animations response
FieldTypeNotes
object"list"
dataAnimation[]

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/animations" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create an animation#

POST/mascots/{id}/animations

preset is instant and free (201). prompt runs the motion designer (202 + job). reference_upload_id (an uploaded MP4/MOV/WebM) makes the mascot perform the motion in the video (202 + job). clip saves a hand-authored AnimationClip.

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

One of 4 shapes:

Option 1 · with preset

Create an animation body, option 1
FieldTypeNotes
presetrequiredenum (15 values)idle, wave, nod, shake, bounce, celebrate, jump, talk, sad, surprised, dance, think, working, listen, sleep
intensitynumber0.25–2
durationnumber0.3–20
namestring0–60 chars

Option 2 · with prompt

Create an animation body, option 2
FieldTypeNotes
promptrequiredstring3–1000 chars
durationnumber0.3–20
namestring0–60 chars
max_cost_usdnumber> 0

Option 3 · with clip, name

Create an animation body, option 3
FieldTypeNotes
cliprequiredany
namerequiredstring0–60 chars

Option 4 · with reference_upload_id

Create an animation body, option 4
FieldTypeNotes
reference_upload_idrequiredstringAn uploaded MP4/MOV/WebM whose motion the mascot should perform
promptstring0–1000 chars
durationnumber0.3–12
namestring0–60 chars
max_cost_usdnumber> 0

Response · 201

Animation (preset/clip) or {job} (prompt)

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/animations" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"preset":"wave","intensity":1.2}'

Get an animation (with clip)#

GET/mascots/{id}/animations/{animationId}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
animationIdrequiredstring · path

Response · 200

Animation

A Animation object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/animations/anm_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Delete an animation#

DELETE/mascots/{id}/animations/{animationId}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
animationIdrequiredstring · path

Response · 200

Deleted

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X DELETE "https://lumorig.com/api/v1/mascots/msc_123/animations/anm_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create several described animations#

POST/mascots/{id}/animations/batch

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Create several described animations body
FieldTypeNotes
promptsrequiredstring[]max 8 items
durationnumber

Response · 202

Jobs

Create several described animations response
FieldTypeNotes
object"list"
dataJob[]

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/animations/batch" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompts":["hops twice, then bows","peeks out from behind the desk"]}'

Suggest signature animations#

POST/mascots/{id}/suggestions

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Suggest signature animations body
FieldTypeNotes
use_casestring

Response · 200

Finished job (result.suggestions)

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/suggestions" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"use_case":"docs site helper that appears on empty search results"}'

Exports#

Create an illustrated vector scene#

POST/mascots/{id}/scenes

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Create an illustrated vector scene body
FieldTypeNotes
promptrequiredstring
size"square" | "wide" | "banner" | "portrait"
animationstring
tnumber
max_cost_usdnumber

Response · 202

Job (result.svg, result.png)

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/scenes" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"cozy desk at night, leave the left half calm for copy","size":"wide"}'

Export#

POST/mascots/{id}/exports

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Export body
FieldTypeNotes
formatrequiredenum (13 values)gif, mp4, webm, webp, apng, sprite, lottie, animated-svg, png, svg, sticker, logo, logo-png
animationstring
sizeinteger64–2048
fpsinteger6–60
backgroundstringpattern ^#[0-9a-fA-F]{6}$
tnumber≥ 0
version_idstring

Response · 202

Job (result.file)

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/exports" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"format":"lottie","animation":"wave"}'

Download a file#

GET/files/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path
downloadstring · query

Response · 200

File bytes

curl
curl "https://lumorig.com/api/v1/files/file_123?download=1" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -o mascot.json

Canvases#

List canvases#

GET/mascots/{id}/canvases

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Response · 200

Canvases

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/mascots/msc_123/canvases" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create a canvas#

POST/mascots/{id}/canvases

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)

Request body

Create a canvas body
FieldTypeNotes
namerequiredstring
template"chatbot" | "ai_agent" | "onboarding"
graphCanvasGraph

Response · 201

Canvas

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/mascots/msc_123/canvases" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"assistant","template":"chatbot"}'

Update a canvas#

PATCH/mascots/{id}/canvases/{canvasId}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
canvasIdrequiredstring · path

Request body

Update a canvas body
FieldTypeNotes
namestring
graphCanvasGraph

Response · 200

Canvas

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X PATCH "https://lumorig.com/api/v1/mascots/msc_123/canvases/cnv_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"helper"}'

Delete a canvas#

DELETE/mascots/{id}/canvases/{canvasId}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · pathMascot id (msc_…)
canvasIdrequiredstring · path

Response · 200

Deleted

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X DELETE "https://lumorig.com/api/v1/mascots/msc_123/canvases/cnv_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Jobs#

List jobs#

GET/jobs

Parameters

Parameters
FieldTypeNotes
statusstring · query
typestring · query
mascot_idstring · query
limitstring · query

Response · 200

Jobs

List jobs response
FieldTypeNotes
object"list"
dataJob[]

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/jobs" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Get a job (long-poll with ?wait=seconds, max 120)#

GET/jobs/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path
waitinteger · query≤ 120

Response · 200

Job

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/jobs/job_123?wait=60" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Stream job events (SSE)#

GET/jobs/{id}/events

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path
afterinteger · query

Response · 200 · text/event-stream

text/event-stream: queued, started, progress, tool_call, tool_input_delta, draft, usage, finished

curl
curl -N "https://lumorig.com/api/v1/jobs/job_123/events" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Cancel a job#

POST/jobs/{id}/cancel

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path

Response · 200

Job

A Job object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/jobs/job_123/cancel" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Uploads#

Upload an image#

POST/uploads

Request body · multipart/form-data or application/json

multipart/form-data

Upload an image body
FieldTypeNotes
filestring (binary)

application/json

Upload an image body
FieldTypeNotes
urlstring (uri)

Response · 201

Uploaded file

A File object.

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/uploads" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -F "file=@./mascot.png"

Webhooks#

List webhooks#

GET/webhooks

Response · 200

Webhooks

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/webhooks" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create a webhook#

POST/webhooks

Deliveries are signed: Lumorig-Signature: t=<unix>,v1=<hex HMAC-SHA256 of "t.body">.

Request body

Create a webhook body
FieldTypeNotes
urlrequiredstring (uri)
events"job.succeeded" | "job.failed" | "job.canceled" | "*"[]items: job.succeeded, job.failed, job.canceled, *

Response · 201

Webhook (secret shown once)

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/webhooks" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your.app/hooks/lumorig","events":["job.succeeded","job.failed"]}'

Delete a webhook#

DELETE/webhooks/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path

Response · 200

Deleted

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X DELETE "https://lumorig.com/api/v1/webhooks/whk_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Workspace#

Get the current workspace#

GET/workspace

Name, plan, your role and seats (limit, members, pending, used, available). With an API key: the key's workspace. With a studio session: the active workspace (the Lumorig-Workspace header selects another one you belong to).

Response · 200

Workspace

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/workspace" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

List members#

GET/workspace/members

Response · 200

Members (owner first)

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/workspace/members" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

List pending invites#

GET/workspace/invites

Admins and the owner. Studio session only.

Response · 200

Invites

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/workspace/invites" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Invite someone by email#

POST/workspace/invites

Studio session only (API keys get 403 session_required). A pending invite holds a seat for 7 days; beyond the plan's seats the response is 402 seat_limit with details: { seats, used, members, pending }.

Request body

Invite someone by email body
FieldTypeNotes
emailrequiredstring (email)
role"member" | "admin"

Response · 201

Invite and its link (shown once)

Invite someone by email response
FieldTypeNotes
inviteobject
invite_urlstring

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/workspace/invites" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"…"}'

Account#

Revoke an API key#

DELETE/keys/{id}

Parameters

Parameters
FieldTypeNotes
idrequiredstring · path

Response · 200

Revoked

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X DELETE "https://lumorig.com/api/v1/keys/key_123" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

List API keys#

GET/keys

Response · 200

Keys

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/keys" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Create an API key#

POST/keys

Request body

Create an API key body
FieldTypeNotes
namestring

Response · 201

Key (shown once)

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl -X POST "https://lumorig.com/api/v1/keys" \
  -H "Authorization: Bearer $LUMORIG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"CI"}'

Usage and spend#

GET/usage

Response · 200

Usage

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/usage" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Credit balance, plan, and per-action prices#

GET/credits

Model-backed jobs hold credits up front and refund them on failure. Without enough credits they return 402 insufficient_credits.

Response · 200

Credits

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/credits" \
  -H "Authorization: Bearer $LUMORIG_API_KEY"

Catalog#

List animation presets#

GET/presetsno key needed

Response · 200

Presets

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/presets"

List style presets#

GET/stylesno key needed

Response · 200

Styles

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/styles"

List canvas templates#

GET/canvas-templatesno key needed

Response · 200

Templates

object

Errors: 400 · 401 · 404 → ErrorResponse

curl
curl "https://lumorig.com/api/v1/canvas-templates"

Schemas#

Shared objects referenced above. The full MascotSpec and AnimationClip formats are explained in MascotSpec & AnimationClip.

MascotSpec#

MascotSpec fields
FieldTypeNotes
specVersionrequired1
namerequiredstring1–∞ chars
descriptionrequiredstring
archetyperequired"biped" | "quadruped" | "blob" | "winged" | "object" | "custom"
canvasrequiredobject
paletterequiredobject[]
partsrequiredobject[]
anchorsrequiredobject[]

AnimationClip#

AnimationClip fields
FieldTypeNotes
clipVersionrequired1
namerequiredstring1–∞ chars
durationrequirednumberSeconds0.2–20
looprequiredboolean
tracksrequiredobject | object[]
modifiersrequiredobject | object | object[]

CanvasGraph#

CanvasGraph fields
FieldTypeNotes
canvasVersionrequired1
inputsrequiredobject[]
statesrequiredobject[]
initialrequiredstringpattern ^[a-z][a-z0-9_]*$
transitionsrequiredobject[]

ErrorResponse#

ErrorResponse fields
FieldTypeNotes
errorobject

File#

File fields
FieldTypeNotes
idstring
object"file"
kindstring
mimestring
bytesinteger
urlstring
created_atstring

Job#

Job fields
FieldTypeNotes
idstring
object"job"
typeenum (9 values)generate, reconstruct, edit, variant, animate, export, analyze, suggest, scene
status"queued" | "running" | "succeeded" | "failed" | "canceled"
mascot_idstring | null
resultany
errorstring | null
cost_usdnumber
created_atstring
started_atstring | null
finished_atstring | null

Animation#

Animation fields
FieldTypeNotes
idstring
namestring
source"preset" | "prompt" | "custom"
presetenum (15 values)idle, wave, nod, shake, bounce, celebrate, jump, talk, sad, surprised, dance, think, working, listen, sleep
durationnumber
loopboolean
clipAnimationClip

Mascot#

Mascot fields
FieldTypeNotes
idstring
object"mascot"
namestring
status"generating" | "ready" | "failed"
source"prompt" | "image" | "svg"
fidelitynumber | nullRebuild similarity to the upload (0–1)
needs_reviewboolean
paletteobject[]
partsobject[]
animationsAnimation[]
preview_urlstring | null
bundle_urlstring

ExportFormat#

"gif" | "mp4" | "webm" | "webp" | "apng" | "sprite" | "lottie" | "animated-svg" | "png" | "svg" | "sticker" | "logo" | "logo-png"