Skip to content

API Overview

The OsuRender API follows RESTful conventions with a versioned endpoint structure. All modern endpoints are prefixed with /v1/.

Base URL

http://localhost:8727

In production, the API is served behind Cloudflare at your configured API_BASE_URL.

Versioning

PrefixStatusDescription
/v1/ActiveCurrent stable API
/ (root)LegacyBackward-compatible endpoints for the monolithic application

Content Types

EndpointRequest TypeResponse Type
POST /v1/rendermultipart/form-dataapplication/json
POST /v1/skins/uploadmultipart/form-dataapplication/json
All other endpointsapplication/json

Request IDs

Every request is assigned a correlation ID for tracing. You can provide your own:

X-Request-ID: my-custom-id

If omitted, the API generates an 8-character UUID. The ID is returned in the response header:

X-Request-ID: a1b2c3d4

Job creation responses include navigable links:

json
{
  "job_id": "550e8400-...",
  "status": "queued",
  "links": {
    "status": "/v1/jobs/550e8400-..."
  }
}

Interactive Documentation

Below is the live Swagger UI playground. You can use it to test endpoints directly from your browser.

You can also view the ReDoc format or download the OpenAPI Spec.

Authentication

Currently, the API does not require authentication tokens. Access control is managed through:

  • Rate limiting per IP (via CF-Connecting-IP or remote address)
  • Per-IP concurrency limits (max 2 active jobs)
  • Global queue circuit breakers (max 100 queued, max 20 rendering)

See Rate Limiting for details.

Endpoint Summary

MethodEndpointDescriptionRate Limit
GET/healthHealth check
POST/v1/renderSubmit replay for rendering5/min
GET/v1/jobs/{job_id}Get job status
GET/v1/jobsList all jobs (paginated)
POST/v1/jobs/{job_id}/webhookModal completion callback
GET/v1/skinsList available skins
POST/v1/skins/uploadUpload a custom skin2/min
GET/v1/artifacts/{key}Download/stream artifacts

Built with VitePress