# Guild Wars 2 API
> Guild Wars 2 game data as an API, from ArenaNet\x27s official GW2 API. Look up any item by id (type, rarity, level, vendor value, flags), pull live Trading Post buy and sell prices with the gold/silver/copper breakdown and the flip margin after the 15% trading tax, read the full order book with buy and sell depth, find crafting recipes by their output or input item with ingredients and required disciplines, list every world (server) with its population and region, see the current World-vs-World match scores, victory points and kills for all matchups, browse the in-game currencies, and get the world-boss list. Batch lookups (up to 50 ids) make it ideal for Trading Post flipping tools, gold-making spreadsheets, crafting calculators, server/WvW dashboards, Discord bots and fan sites. All prices in copper (100 copper = 1 silver, 100 silver = 1 gold). No accounts, no upstream key. Powered by the official Guild Wars 2 API.

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

## Pricing
- **Free** (Free) — 3,550 calls/Mo, 2 req/s
- **Starter** ($5/Mo) — 46,000 calls/Mo, 5 req/s
- **Pro** ($14/Mo) — 221,000 calls/Mo, 15 req/s
- **Mega** ($40/Mo) — 1,085,000 calls/Mo, 40 req/s

## Endpoints

### Items

#### `GET /v1/item` — Item detail by id

**Parameters:**
- `id` (query, optional, string) — Item id Example: `19721`
- `ids` (query, optional, string) — Up to 50 comma-ids Example: `19721,19684`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gw2-api/v1/item?id=19721&ids=19721%2C19684"
```

**Response:**
```json
{
    "data": {
        "item": {
            "id": 19721,
            "icon": "https://render.guildwars2.com/file/18CE5D78317265000CF3C23ED76AB3CEE86BA60E/65941.png",
            "name": "Glob of Ectoplasm",
            "type": "Trophy",
            "flags": [],
            "level": 0,
            "rarity": "Exotic",
            "details": null,
            "chat_link": "[&AgEJTQAA]",
            "description": "Salvage Item",
            "vendor_price": {
                "gold": 0,
                "copper": 256,
                "silver": 2,
                "formatted": "0g 2s 56c",
                "copper_rem": 56
            },
            "vendor_value": 256
        }
    },
    "meta": {
        "timestamp": "2026-06-01T00:03:41.781Z",
        "request_id": "0ba3b588-b36d-4a6e-b1af-169baa647612"
    },
    "status": "ok",
    "message": "Item retrieved",
    "success": true
}
```

### Trading Post

#### `GET /v1/listings` — Full order book

**Parameters:**
- `id` (query, required, string) — Item id Example: `19721`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gw2-api/v1/listings?id=19721"
```

**Response:**
```json
{
    "data": {
        "id": 19721,
        "buys": [
            {
                "listings": 1,
                "quantity": 105,
                "unit_price": 2114
            },
            {
                "listings": 9,
                "quantity": 1616,
                "unit_price": 2113
            },
            {
                "listings": 2,
                "quantity": 500,
                "unit_price": 2112
            },
            {
                "listings": 2,
                "quantity": 500,
                "unit_price": 2111
            },
            {
                "listings": 1,
                "quantity": 250,
                "unit_price": 2110
            },
            {
                "listings": 4,
                "quantity": 766,
                "unit_price": 2108
            },
            {
                "listings": 1,
                "quantity": 250,
                "unit_price": 2107
            },
            {
                "listings": 15,
                "quantity": 3750,
                "unit_price": 2104
            },
            {
                "listings": 1,
                "quantity": 50,
                "unit_price": 2101
            },
            {
                "listings": 8,
                "quantity": 1736,
                "unit_price": 2100
            },
            {
                "listings": 1,
                "quantity": 93,
                "unit_price": 2099
            },
            {
                "list
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/price` — Trading Post buy/sell

**Parameters:**
- `id` (query, optional, string) — Item id Example: `19721`
- `ids` (query, optional, string) — Up to 50 comma-ids Example: `19721,19684`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gw2-api/v1/price?id=19721&ids=19721%2C19684"
```

**Response:**
```json
{
    "data": {
        "price": {
            "id": 19721,
            "buy": {
                "price": {
                    "gold": 0,
                    "copper": 2113,
                    "silver": 21,
                    "formatted": "0g 21s 13c",
                    "copper_rem": 13
                },
                "quantity": 729496,
                "unit_price": 2113
            },
            "sell": {
                "price": {
                    "gold": 0,
                    "copper": 2149,
                    "silver": 21,
                    "formatted": "0g 21s 49c",
                    "copper_rem": 49
                },
                "quantity": 1716977,
                "unit_price": 2149
            },
            "tradable": true,
            "margin_copper": -287
        }
    },
    "meta": {
        "timestamp": "2026-06-01T00:03:42.401Z",
        "request_id": "2d8db5e5-14e3-401f-840b-eba178616737"
    },
    "status": "ok",
    "message": "Price retrieved",
    "success": true
}
```

### Crafting

#### `GET /v1/recipe` — Recipes by output/input/id

**Parameters:**
- `output` (query, optional, string) — Output item id Example: `46742`
- `input` (query, optional, string) — Input item id Example: `19700`
- `id` (query, optional, string) — Recipe id Example: `7319`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gw2-api/v1/recipe?output=46742&input=19700&id=7319"
```

**Response:**
```json
{
    "data": {
        "count": 2,
        "query": {
            "output": 46742
        },
        "recipes": [
            {
                "id": 12053,
                "type": "RefinementEctoplasm",
                "flags": [
                    "AutoLearned"
                ],
                "min_rating": 400,
                "disciplines": [
                    "Jeweler"
                ],
                "ingredients": [
                    {
                        "count": 50,
                        "item_id": 19684
                    },
                    {
                        "count": 1,
                        "item_id": 19721
                    },
                    {
                        "count": 10,
                        "item_id": 46747
                    }
                ],
                "output_count": 1,
                "output_item_id": 46742
            },
            {
                "id": 7319,
                "type": "RefinementEctoplasm",
                "flags": [
                    "AutoLearned"
                ],
                "min_rating": 450,
                "disciplines": [
                    "Leatherworker",
                    "Armorsmith",
                    "Tailor",
                    "Artificer",
                    "Weaponsmith",
                    "Huntsman"
                ],
                "ingredients": [
                    {
                        "count": 50,
                        "item_id": 19684

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

### Reference

#### `GET /v1/currencies` — In-game currencies

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

**Response:**
```json
{
    "data": {
        "count": 79,
        "currencies": [
            {
                "id": 4,
                "icon": "https://render.guildwars2.com/file/220061640ECA41C0577758030357221B4ECCE62C/502065.png",
                "name": "Gem",
                "description": "Purchased and spent via the Black Lion Trading Company."
            },
            {
                "id": 1,
                "icon": "https://render.guildwars2.com/file/98457F504BA2FAC8457F532C4B30EDC23929ACF9/619316.png",
                "name": "Coin",
                "description": "The primary currency of Tyria. Spent at vendors throughout the world."
            },
            {
                "id": 2,
                "icon": "https://render.guildwars2.com/file/94953FA23D3E0D23559624015DFEA4CFAA07F0E5/155026.png",
                "name": "Karma",
                "description": "Earned through various activities. Spent at vendors throughout the world."
            },
            {
                "id": 23,
                "icon": "https://render.guildwars2.com/file/0AD608DE7FDEE0B909905C0AF9401321CF65CD94/1010701.png",
                "name": "Spirit Shard",
                "description": "Used by Miyani to maintain the Mystic Forge."
            },
            {
                "id": 3,
                "icon": "https://render.guildwars2.com/file/A1BD345AD9192C3A585BE2F6CB0617C5A797A1E2/619317.png",
                "name": "Laurel",
                "description": "Obtained from Wizard's Vault rewa
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/worldbosses` — World boss list

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

**Response:**
```json
{
    "data": {
        "count": 15,
        "world_bosses": [
            "admiral_taidha_covington",
            "claw_of_jormag",
            "drakkar",
            "fire_elemental",
            "great_jungle_wurm",
            "inquest_golem_mark_ii",
            "karka_queen",
            "megadestroyer",
            "mists_and_monsters_titans",
            "modniir_ulgoth",
            "shadow_behemoth",
            "svanir_shaman_chief",
            "tequatl_the_sunless",
            "the_shatterer",
            "triple_trouble_wurm"
        ]
    },
    "meta": {
        "timestamp": "2026-06-01T00:03:42.947Z",
        "request_id": "f2ee21f4-f428-46e0-b92a-eefcc9835b0d"
    },
    "status": "ok",
    "message": "World bosses retrieved",
    "success": true
}
```

#### `GET /v1/worlds` — Server list

**Parameters:**
- `region` (query, optional, string) — na|eu Example: `eu`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gw2-api/v1/worlds?region=eu"
```

**Response:**
```json
{
    "data": {
        "count": 27,
        "worlds": [
            {
                "id": 2001,
                "name": "Fissure of Woe",
                "region": "EU",
                "population": "Medium"
            },
            {
                "id": 2002,
                "name": "Desolation",
                "region": "EU",
                "population": "VeryHigh"
            },
            {
                "id": 2003,
                "name": "Gandara",
                "region": "EU",
                "population": "Full"
            },
            {
                "id": 2004,
                "name": "Blacktide",
                "region": "EU",
                "population": "Medium"
            },
            {
                "id": 2005,
                "name": "Ring of Fire",
                "region": "EU",
                "population": "High"
            },
            {
                "id": 2006,
                "name": "Underworld",
                "region": "EU",
                "population": "Medium"
            },
            {
                "id": 2007,
                "name": "Far Shiverpeaks",
                "region": "EU",
                "population": "Full"
            },
            {
                "id": 2008,
                "name": "Whiteside Ridge",
                "region": "EU",
                "population": "Full"
            },
            {
                "id": 2009,
                "name": "Ruins of Surmia",
                "region"
…(truncated, see openapi.json for full schema)
```

### WvW

#### `GET /v1/wvw` — World-vs-World scores

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

**Response:**
```json
{
    "data": {
        "count": 9,
        "matches": [
            {
                "id": "2-1",
                "end": "2026-06-05T17:58:00Z",
                "tier": "1",
                "kills": {
                    "red": 10019,
                    "blue": 10719,
                    "green": 19812
                },
                "start": "2026-05-29T18:00:00Z",
                "deaths": {
                    "red": 13928,
                    "blue": 14355,
                    "green": 13131
                },
                "region": "EU",
                "scores": {
                    "red": 222671,
                    "blue": 196186,
                    "green": 260735
                },
                "worlds": {
                    "red": 2013,
                    "blue": 2004,
                    "green": 2012
                },
                "victory_points": {
                    "red": 555,
                    "blue": 485,
                    "green": 716
                }
            },
            {
                "id": "2-2",
                "end": "2026-06-05T17:58:00Z",
                "tier": "2",
                "kills": {
                    "red": 13227,
                    "blue": 14266,
                    "green": 11994
                },
                "start": "2026-05-29T18:00:00Z",
                "deaths": {
                    "red": 14140,
                    "blue": 13420,
                    "green": 12828
                },
    
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Usage notes

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

**Response:**
```json
{
    "data": {
        "note": "Guild Wars 2 game data. /v1/item?id=19721 (or ?ids=1,2,3) = item detail (type, rarity, level, vendor value); /v1/price?id=19721 (or ?ids=) = live Trading Post buy/sell prices with gold breakdown; /v1/listings?id=19721 = the full order book (buy/sell depth); /v1/recipe?output=46742 (or ?input=, ?id=) = crafting recipes with ingredients & disciplines; /v1/worlds (?region=na|eu) = the server list with population; /v1/wvw = current World-vs-World match scores; /v1/currencies = in-game currencies; /v1/worldbosses = the world boss list. Prices are in copper (100 copper = 1 silver, 100 silver = 1 gold). Official GW2 API.",
        "source": "Guild Wars 2 official API (api.guildwars2.com)",
        "endpoints": [
            "/v1/item",
            "/v1/price",
            "/v1/listings",
            "/v1/recipe",
            "/v1/worlds",
            "/v1/wvw",
            "/v1/currencies",
            "/v1/worldbosses",
            "/v1/meta"
        ]
    },
    "meta": {
        "timestamp": "2026-06-01T00:03:43.184Z",
        "request_id": "2c26e13f-1841-4fa4-af09-b3df25b0d757"
    },
    "status": "ok",
    "message": "Meta retrieved",
    "success": true
}
```


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