speedrun.io API

High-performance speedrun.com mirror and native v1 API — faster responses, better availability, richer data.

Jump to

Namespaces

SRC Mirror Live

A faithful, high-performance mirror of the speedrun.com public API. Responses are carbon copies of the upstream JSON — no fields added, removed, or transformed. Use as a high-performance, low latency alternative.

🔒 The API is live. Full endpoint documentation is undergoing final review and will be posted here shortly.

Native v1 Pending

A restructured, normalized schema with fat trimmed and speedrun.io-specific fields added: run statistics, aggregate run analytics, leaderboard snapshots, and daily differential feeds. Public access with the same IP-based rate limits as /src.

🔒 Currently in developer preview. Full public docs will be posted here at release.

Developer Access Preview

Want early access to the native /v1 namespace, upcoming /src updates, and other features before they're public? Leave your email and we'll reach out as new previews open up.

Release Notes

A full changelog and release notes section is coming soon. In the meantime, current known differences from speedrun.com's API:

All other endpoints, pagination, and response formats match speedrun.com's API.

Authentication

/src Public — no authentication required
/v1 Public with IP-based rate limits. Bearer token authentication will be available at a future date.

Rate Limits

Limit 100 requests / minute
Window 60-second fixed window
Scope Per IP address
Exceeded Returns 429 with X-RateLimit-Retry-After header
Abuse detection 5 rate-limit hits within 1 hour → blacklisted for 1 hour

Caching

Games, platforms, regions, gametypes 7 days
Users, series 1 day
Runs (single) 1 day
Runs (list) 5 minutes

Response Format

All responses use application/json. Successful responses wrap the payload in a top-level data field alongside a status code.

{
  "status": 200,
  "data": { ... }
}

Error responses include an error string and a request object with debugging metadata.

400Invalid input (malformed ID, bad parameter)
403Unknown endpoint
404Valid request, record not found
429Rate limit exceeded
500Internal server error

Additional status codes apply to the /v1 namespace and will be documented alongside its public release.

Response Headers

HeaderScopeDescription
X-SRIO-Request-IDAlwaysUUID for this request
X-SRIO-PerfAlwaysHandler execution time in milliseconds
X-SRIO-TimestampAlwaysUnix timestamp of request start
X-SRIO-URIAlwaysRequest URI including query string
X-RateLimit-LimitAlways (non-exempt)Configured request limit (default 100)
X-RateLimit-RemainingAlways (non-exempt)Remaining requests in window
X-RateLimit-ResetAlways (non-exempt)Unix timestamp when window resets
X-RateLimit-ExemptExempt IPs only"true" for whitelisted IPs
X-RateLimit-Retry-After429 responses onlySeconds until retry allowed

Health Check

GET /health returns 200 OK with {"status":"ok"} for load balancer health probing. No authentication or rate limiting applies.

IDs

speedrun.com uses base36-encoded IDs for all records (e.g. ldep0513). The /src namespace mirrors these IDs as-is. The /v1 namespace uses independently generated speedrun.io IDs — source IDs are not used in /v1 endpoint URIs. A dedicated mapping endpoint for resolving a /src ID to its corresponding /v1 ID is planned; details will be published here once finalized.