Files
OpenFrontIO/API.md
T
2025-11-18 12:19:16 -08:00

209 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API Usage
## Games
### List Game Metadata
Get game IDs and basic metadata for games that started within a specified time range. Results are sorted by start time and paginated.
**Constraints:**
- Maximum time range: 2 days
- Maximum limit per request: 1000 games
**Endpoint:**
```
GET https://api.openfront.io/public/games
```
**Query Parameters:**
- `start` (required): ISO 8601 timestamp
- `end` (required): ISO 8601 timestamp
- `type` (optional): Game type, must be one of `[Private, Public, Singleplayer]`
- `limit` (optional): Number of results (max 1000, default 50)
- `offset` (optional): Pagination offset
**Example Request:**
```bash
curl "https://api.openfront.io/public/games?start=2025-10-25T00:00:00Z&end=2025-10-26T23:59:59Z&type=Singleplayer&limit=10&offset=5"
```
**Response:**
```json
[
{
"game": "ABSgwin6",
"start": "2025-10-25T00:00:10.526Z",
"end": "2025-10-25T00:19:45.187Z",
"type": "Singleplayer",
"mode": "Free For All",
"difficulty": "Medium"
}
]
```
The response includes a `Content-Range` header indicating pagination (e.g., `games 5-15/399`).
---
### Get Game Info
Retrieve detailed information about a specific game.
**Endpoint:**
```
GET https://api.openfront.io/public/game/:gameId
```
**Query Parameters:**
- `turns` (optional): Set to `false` to exclude turn data and reduce response size
**Examples:**
```bash
# Full game data
curl "https://api.openfront.io/public/game/ABSgwin6"
# Without turn data
curl "https://api.openfront.io/public/game/ABSgwin6?turns=false"
```
**Note:** Public player IDs are stripped from game records for privacy.
## Players
### Get Player Info
Retrieve information and stats for a specific player.
**Endpoint:**
```
GET https://api.openfront.io/public/player/:playerId
```
**Example:**
```bash
curl "https://api.openfront.io/public/player/HabCsQYR"
```
### Get Player Sessions
Retrieve a list of games & client ids (session ids) for a specific player.
**Endpoint:**
```
GET https://api.openfront.io/public/player/:playerId/sessions
```
**Example:**
```bash
curl "https://api.openfront.io/public/player/HabCsQYR/sessions"
```
## Clans
### Clan Leaderboard
Shows the top 100 clans by `weighted wins`.
**Endpoint:**
```
GET https://api.openfront.io/public/clans/leaderboard
```
Weighted wins have a half-life of 30 days to favor recent wins.
Weighted wins are calculated using the following formula:
```
FUNCTION calculateScore(session: ClanSession, decay: NUMBER = 1) → NUMBER
// 1. Calculate average team size
avgTeamSize ← session.totalPlayerCount ÷ session.numTeams
// 2. Determine how much the clan contributed to their team
// (clan players divided by average players per team)
clanMemberRatio ← session.clanPlayerCount ÷ avgTeamSize
// 3. Apply decay factor (e.g., for older sessions)
weightedValue ← clanMemberRatio × decay
// 4. Calculate match difficulty based on number of teams
// More teams → harder to win → higher reward for victory
// Uses square root to avoid extreme scaling
difficulty ← MAX(1, √(session.numTeams - 1))
// 5. Return final score:
// - Win: reward is multiplied by difficulty
// - Loss: penalty is divided by difficulty (less punishment in harder matches)
IF session.hasWon THEN
RETURN weightedValue × difficulty
ELSE
RETURN weightedValue ÷ difficulty
END IF
END FUNCTION
```
### Clan stats
Displays comprehensive clan performance statistics for a specified clan over a chosen time range. If no time range is provided, it shows lifetime stats (starting from early November 2025).
Key metrics include:
- Total games, wins, losses, and win rate
- Win/loss ratio and weighted win/loss ratio\* broken down by:
- Team type (e.g., 2 teams, 3 teams, duos, trios, etc)
- Number of teams in the game (2 teams, 5 teams, 20 teams, etc)
**Note:** No decay is used, so weighted wins will be different from in the leaderboard.
**Endpoint**
```
GET https://openfront.io/public/clan/:clanTag
```
**Query Parameters:**
- `start` (optional): ISO 8601 timestamp
- `end` (optonal): ISO 8601 timestamp
**Example**
```bash
curl https://api.openfront.io/public/clan/UN?start=2025-11-15T00:00:00Z &
end=2025-11-18T23:59:59Z
```
### Clan Sessions
A clan session is created any time a player with that clan tag is in a public team game. If no start or end query parameter is provided, lifetime sessions (starting early November 2025) are shown.
**Endpoint**
```
GET https://api.openfront.io/public/clan/:clanTag/sessions
```
**Query Parameters:**
- `start` (optional): ISO 8601 timestamp
- `end` (optonal): ISO 8601 timestamp
**Example**
```bash
curl https://api.openfront.io/public/clan/UN/sessions?start=2025-11-15T00:00:00Z &
end=2025-11-18T23:59:59Z
```