跳到主要内容

API Contract

All routes live under /v1 and return JSON. Errors use this shape:

{
"error": {
"code": "PLAYER_NOT_FOUND",
"message_key": "errors.playerNotFound",
"request_id": "req_..."
}
}

Implemented Worker route surface:

  • GET /v1/health
  • GET /v1/meta/options
  • GET /v1/search/players?q=
  • GET /v1/players/:mode/:tenhou_name?range=
  • GET /v1/players/:mode/:tenhou_name/summary?range=
  • GET /v1/players/:mode/:tenhou_name/daily?range=&from=&to=
  • GET /v1/players/:mode/:tenhou_name/games?cursor=&limit=
  • GET /v1/players/:player_id
  • GET /v1/players/:player_id/summary?mode=&range=
  • GET /v1/players/:player_id/daily?mode=&range=&from=&to=
  • GET /v1/players/:player_id/games?mode=&cursor=&limit=
  • GET /v1/games?mode=&range=&room=&q=&from=&to=&cursor=&limit=
  • GET /v1/games/:game_id
  • GET /v1/games/:game_id/replay-link
  • GET /v1/rankings/:ranking_type?mode=&range=&limit=
  • GET /v1/stats/global?mode=&range=&from=&to=
  • GET /v1/status/coverage
  • GET /v1/status/pipeline

List endpoints cap limit at 100.

Frontend-aligned controls are exposed by /v1/meta/options: modes, ranges, room filters, ranking fields, and locale entry points. Current mode path segments are 4 and 3, matching web routes such as /players/4/:tenhou_name.

/v1/games is the API counterpart to the web match browser. It returns paginated game summaries with seated players, next_cursor, and total, but does not expose mjlog XML bulk-download paths.