# API de WoWDB

> L’API publique de WoWDB des Défias : 155 848 fiches de World of Warcraft Vanilla, TBC et WotLK, en français, en lecture seule, sans clé.

Documentation de l’API de WoWDB des Défias : https://docs.wowdb.assemblee-defias.fr/

## Introduction

WoWDB des Défias est la base de données de L’Assemblée des Défias, le repaire des voleurs de World of Warcraft. Son API donne accès aux mêmes fiches que le [site](https://wowdb.assemblee-defias.fr/) : 80 745 objets, 51 791 PNJ, 19 713 quêtes, 2 536 objets du monde, 873 sorts du voleur, 172 réputations, 18 ensembles et 150 donjons et raids, pour les trois versions classiques du jeu.

C’est une API REST qui renvoie du JSON. Elle est **publique, gratuite, en lecture seule et sans clé** : une adresse suffit, depuis un terminal, un serveur, un bot Discord, un addon, une page web ou un assistant IA.

- **Une adresse de base** : `https://api.wowdb.assemblee-defias.fr/v1`.
- **La version du jeu dans le chemin** : `/classic/…`, `/tbc/…` ou `/wotlk/…` ([versions du jeu](https://docs.wowdb.assemblee-defias.fr/versions)).
- **Des objets typés et stables** : chaque réponse a un champ `object` (`item`, `npc`, `list`…), des noms de champs anglais en snake_case et des codes stables (`quality: "epic"`) ; les textes du jeu restent en français.
- **Des liens partout** : chaque objet donne son `url` (la page WoWDB à montrer à vos lecteurs), son `api_url` et l’adresse absolue de son `icon`.
- **Des listes paginées par curseur** ([pagination](https://docs.wowdb.assemblee-defias.fr/pagination)), des [filtres](https://docs.wowdb.assemblee-defias.fr/filtres), dont le filtre voleur, des [erreurs](https://docs.wowdb.assemblee-defias.fr/erreurs) JSON homogènes, un [cache HTTP](https://docs.wowdb.assemblee-defias.fr/cache) avec ETag.

**URL de base**

```text
https://api.wowdb.assemblee-defias.fr/v1
```

**Requête (GET /v1)**

#### cURL

```bash
curl https://api.wowdb.assemblee-defias.fr/v1
```

#### JavaScript

```js
const res = await fetch("https://api.wowdb.assemblee-defias.fr/v1");
if (!res.ok) throw new Error((await res.json()).error.message);
const api = await res.json();
console.log(api.name);
```

#### Python

```python
import json
import urllib.request

req = urllib.request.Request(
    "https://api.wowdb.assemblee-defias.fr/v1",
    headers={"User-Agent": "mon-application/1.0 (contact@example.com)"},
)
with urllib.request.urlopen(req) as res:
    api = json.load(res)
print(api["name"])
```

#### PHP

```php
<?php
$context = stream_context_create([
    'http' => ['header' => "User-Agent: mon-application/1.0 (contact@example.com)\r\n"],
]);
$json = file_get_contents('https://api.wowdb.assemblee-defias.fr/v1', false, $context);
$api = json_decode($json, true);
echo $api['name'], PHP_EOL;
```

#### Ruby

```ruby
require "json"
require "net/http"

uri = URI("https://api.wowdb.assemblee-defias.fr/v1")
res = Net::HTTP.get_response(uri, { "User-Agent" => "mon-application/1.0 (contact@example.com)" })
api = JSON.parse(res.body)
puts api["name"]
```

#### Go

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.wowdb.assemblee-defias.fr/v1", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("User-Agent", "mon-application/1.0 (contact@example.com)")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	var api map[string]any
	if err := json.NewDecoder(res.Body).Decode(&api); err != nil {
		panic(err)
	}
	fmt.Println(api["name"])
}
```

#### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Exemple {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create(
                "https://api.wowdb.assemblee-defias.fr/v1"))
            .header("User-Agent", "mon-application/1.0 (contact@example.com)")
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        // JSON à lire avec Jackson, Gson ou le client WowDb.java (sans dépendance)
        System.out.println(response.body());
    }
}
```

#### .NET

```csharp
using System.Net.Http;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("mon-application/1.0 (contact@example.com)");
var json = await http.GetStringAsync(
    "https://api.wowdb.assemblee-defias.fr/v1");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement.GetProperty("name").GetString());
```

#### Rust

```rust
// Cargo.toml : ureq = { version = "2", features = ["json"] } et serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api: serde_json::Value = ureq::get("https://api.wowdb.assemblee-defias.fr/v1")
        .set("User-Agent", "mon-application/1.0 (contact@example.com)")
        .call()?
        .into_json()?;
    println!("{}", api["name"].as_str().unwrap_or_default());
    Ok(())
}
```

**Réponse** (statut 200)

```json
{
  "object": "api",
  "name": "API de WoWDB des Défias",
  "version": "v1",
  "released": "2026-10-01",
  "data_updated": "2026-10-01",
  "description": "API publique en lecture seule de WoWDB des Défias : objets, sorts, quêtes, PNJ, objets du monde, ensembles, réputations, donjons et raids de World of Warcraft (Vanilla, TBC, WotLK), en français.",
  "documentation": "https://docs.wowdb.assemblee-defias.fr/",
  "openapi": "https://api.wowdb.assemblee-defias.fr/v1/openapi.json",
  "llms": "https://docs.wowdb.assemblee-defias.fr/llms.txt",
  "website": "https://wowdb.assemblee-defias.fr/",
  "versions": [
    {
      "id": "classic",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/classic"
    },
    {
      "id": "tbc",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/tbc"
    },
    {
      "id": "wotlk",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/wotlk"
    }
  ],
  "endpoints": {
    "search": "https://api.wowdb.assemblee-defias.fr/v1/search?q={texte}",
    "stats": "https://api.wowdb.assemblee-defias.fr/v1/stats",
    "versions": "https://api.wowdb.assemblee-defias.fr/v1/versions",
    "items": "https://api.wowdb.assemblee-defias.fr/v1/{version}/items",
    "spells": "https://api.wowdb.assemblee-defias.fr/v1/{version}/spells",
    "quests": "https://api.wowdb.assemblee-defias.fr/v1/{version}/quests",
    "npcs": "https://api.wowdb.assemblee-defias.fr/v1/{version}/npcs",
    "game_objects": "https://api.wowdb.assemblee-defias.fr/v1/{version}/game-objects",
    "item_sets": "https://api.wowdb.assemblee-defias.fr/v1/{version}/item-sets",
    "factions": "https://api.wowdb.assemblee-defias.fr/v1/{version}/factions",
    "instances": "https://api.wowdb.assemblee-defias.fr/v1/{version}/instances"
  }
}
```

## Démarrage rapide : une première requête en 30 secondes

1. Ouvrez un terminal (ou la console de votre navigateur).
2. Copiez l’exemple ci-contre : la fiche de la **Barbelure cruelle**, l’épée qu’Edwin VanCleef laisse tomber aux Mortemines.
3. Lisez la réponse : nom, qualité, niveau, dégâts de l’arme, infobulle du jeu ligne par ligne, et `dropped_by` : VanCleef, 20 % de chances.

Changez de langage avec le sélecteur en haut de l’exemple : votre choix est retenu sur toutes les pages. Aucune bibliothèque n’est nécessaire : chaque exemple n’utilise que la bibliothèque standard de son langage (sauf Rust). Il existe aussi des [bibliothèques clientes](https://docs.wowdb.assemblee-defias.fr/bibliotheques) d’un seul fichier.

> **Bon à savoir** : Pas de clé, pas de compte : identifiez simplement votre application dans l’en-tête `User-Agent` ([authentification](https://docs.wowdb.assemblee-defias.fr/authentification)).

**Requête (Première requête)**

#### cURL

```bash
curl https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191
```

#### JavaScript

```js
const res = await fetch("https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191");
if (!res.ok) throw new Error((await res.json()).error.message);
const item = await res.json();
console.log(item.name);
```

#### Python

```python
import json
import urllib.request

req = urllib.request.Request(
    "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191",
    headers={"User-Agent": "mon-application/1.0 (contact@example.com)"},
)
with urllib.request.urlopen(req) as res:
    item = json.load(res)
print(item["name"])
```

#### PHP

```php
<?php
$context = stream_context_create([
    'http' => ['header' => "User-Agent: mon-application/1.0 (contact@example.com)\r\n"],
]);
$json = file_get_contents('https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191', false, $context);
$item = json_decode($json, true);
echo $item['name'], PHP_EOL;
```

#### Ruby

```ruby
require "json"
require "net/http"

uri = URI("https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191")
res = Net::HTTP.get_response(uri, { "User-Agent" => "mon-application/1.0 (contact@example.com)" })
item = JSON.parse(res.body)
puts item["name"]
```

#### Go

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("User-Agent", "mon-application/1.0 (contact@example.com)")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	var item map[string]any
	if err := json.NewDecoder(res.Body).Decode(&item); err != nil {
		panic(err)
	}
	fmt.Println(item["name"])
}
```

#### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Exemple {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create(
                "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191"))
            .header("User-Agent", "mon-application/1.0 (contact@example.com)")
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        // JSON à lire avec Jackson, Gson ou le client WowDb.java (sans dépendance)
        System.out.println(response.body());
    }
}
```

#### .NET

```csharp
using System.Net.Http;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("mon-application/1.0 (contact@example.com)");
var json = await http.GetStringAsync(
    "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement.GetProperty("name").GetString());
```

#### Rust

```rust
// Cargo.toml : ureq = { version = "2", features = ["json"] } et serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let item: serde_json::Value = ureq::get("https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191")
        .set("User-Agent", "mon-application/1.0 (contact@example.com)")
        .call()?
        .into_json()?;
    println!("{}", item["name"].as_str().unwrap_or_default());
    Ok(())
}
```

**Réponse** (statut 200)

```json
{
  "object": "item",
  "id": 5191,
  "key": "classic:item:5191",
  "version": "classic",
  "name": "Barbelure cruelle",
  "quality": "rare",
  "quality_name": "Rare",
  "icon": "https://wowdb.assemblee-defias.fr/database-icons/inv_sword_24.jpg",
  "item_level": 24,
  "required_level": 19,
  "slot": "one_hand",
  "slot_name": "À une main",
  "type": "sword",
  "type_name": "Épée",
  "weapon": {
    "damage_min": 30,
    "damage_max": 57,
    "speed": 2.8,
    "dps": 15.5
  },
  "sell_price": 2964,
  "rogue": true,
  "internal": false,
  "tooltip": [
    "Barbelure cruelle",
    "Niveau d'objet 24",
    "Lié quand ramassé",
    "À une main",
    "Épée",
    "Dégâts : 30 - 57",
    "Vitesse 2.80",
    "(15.5 dégâts par seconde)",
    "Durabilité 75 / 75",
    "Niveau 19 requis",
    "Équipé : Augmente de 12 la puissance d'attaque."
  ],
  "url": "https://wowdb.assemblee-defias.fr/?id=classic:item:5191",
  "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191",
  "required_reputation": null,
  "dropped_by": [
    {
      "source_type": "npc",
      "name": "Edwin VanCleef",
      "npc": {
        "object": "npc",
        "id": 639,
        "version": "classic",
        "name": "Edwin VanCleef",
        "url": "https://wowdb.assemblee-defias.fr/?id=classic:npc:639",
        "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/npcs/639"
      },
      "boss": true,
      "instance": {
        "object": "instance",
        "id": 36,
        "version": "classic",
        "name": "Mortemines",
        "type": "dungeon",
        "url": "https://wowdb.assemblee-defias.fr/?instance=classic:36",
        "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/instances/36"
      },
      "difficulty": "normal",
      "difficulty_name": "Normal",
      "chance": 20
    }
  ],
  "rewarded_by": [],
  "summons": null,
  "other_names": [],
  "versions": [
    {
      "object": "item",
      "id": 5191,
      "version": "classic",
      "name": "Barbelure cruelle",
      "url": "https://wowdb.assemblee-defias.fr/?id=classic:item:5191",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/items/5191"
    },
    {
      "object": "item",
      "id": 5191,
      "version": "tbc",
      "name": "Barbelure cruelle",
      "url": "https://wowdb.assemblee-defias.fr/?id=tbc:item:5191",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/tbc/items/5191"
    },
    {
      "object": "item",
      "id": 5191,
      "version": "wotlk",
      "name": "Barbelure cruelle",
      "url": "https://wowdb.assemblee-defias.fr/?id=wotlk:item:5191",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/wotlk/items/5191"
    }
  ],
  "guides": []
}
```

## Lister, filtrer, paginer

Les listes acceptent des filtres combinables. Ici, les dagues rares et épiques utiles au voleur jusqu’au niveau 30, de la meilleure à la moins bonne. Le filtre `rogue=true` est une option : sans lui, la liste contient tout.

Une liste renvoie `{ object: "list", data, has_more, next_cursor, url }` : pour la page suivante, repassez `next_cursor` dans `cursor` ([pagination](https://docs.wowdb.assemblee-defias.fr/pagination)).

**Requête (GET /v1/{version}/items)**

#### cURL

```bash
curl -G https://api.wowdb.assemblee-defias.fr/v1/classic/items \
  -d type=dagger \
  -d rogue=true \
  -d quality=rare,epic \
  -d max_level=30 \
  -d sort=-item_level \
  -d limit=2
```

#### JavaScript

```js
const params = new URLSearchParams({
  type: "dagger",
  rogue: "true",
  quality: "rare,epic",
  max_level: "30",
  sort: "-item_level",
  limit: "2",
});
const res = await fetch(`https://api.wowdb.assemblee-defias.fr/v1/classic/items?${params}`);
if (!res.ok) throw new Error((await res.json()).error.message);
const page = await res.json();
for (const item of page.data) {
  console.log(item.name);
}
```

#### Python

```python
import json
import urllib.parse
import urllib.request

params = urllib.parse.urlencode({
    "type": "dagger",
    "rogue": "true",
    "quality": "rare,epic",
    "max_level": "30",
    "sort": "-item_level",
    "limit": "2",
})
req = urllib.request.Request(
    f"https://api.wowdb.assemblee-defias.fr/v1/classic/items?{params}",
    headers={"User-Agent": "mon-application/1.0 (contact@example.com)"},
)
with urllib.request.urlopen(req) as res:
    page = json.load(res)
for item in page["data"]:
    print(item["name"])
```

#### PHP

```php
<?php
$params = http_build_query([
    'type' => 'dagger',
    'rogue' => 'true',
    'quality' => 'rare,epic',
    'max_level' => '30',
    'sort' => '-item_level',
    'limit' => '2',
]);
$context = stream_context_create([
    'http' => ['header' => "User-Agent: mon-application/1.0 (contact@example.com)\r\n"],
]);
$json = file_get_contents('https://api.wowdb.assemblee-defias.fr/v1/classic/items?' . $params, false, $context);
$page = json_decode($json, true);
foreach ($page['data'] as $item) {
    echo $item['name'], PHP_EOL;
}
```

#### Ruby

```ruby
require "json"
require "net/http"

uri = URI("https://api.wowdb.assemblee-defias.fr/v1/classic/items")
uri.query = URI.encode_www_form(
  type: "dagger",
  rogue: "true",
  quality: "rare,epic",
  max_level: "30",
  sort: "-item_level",
  limit: "2",
)
res = Net::HTTP.get_response(uri, { "User-Agent" => "mon-application/1.0 (contact@example.com)" })
page = JSON.parse(res.body)
page["data"].each do |item|
  puts item["name"]
end
```

#### Go

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
)

func main() {
	params := url.Values{}
	params.Set("type", "dagger")
	params.Set("rogue", "true")
	params.Set("quality", "rare,epic")
	params.Set("max_level", "30")
	params.Set("sort", "-item_level")
	params.Set("limit", "2")
	req, err := http.NewRequest("GET", "https://api.wowdb.assemblee-defias.fr/v1/classic/items?"+params.Encode(), nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("User-Agent", "mon-application/1.0 (contact@example.com)")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	var page struct {
		Data    []map[string]any `json:"data"`
		HasMore bool             `json:"has_more"`
	}
	if err := json.NewDecoder(res.Body).Decode(&page); err != nil {
		panic(err)
	}
	for _, item := range page.Data {
		fmt.Println(item["name"])
	}
}
```

#### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Exemple {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create(
                "https://api.wowdb.assemblee-defias.fr/v1/classic/items?type=dagger&rogue=true&quality=rare,epic&max_level=30&sort=-item_level&limit=2"))
            .header("User-Agent", "mon-application/1.0 (contact@example.com)")
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        // JSON à lire avec Jackson, Gson ou le client WowDb.java (sans dépendance)
        System.out.println(response.body());
    }
}
```

#### .NET

```csharp
using System.Net.Http;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("mon-application/1.0 (contact@example.com)");
var json = await http.GetStringAsync(
    "https://api.wowdb.assemblee-defias.fr/v1/classic/items?type=dagger&rogue=true&quality=rare,epic&max_level=30&sort=-item_level&limit=2");
using var doc = JsonDocument.Parse(json);
foreach (var item in doc.RootElement.GetProperty("data").EnumerateArray())
    Console.WriteLine(item.GetProperty("name").GetString());
```

#### Rust

```rust
// Cargo.toml : ureq = { version = "2", features = ["json"] } et serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let page: serde_json::Value = ureq::get("https://api.wowdb.assemblee-defias.fr/v1/classic/items")
        .set("User-Agent", "mon-application/1.0 (contact@example.com)")
        .query("type", "dagger")
        .query("rogue", "true")
        .query("quality", "rare,epic")
        .query("max_level", "30")
        .query("sort", "-item_level")
        .query("limit", "2")
        .call()?
        .into_json()?;
    for item in page["data"].as_array().into_iter().flatten() {
        println!("{}", item["name"].as_str().unwrap_or_default());
    }
    Ok(())
}
```

**Réponse** (statut 200)

```json
{
  "object": "list",
  "data": [
    {
      "object": "item",
      "id": 23168,
      "key": "classic:item:23168",
      "version": "classic",
      "name": "Dague focale de Dédain",
      "quality": "rare",
      "quality_name": "Rare",
      "icon": "https://wowdb.assemblee-defias.fr/database-icons/inv_weapon_shortblade_07.jpg",
      "item_level": 35,
      "required_level": 30,
      "slot": "one_hand",
      "slot_name": "À une main",
      "type": "dagger",
      "type_name": "Dague",
      "weapon": {
        "damage_min": 22,
        "damage_max": 42,
        "speed": 1.4,
        "dps": 22.9
      },
      "sell_price": 2665,
      "rogue": true,
      "internal": false,
      "tooltip": [
        "Dague focale de Dédain",
        "Niveau d'objet 35",
        "Lié quand ramassé",
        "À une main",
        "Dague",
        "Dégâts : 22 - 42",
        "Vitesse 1.40",
        "(22.9 dégâts par seconde)",
        "Durabilité 65 / 65",
        "Niveau 30 requis",
        "Équipé : Augmente les dégâts et les soins produits par les sorts et effets magiques de 9 au maximum."
      ],
      "url": "https://wowdb.assemblee-defias.fr/?id=classic:item:23168",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/items/23168"
    },
    {
      "object": "item",
      "id": 6691,
      "key": "classic:item:6691",
      "version": "classic",
      "name": "Surin de brochepourceau",
      "quality": "rare",
      "quality_name": "Rare",
      "icon": "https://wowdb.assemblee-defias.fr/database-icons/inv_misc_bone_06.jpg",
      "item_level": 35,
      "required_level": 30,
      "slot": "one_hand",
      "slot_name": "À une main",
      "type": "dagger",
      "type_name": "Dague",
      "weapon": {
        "damage_min": 24,
        "damage_max": 45,
        "speed": 1.5,
        "dps": 23
      },
      "sell_price": 8866,
      "rogue": true,
      "internal": false,
      "tooltip": [
        "Surin de brochepourceau",
        "Niveau d'objet 35",
        "Lié quand ramassé",
        "Unique",
        "À une main",
        "Dague",
        "Dégâts : 24 - 45",
        "Vitesse 1.50",
        "(23.0 dégâts par seconde)",
        "+6 Endurance",
        "+4 Esprit",
        "Durabilité 65 / 65",
        "Niveau 30 requis"
      ],
      "url": "https://wowdb.assemblee-defias.fr/?id=classic:item:6691",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/classic/items/6691"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJrIjpbLTM1LCJzdXJpbiBkZSBicm9jaGVwb3VyY2VhdSIsImNsYXNzaWM6aXRlbTo2NjkxIl0sImgiOiJqY1BDbFRNSFQyIn0",
  "url": "https://api.wowdb.assemblee-defias.fr/v1/classic/items?max_level=30&quality=rare%2Cepic&rogue=true&sort=-item_level&type=dagger"
}
```

## Ressources

- [Objets](https://docs.wowdb.assemblee-defias.fr/items) : Tout le catalogue, avec dégâts, prix, sources et filtre voleur.
- [PNJ](https://docs.wowdb.assemblee-defias.fr/npcs) : Boss, rencontres, butin, ventes, quêtes et emplacements.
- [Quêtes](https://docs.wowdb.assemblee-defias.fr/quests) : Objectifs, récompenses, chaînes, PNJ de début et de fin.
- [Objets du monde](https://docs.wowdb.assemblee-defias.fr/game-objects) : Coffres à crocheter, gisements, herbes et leurs cartes.
- [Donjons et raids](https://docs.wowdb.assemblee-defias.fr/instances) : Rencontres dans l’ordre du jeu et butin par difficulté.
- [Sorts](https://docs.wowdb.assemblee-defias.fr/spells) : Les sorts et talents du voleur, avec leurs rangs.
- [Réputations](https://docs.wowdb.assemblee-defias.fr/factions) : Récompenses par rang, intendants, quêtes et monstres.
- [Ensembles](https://docs.wowdb.assemblee-defias.fr/item-sets) : Pièces et bonus des ensembles.
- [Recherche](https://docs.wowdb.assemblee-defias.fr/search) : Toute la base en une requête, par pertinence.

## Ce que vous pouvez construire

- Un **bot Discord** qui répond `!objet Barbelure cruelle` avec l’icône, l’infobulle et le lien WoWDB.
- Le **site de votre guilde** : butin des raids, listes de souhaits, réputations à monter.
- Un **outil de comparaison** de dagues ou d’épées par dégâts par seconde (`weapon.dps`).
- Une **carte des coffres à crocheter** d’une zone, avec `/game-objects/{id}/locations`.
- Un **assistant IA** qui cite des fiches exactes au lieu d’inventer : [llms.txt et Markdown](https://docs.wowdb.assemblee-defias.fr/llms).

## Pour les assistants IA

Chaque page de cette documentation existe en Markdown (lien « Voir en Markdown », ou ajoutez `.md` à l’adresse) et se copie d’un clic avec « Copier pour un LLM ». L’index [llms.txt](https://docs.wowdb.assemblee-defias.fr/llms.txt) liste toutes les pages, et [llms-full.txt](https://docs.wowdb.assemblee-defias.fr/llms-full.txt) les réunit en un seul fichier. La spécification complète est en [OpenAPI 3.1](https://docs.wowdb.assemblee-defias.fr/openapi).

---

API de WoWDB des Défias, v1 (2026-10-01). Adresse de base : https://api.wowdb.assemblee-defias.fr/v1. Index : https://docs.wowdb.assemblee-defias.fr/llms.txt.
