# ProtonDB Steam Deck & Linux Compatibility API
> Live Linux and Steam Deck compatibility plus popularity for Steam games, from the public ProtonDB and Steam feeds — no key, nothing stored. The "can I play it on Linux / Steam Deck, and is anyone playing it" view of a game: the crowd-sourced ProtonDB compatibility tier together with the live concurrent-player count, distinct from the other game and platform APIs in the catalogue. The game endpoint returns a full picture for a title — its Steam name, genres and release date, the ProtonDB compatibility tier (platinum, gold, silver, bronze or borked) with the community confidence, score and report count, the trending and best-reported tiers, and the live player count. The search endpoint resolves a game name to its Steam app id and other matches, so you can find the id to query. The players endpoint returns just the live concurrent-player count for a game. Build Steam Deck compatibility checkers, Linux gaming dashboards, "is it playable" widgets and game-popularity trackers on top of real ProtonDB and Steam data. Look up a game by Steam app id (appid=1245620) or by name (name=elden ring); ProtonDB tiers run from platinum (flawless) down to borked, and player counts are live.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/protondb-api/..."
```

## Pricing
- **Free** (Free) — 21,000 calls/Mo, 3 req/s
- **Starter** ($5/Mo) — 290,000 calls/Mo, 10 req/s
- **Pro** ($16/Mo) — 1,200,000 calls/Mo, 25 req/s
- **Scale** ($36/Mo) — 4,200,000 calls/Mo, 55 req/s

## Endpoints

### Game

#### `GET /v1/game` — Full game picture — compatibility + players

**Parameters:**
- `appid` (query, optional, string) — Steam app id (or pass name=) Example: `1245620`
- `name` (query, optional, string) — Game name (resolved via Steam search) Example: `elden ring`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/game?appid=1245620&name=elden+ring"
```

**Response:**
```json
{
    "data": {
        "name": "ELDEN RING",
        "appid": 1245620,
        "genres": [
            "Action",
            "RPG"
        ],
        "source": "ProtonDB + Steam",
        "released": "24 Feb, 2022",
        "current_players": 29376,
        "steam_deck_linux": {
            "tier": "gold",
            "score": 0.78,
            "confidence": "strong",
            "total_reports": 2058,
            "trending_tier": "platinum",
            "best_reported_tier": "platinum"
        }
    },
    "meta": {
        "timestamp": "2026-06-12T01:42:28.537Z",
        "request_id": "f7144857-5948-47e7-8a16-75d8109e2bce"
    },
    "status": "ok",
    "message": "Game retrieved successfully",
    "success": true
}
```

### Search

#### `GET /v1/search` — Resolve a game name to Steam app ids

**Parameters:**
- `q` (query, required, string) — Search query Example: `zelda`
- `limit` (query, optional, string) — Max results (1-25) Example: `10`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/search?q=zelda&limit=10"
```

**Response:**
```json
{
    "data": {
        "count": 10,
        "query": "portal",
        "source": "Steam",
        "results": [
            {
                "name": "Portal 2",
                "type": "app",
                "appid": 620
            },
            {
                "name": "Portal",
                "type": "app",
                "appid": 400
            },
            {
                "name": "Portal Knights",
                "type": "app",
                "appid": 374040
            },
            {
                "name": "Portal Worlds",
                "type": "app",
                "appid": 4327940
            },
            {
                "name": "Bridge Constructor Portal",
                "type": "app",
                "appid": 684410
            },
            {
                "name": "Bridge Constructor Portal - Portal Proficiency",
                "type": "app",
                "appid": 1113550
            },
            {
                "name": "Portal Reloaded",
                "type": "app",
                "appid": 1255980
            },
            {
                "name": "Portal Dungeon",
                "type": "app",
                "appid": 1679220
            },
            {
                "name": "Portal: Revolution",
                "type": "app",
                "appid": 601360
            },
            {
                "name": "Desktop Portal",
                "type": "app",
                "appid": 1178460
            }
        ]
    },

…(truncated, see openapi.json for full schema)
```

### Players

#### `GET /v1/players` — Live concurrent-player count for a game

**Parameters:**
- `appid` (query, optional, string) — Steam app id (or pass name=) Example: `1245620`
- `name` (query, optional, string) — Game name (alternative to appid)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/players?appid=1245620"
```

**Response:**
```json
{
    "data": {
        "name": "Counter-Strike 2",
        "appid": 730,
        "source": "Steam",
        "current_players": 501523
    },
    "meta": {
        "timestamp": "2026-06-12T01:42:29.169Z",
        "request_id": "9ae52b96-3958-436a-8b6b-607c32bc8a0c"
    },
    "status": "ok",
    "message": "Players retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Look up a game by Steam app id (appid=1245620) or by name (name=elden ring, resolved via Steam search). ProtonDB tiers: platinum (flawless), gold, silver, bronze, borked. current_players is the live concurrent count from Steam.",
        "source": "ProtonDB (protondb.com/api) and Steam public feeds (steampowered.com, live)",
        "service": "protondb-api",
        "endpoints": {
            "GET /v1/game": "Full game picture — ProtonDB tier, genres, live players (appid=1245620 or name=elden ring).",
            "GET /v1/meta": "This document.",
            "GET /v1/search": "Resolve a game name to Steam app ids (q=zelda).",
            "GET /v1/players": "Live concurrent-player count for a game (appid=1245620 or name=dota 2)."
        },
        "description": "Live Linux & Steam Deck compatibility plus popularity for Steam games, from the public ProtonDB and Steam feeds. The 'can I play it on Linux / Steam Deck, and is anyone playing it' view. game = a full picture (Steam name, genres, release date, the ProtonDB compatibility tier — platinum/gold/silver/bronze/borked — with community confidence, score, report count, trending and best-reported tiers, and the live player count); search = resolves a game name to its Steam app id and other matches; players = just the live concurrent-player count for a game. Live, no key, nothing stored. Distinct from the other game and platform APIs.",
        "sample_players": 29376,
        "upstream_s
…(truncated, see openapi.json for full schema)
```

### Community

#### `GET /v1/news` — Latest news and announcements for a game

**Parameters:**
- `appid` (query, optional, string) — Steam app id (or pass name=) Example: `1245620`
- `name` (query, optional, string) — Game name (alternative to appid)
- `limit` (query, optional, string) — Max items (1-20) Example: `5`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/news?appid=1245620&limit=5"
```

**Response:**
```json
{
    "data": {
        "name": null,
        "news": [
            {
                "url": "https://steamstore-a.akamaihd.net/news/externalpost/Gamemag.ru/1834602721191360",
                "date": "2026-06-05T01:34:00.000Z",
                "feed": "Gamemag.ru",
                "title": "Официально: Полная версия ELDEN RING нагрянет на Nintendo Switch 2 в августе — игроки с других платформ смогут докупить новый контент",
                "author": "Deacon",
                "summary": "FromSoftware объявила дату выхода Elden Ring: Tarnished Edition для Nintendo Switch 2 . Самая полная версия знаменитой RPG поступит в продажу 28 августа 2026 года ."
            },
            {
                "url": "https://steamstore-a.akamaihd.net/news/externalpost/Gamemag.ru/1833968530894248",
                "date": "2026-05-30T20:05:00.000Z",
                "feed": "Gamemag.ru",
                "title": "Дизайнер Tomb Raider: Legacy of Atlantis рассказал, чему все разработчики могут научиться у FromSoftware",
                "author": "Семен Страндов",
                "summary": "Геймдизайнер Tomb Raider: Legacy of Atlantis Марцин Матушчик высказался в пользу более внимательной и продуманно
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/reviews` — Steam community reviews + sentiment summary

**Parameters:**
- `appid` (query, optional, string) — Steam app id (or pass name=) Example: `1245620`
- `name` (query, optional, string) — Game name (alternative to appid)
- `filter` (query, optional, string) — recent (default), updated or all Example: `recent`
- `limit` (query, optional, string) — Max reviews (1-25) Example: `10`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/reviews?appid=1245620&filter=recent&limit=10"
```

**Response:**
```json
{
    "data": {
        "name": "ELDEN RING",
        "appid": 1245620,
        "count": 10,
        "filter": "recent",
        "source": "Steam",
        "reviews": [
            {
                "review": "Look majestic tree is there",
                "created": "2026-06-13T12:37:57.000Z",
                "voted_up": true,
                "votes_up": 0,
                "votes_funny": 0,
                "on_steam_deck": false,
                "playtime_hours": 121,
                "steam_purchase": false,
                "playtime_at_review_hours": 121
            },
            {
                "review": "[h1]Open world yay...or nay[/h1] Here we go another entry in dark/demon souls series. But it's elden souls now. So this time they made dark souls open world. Story? As always there's none, just some nonsensical characters around speaking in riddles and rubbish in general. Open world is very static and feels dead. There are enemies copy pasted everywhere though. With some stationary npc's who apparently are immortal and not afraid of any danger. Oh wait you can kill them so they're mortal but not",
                "created": "2026-06-13T12:18:39.000Z",
                "voted_up": false,
                "votes_up": 1,
                "votes_funny": 0,
                "on_steam_deck": false,
                "playtime_hours": 116,
                "steam_purchase": false,
                "playtime_at_review_hours": 116
            },
            {
                "review": "
…(truncated, see openapi.json for full schema)
```

### Charts

#### `GET /v1/charts` — The most-played Steam games right now

**Parameters:**
- `limit` (query, optional, string) — Max games (1-25) Example: `10`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/protondb-api/v1/charts?limit=10"
```

**Response:**
```json
{
    "data": {
        "count": 10,
        "games": [
            {
                "name": "Counter-Strike 2",
                "rank": 1,
                "appid": 730,
                "rank_change": 0,
                "peak_players": 1275982
            },
            {
                "name": "PUBG: BATTLEGROUNDS",
                "rank": 2,
                "appid": 578080,
                "rank_change": 0,
                "peak_players": 732248
            },
            {
                "name": "Dota 2",
                "rank": 3,
                "appid": 570,
                "rank_change": 0,
                "peak_players": 635321
            },
            {
                "name": "Wallpaper Engine",
                "rank": 4,
                "appid": 431960,
                "rank_change": 0,
                "peak_players": 111342
            },
            {
                "name": "Apex Legends™",
                "rank": 5,
                "appid": 1172470,
                "rank_change": 1,
                "peak_players": 284062
            },
            {
                "name": "Slay the Spire 2",
                "rank": 6,
                "appid": 2868840,
                "rank_change": -1,
                "peak_players": 196023
            },
            {
                "name": "R.E.P.O.",
                "rank": 7,
                "appid": 3241660,
                "rank_change": 22,
                "peak_players": 94560
            },
            {
     
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/protondb-api
OpenAPI spec: https://www.oanor.com/api/protondb-api/openapi.json
