LLumoris/ api
v1
05Async

Jobs & images

Generation is asynchronous. Submit, poll, then download. Jobs are stored in memory and evicted beyond the 12 most recent.

queued
doneoutputs[] present
failederror message set
cancelledvia /jobs/:id/cancel
  • Pull-based

    GET /jobs/:id performs the upstream poll and returns the freshest state.

  • In-memory

    The job store lives in memory; restarting the server wipes jobs.

  • Capped

    Oldest jobs are evicted beyond the 12 most recent.

  • Proxied

    Output URLs are served through the API, upstream presigned URLs stay hidden.

{
  "id": "3f2a...",
  "status": "done",           // queued | done | failed | cancelled
  "model": "gpt-image-2.5-flare",
  "prompt": "a red fox in snow",
  "createdAt": 1739000000000, // epoch ms
  "latencyMs": 12300,         // null while queued
  "progress": 100,            // 0..100
  "outputs": [
    {
      "index": 0,
      "seed": 441293,
      "url": "/v1/images/3f2a.../0",  // /v1/videos/3f2a.../0 for video outputs
      "width": 1024,
      "height": 1024,
      "contentType": "image/png",
      "bytes": 624797
    }
  ],
  "error": null,
  "raw": { ... }
}
GET/v1/jobs

List jobs

List recent jobs, newest first. Jobs are kept in memory (max 12).

sync
No parameters.
curl https://api-studio.lumorislabs.com/v1/jobs \
  -H "Authorization: Bearer sk-lumoris-..." \
  -H "Content-Type: application/json"
{ "jobs": [ <job>, ... ] }
GET/v1/jobs/:id

Poll job

Poll a job. Calling this advances queued jobs (polls upstream).

poll
No parameters.
curl https://api-studio.lumorislabs.com/v1/jobs/:id \
  -H "Authorization: Bearer sk-lumoris-..." \
  -H "Content-Type: application/json"
{
  "id": "3f2a...",
  "status": "queued",
  "model": "gpt-image-2.5-flare",
  "prompt": "a red fox in snow",
  "createdAt": 1739000000000,
  "latencyMs": null,
  "progress": 45
}
POST/v1/jobs/:id/cancel

Cancel job

Cancel a queued or in-flight job. 400 if no cancel link exists for the job.

sync
No parameters.
curl https://api-studio.lumorislabs.com/v1/jobs/:id/cancel \
  -X POST \
  -H "Authorization: Bearer sk-lumoris-..." \
  -H "Content-Type: application/json"
{ "status": 200 }
DELETE/v1/jobs

Clear jobs

Clear the job log.

sync
No parameters.
curl https://api-studio.lumorislabs.com/v1/jobs \
  -X DELETE \
  -H "Authorization: Bearer sk-lumoris-..." \
  -H "Content-Type: application/json"
{ "ok": true }
GET/v1/images/:jobId/:idx

Download output

Output bytes for index :idx of :jobId. Images via /images/:jobId/:idx, videos via /videos/:jobId/:idx. Proxied, so upstream presigned URLs stay hidden.

binary
No parameters.
curl https://api-studio.lumorislabs.com/v1/images/:jobId/:idx \
  -H "Authorization: Bearer sk-lumoris-..." \
  -H "Content-Type: application/json"
<image/png | video/mp4 bytes>
Cache-Control: private, max-age=86400