# Overwatch 2 API
> Live Overwatch 2 data as an API, powered by OverFast — clean JSON, no key. List every hero and open a hero for its role, abilities, hit points, story and artwork; browse all maps (filter by game mode), the game modes and the roles; search players by name; and open any player for their profile summary — endorsement level, avatar, title and competitive ranks per role on PC and console — and their career stats (games played, win rate, KDA, and breakdowns by role and hero). Mirrors the official Overwatch site, kept current. Distinct hero-shooter coverage — ideal for player-stat trackers, rank checkers, hero guides, team tools and Discord bots. 8 data endpoints. Authenticated with an x-oanor-key; fair-use rate limits per plan.

## 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/overwatch-api/..."
```

## Pricing
- **Free** (Free) — 3,000 calls/Mo, 5 req/s
- **Starter** ($7/Mo) — 52,000 calls/Mo, 15 req/s
- **Pro** ($28/Mo) — 280,000 calls/Mo, 30 req/s
- **Mega** ($90/Mo) — 1,200,000 calls/Mo, 80 req/s

## Endpoints

### Game Data

#### `GET /v1/gamemodes` — Game modes

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

**Response:**
```json
{
    "data": {
        "count": 14,
        "gamemodes": [
            {
                "key": "assault",
                "icon": "https://overfast-api.tekrop.fr/static/gamemodes/assault-icon.svg",
                "name": "Assault",
                "screenshot": "https://overfast-api.tekrop.fr/static/gamemodes/assault.avif",
                "description": "Teams fight to capture or defend two successive points against the enemy team. It's an inactive Overwatch 1 gamemode, also called 2CP."
            },
            {
                "key": "capture-the-flag",
                "icon": "https://overfast-api.tekrop.fr/static/gamemodes/capture-the-flag-icon.svg",
                "name": "Capture the Flag",
                "screenshot": "https://overfast-api.tekrop.fr/static/gamemodes/capture-the-flag.avif",
                "description": "Teams compete to capture the enemy team’s flag while defending their own."
            },
            {
                "key": "clash",
                "icon": "https://overfast-api.tekrop.fr/static/gamemodes/clash-icon.svg",
                "name": "Clash",
                "screenshot": "https://overfast-api.tekrop.fr/static/gamemodes/clash.avif",
                "description": "Vie for dominance across a series of capture points with dynamic spawns and linear map routes, so you spend less time running back to the battle and more time in the heart of it."
            },
            {
                "key": "control",
                "icon":
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/hero` — Hero detail

**Parameters:**
- `key` (query, required, string) — Hero key (e.g. ana) Example: `ana`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/overwatch-api/v1/hero?key=ana"
```

**Response:**
```json
{
    "data": {
        "hero": {
            "age": 62,
            "name": "Ana",
            "role": "support",
            "story": "A founding member of Overwatch and once renowned as the greatest sniper in the world, Ana Amari comes from a long line of decorated military veterans. Though she was thought to have perished in a firefight with Talon, Ana has rejoined the fray to protect her country, family, and closest allies.",
            "subrole": "tactician",
            "birthday": "Jan 1",
            "location": "Cairo, Egypt",
            "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/985b06beae46b7ba3ca87d1512d0fc62ca7f206ceca58ef16fc44d43a1cc84ed.png",
            "abilities": [
                {
                    "icon": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/db33c39f25d96a2cabcacb778cf784535279180f6d9119ef56311bdcdf6077df.png",
                    "name": "Biotic Rifle",
                    "video": "https://blz-contentstack-images.akamaized.net/v3/assets/blt2477dcaf4ebd440c/bltc56d4d9789a018d0/63390487ed7dcc6a0028039c/ANA_BIOTICRIFLE.jpg",
                    "description": "Long-range rifle that heals allies and damages enemies.  Hold to zoom in."
                },
                {
                    "icon": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/620a97282b81ea178951b565e8249361e67c868387e61a4297261ffa11bace13.png",
                    "name": "Sleep Dart",
                    "video": "https://blz-contentstack-images.ak
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/heroes` — All heroes

**Parameters:**
- `role` (query, optional, string) — tank, damage or support Example: `support`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/overwatch-api/v1/heroes?role=support"
```

**Response:**
```json
{
    "data": {
        "count": 14,
        "heroes": [
            {
                "key": "ana",
                "name": "Ana",
                "role": "support",
                "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/985b06beae46b7ba3ca87d1512d0fc62ca7f206ceca58ef16fc44d43a1cc84ed.png"
            },
            {
                "key": "baptiste",
                "name": "Baptiste",
                "role": "support",
                "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/d4e6f1ca45d9f88fa89260787397f141a6f007b14e5b26698883b6a17bab9680.png"
            },
            {
                "key": "brigitte",
                "name": "Brigitte",
                "role": "support",
                "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/795fba91376d87d441a7f359ae12a3175dfa95825ccc4414cc6b95b129fc4cb0.png"
            },
            {
                "key": "illari",
                "name": "Illari",
                "role": "support",
                "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/ce42d1455e03e79f321345fea84b27a8918b5db8bd7ab9b2ca9e569606ede9e4.png"
            },
            {
                "key": "jetpack-cat",
                "name": "Jetpack Cat",
                "role": "support",
                "portrait": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/03a184cd0de27091e0099ac22635ad9615a8f6997881a5c25cc5f2444764f729.png"
            },
            {
                "key": "jun
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/maps` — All maps

**Parameters:**
- `gamemode` (query, optional, string) — Filter by game mode

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

**Response:**
```json
{
    "data": {
        "maps": [
            {
                "name": "Aatlis",
                "location": "Morocco",
                "gamemodes": [
                    "flashpoint"
                ],
                "screenshot": "https://overfast-api.tekrop.fr/static/maps/aatlis.jpg",
                "country_code": "MA"
            },
            {
                "name": "Antarctic Peninsula",
                "location": "Antarctica",
                "gamemodes": [
                    "control"
                ],
                "screenshot": "https://overfast-api.tekrop.fr/static/maps/antarctic-peninsula.jpg",
                "country_code": "AQ"
            },
            {
                "name": "Temple of Anubis",
                "location": "Giza Plateau, Egypt",
                "gamemodes": [
                    "assault"
                ],
                "screenshot": "https://overfast-api.tekrop.fr/static/maps/anubis.jpg",
                "country_code": "EG"
            },
            {
                "name": "Arena Victoriae",
                "location": "Colosseo, Rome, Italy",
                "gamemodes": [
                    "control"
                ],
                "screenshot": "https://overfast-api.tekrop.fr/static/maps/arena-victoriae.jpg",
                "country_code": "IT"
            },
            {
                "name": "Ayutthaya",
                "location": "Thailand",
                "gamemodes": [
                    "capture-the-f
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/roles` — Roles

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

**Response:**
```json
{
    "data": {
        "count": 3,
        "roles": [
            {
                "key": "tank",
                "icon": "https://blz-contentstack-images.akamaized.net/v3/assets/blt2477dcaf4ebd440c/bltf0889daa1ef606db/6504cff74d2a764cb7973991/Tank.svg",
                "name": "Tank",
                "description": "Tank heroes soak up damage and shatter fortified positions, like closely grouped enemies and narrow chokepoints. If you’re a tank, you lead the charge."
            },
            {
                "key": "damage",
                "icon": "https://blz-contentstack-images.akamaized.net/v3/assets/blt2477dcaf4ebd440c/blt05d482c88096959a/6504cff7d9caa1285f64b6bd/Damage.svg",
                "name": "Damage",
                "description": "Damage heroes seek out, engage, and obliterate the enemy with wide-ranging tools, abilities, and play styles. Fearsome but fragile, these heroes require backup to survive."
            },
            {
                "key": "support",
                "icon": "https://blz-contentstack-images.akamaized.net/v3/assets/blt2477dcaf4ebd440c/blt3ccd5df488163b33/6504cff7fc2ae4d7c50445c4/Support.svg",
                "name": "Support",
                "description": "Support heroes empower their allies by healing, shielding, boosting damage, and disabling foes. As a support, you’re the backbone of your team’s survival."
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:15.802Z",
        "request_id"
…(truncated, see openapi.json for full schema)
```

### Players

#### `GET /v1/player` — Player profile summary

**Parameters:**
- `player_id` (query, required, string) — Player id (e.g. TeKrop-2217) Example: `TeKrop-2217`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/overwatch-api/v1/player?player_id=TeKrop-2217"
```

**Response:**
```json
{
    "data": {
        "player": {
            "title": "Data Broker",
            "avatar": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/30e37a0d096d92c18f7c6f9519d483e75d1d8ab5280d672f2553f650f4c050e5.png",
            "namecard": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/f51cfd3cf1a8d7729a09fd0fcf9292aeb80154cd3453cdec08224926d634b499.png",
            "username": "TeKrop",
            "competitive": {
                "pc": {
                    "open": null,
                    "tank": null,
                    "damage": null,
                    "season": 22,
                    "support": {
                        "tier": 4,
                        "division": "silver",
                        "rank_icon": "https://static.playoverwatch.com/img/pages/career/icons/rank/Rank_SilverTier-5a6b3c3498.png",
                        "role_icon": "https://static.playoverwatch.com/img/pages/career/icons/role/support-0258e13d85.svg#icon",
                        "tier_icon": "https://static.playoverwatch.com/img/pages/career/icons/rank/TierDivision_4-0cd0907e1b.png"
                    }
                },
                "console": null
            },
            "endorsement": 2,
            "last_updated_at": 1777998881
        }
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:16.804Z",
        "request_id": "c37b44e9-b376-49e8-8c46-26dc6ca7bf59"
    },
    "status": "ok",
    "message": "Player retrieved successfully",
    "success": true
}
```

#### `GET /v1/player/stats` — Player career stats

**Parameters:**
- `player_id` (query, required, string) — Player id Example: `TeKrop-2217`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/overwatch-api/v1/player/stats?player_id=TeKrop-2217"
```

**Response:**
```json
{
    "data": {
        "roles": {
            "tank": {
                "kda": 2.99,
                "total": {
                    "damage": 43400852,
                    "deaths": 36169,
                    "assists": 14575,
                    "healing": 2112984,
                    "eliminations": 93699
                },
                "average": {
                    "damage": 8393.91,
                    "deaths": 7,
                    "assists": 2.82,
                    "healing": 408.66,
                    "eliminations": 18.12
                },
                "winrate": 52.05,
                "games_won": 3521,
                "games_lost": 3243,
                "time_played": 3102310,
                "games_played": 6764
            },
            "damage": {
                "kda": 2.71,
                "total": {
                    "damage": 15327248,
                    "deaths": 10822,
                    "assists": 88,
                    "healing": 395182,
                    "eliminations": 29195
                },
                "average": {
                    "damage": 11289.1,
                    "deaths": 7.97,
                    "assists": 0.06,
                    "healing": 291.07,
                    "eliminations": 21.5
                },
                "winrate": 51.62,
                "games_won": 894,
                "games_lost": 838,
                "time_played": 814622,
                "games_played": 1732
            },
          
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Search players

**Parameters:**
- `name` (query, required, string) — Player name (BattleTag) Example: `TeKrop`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/overwatch-api/v1/search?name=TeKrop"
```

**Response:**
```json
{
    "data": {
        "count": 1,
        "query": "TeKrop",
        "total": 1,
        "players": [
            {
                "name": "TeKrop",
                "title": "Data Broker",
                "avatar": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/30e37a0d096d92c18f7c6f9519d483e75d1d8ab5280d672f2553f650f4c050e5.png",
                "namecard": "https://d15f34w2p8l1cc.cloudfront.net/overwatch/f51cfd3cf1a8d7729a09fd0fcf9292aeb80154cd3453cdec08224926d634b499.png",
                "player_id": "c65b8798bc61d6ffbba120%7Ccfe9dd77a4382165e2b920bdcc035949",
                "last_updated_at": 1777998881
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:18.030Z",
        "request_id": "e0e2ef3f-8aba-4797-babb-a22a01713e58"
    },
    "status": "ok",
    "message": "Players retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Spec

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

**Response:**
```json
{
    "data": {
        "service": "overwatch-api",
        "endpoints": {
            "GET /v1/hero": "Hero detail by key (e.g. ana).",
            "GET /v1/maps": "All maps (gamemode= filter).",
            "GET /v1/meta": "This document.",
            "GET /v1/roles": "Roles.",
            "GET /v1/heroes": "All heroes (role= tank|damage|support).",
            "GET /v1/player": "Player profile summary by player_id (e.g. TeKrop-2217).",
            "GET /v1/search": "Search players by name.",
            "GET /v1/gamemodes": "Game modes.",
            "GET /v1/player/stats": "A player's career stats summary."
        },
        "description": "Overwatch 2 data via OverFast: heroes and hero detail, maps, game modes and roles, player search, and a player's profile summary and career stats. Real live data, no key."
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:18.128Z",
        "request_id": "cea4c698-a973-4d6f-a7d7-05f4b32c02d2"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


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