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