Skip to content

Jobs API ​

GET /v1/jobs/{job_id} — Get Job Status ​

GET /v1/jobs/{job_id}

Retrieve the current status, progress, metadata, and artifact links for a specific render job.

Path Parameters ​

ParameterTypeDescription
job_idUUIDThe job identifier returned from POST /v1/render

Response (200 OK) ​

json
{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "progress": 100.0,
  "map_title": "Kano - Prima Stella [Caged]",
  "created_at": "2026-06-08T10:00:00Z",
  "updated_at": "2026-06-08T10:05:30Z",
  "error_message": null,
  "config": {
    "skin": "Default",
    "resolution": "1080p",
    "bg_dim": 0.95,
    "motion_blur": true,
    "storyboard": true,
    "video": false,
    "snaking_in": true,
    "snaking_out": true,
    "hit_error_meter": true,
    "key_overlay": true,
    "replay_stats": {
      "300s": 1245,
      "100s": 12,
      "50s": 0,
      "misses": 1,
      "max_combo": 1847,
      "star_rating": "6.23",
      "pp": 425.8
    }
  },
  "has_analytics": true,
  "artifacts": {
    "video_url": "/v1/artifacts/videos/550e8400-e29b-41d4-a716-446655440000.mp4",
    "thumbnail_url": "/v1/artifacts/thumbnails/550e8400-e29b-41d4-a716-446655440000.jpg",
    "logs_url": "/v1/artifacts/logs/550e8400-e29b-41d4-a716-446655440000.log",
    "analytics_url": "/v1/jobs/550e8400-e29b-41d4-a716-446655440000/analytics"
  }
}

Job Status Values ​

StatusDescription
queuedJob accepted, waiting for worker dispatch
downloadingWorker is downloading replay, beatmap, and skin assets
renderingdanser-go is actively rendering the video
completedVideo rendered and uploaded, artifacts available
failedJob failed — check error_message for details

Error Response ​

StatusCondition
404Job with given ID not found

GET /v1/jobs — List Jobs ​

GET /v1/jobs

Retrieve a paginated list of all render jobs, ordered by creation time (newest first).

Query Parameters ​

ParameterTypeDefaultRangeDescription
limitint201–100Maximum number of jobs to return
offsetint0≥ 0Pagination offset
statusstring(none)—Filter by job status (queued, rendering, completed, failed)

Example ​

bash
# Get the 10 most recent completed jobs
curl "http://localhost:8727/v1/jobs?limit=10&status=completed"

Response (200 OK) ​

json
{
  "total": 142,
  "jobs": [
    {
      "job_id": "...",
      "status": "completed",
      "progress": 100.0,
      "map_title": "Kano - Prima Stella [Caged]",
      "created_at": "2026-06-08T10:00:00Z",
      "updated_at": "2026-06-08T10:05:30Z",
      "error_message": null,
      "config": {},
      "artifacts": {
        "video_url": "/v1/artifacts/videos/....mp4",
        "thumbnail_url": "/v1/artifacts/thumbnails/....jpg",
        "logs_url": "/v1/artifacts/logs/....log"
      }
    }
  ]
}

Error Masking

In production mode (DEBUG=false), error_message is replaced with a generic message: "An internal rendering error occurred." to prevent information leakage.


GET /v1/jobs/{job_id}/analytics — Get Analytics Data ​

GET /v1/jobs/{job_id}/analytics

Retrieve detailed replay analytics including timing offsets, aim coordinates, hit accuracy, and life bar tracking over the duration of the map.

Path Parameters ​

ParameterTypeDescription
job_idUUIDThe job identifier

Response (200 OK) ​

Returns a highly detailed AnalyticsResponse object containing deep inspection metrics of the player's performance.

json
{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "identity": {
    "username": "Peppy",
    "beatmap_hash": "a1b2c3d4e5f6...",
    "game_mode": "osu!standard"
  },
  "performance": {
    "score": 1234567,
    "max_combo": 1847,
    "perfect": false,
    "mods": ["Hidden", "DoubleTime"],
    "pp_earned": 425.8
  },
  "hit_counts": {
    "300s": 1245,
    "100s": 12,
    "50s": 0,
    "misses": 1,
    "geki": 140,
    "katu": 10
  },
  "life_bar": [
    { "time": 1050, "health": 1.0 },
    { "time": 2100, "health": 0.95 }
  ],
  "frames": [
    { "t": 0, "x": 256, "y": 192, "keys": 0 },
    { "t": 16, "x": 258, "y": 190, "keys": 1 }
  ]
}

Async Polling Note ​

Replay frames are extracted and uploaded to MinIO asynchronously. If the render job is still queued, downloading, or rendering, and the frame upload has not yet completed, the endpoint will return a 202 Accepted response.

StatusDescription
200 OKAnalytics data is available and returned.
202 AcceptedThe job exists, but analytics extraction is still in progress. Check back later.
404 Not FoundThe specified job does not exist, or failed before analytics could be processed.

Built with VitePress