# Objets

> Les 80 745 objets de Vanilla, TBC et WotLK : qualité, niveaux, emplacement, dégâts, prix, infobulle, sources, filtre voleur.

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

## Objets

Tout le catalogue des objets du jeu, dans les trois versions : armes, armures, consommables, recettes, objets de quête… Les objets internes du jeu (tests, doublons, objets jamais sortis) sont absents des listes et de la recherche, mais restent joignables par leur numéro, avec `internal: true`.

**Routes**

- `GET /v1/{version}/items` : Lister les objets
- `GET /v1/{version}/items/{id}` : Obtenir un objet

## L’objet item

Un objet du jeu. Les listes renvoient le résumé ; la fiche ajoute les champs « fiche seulement » : sources de butin, quêtes, réputation requise, versions, guides.

- `object` (chaîne) : Type d’objet, toujours « item ». Valeurs : `item`.
- `id` (entier) : Identifiant de l’objet : son numéro dans le jeu (entrée de la base du jeu), le même dans les trois versions quand l’objet y existe.
- `key` (chaîne) : Clé WoWDB, unique dans toute la base : « <version>:<type>:<id> » (classic:item:5191).
- `version` (code) : Version du jeu de cette fiche. Valeurs : `classic`, `tbc`, `wotlk`.
- `name` (chaîne) : Nom français, comme en jeu.
- `quality` (code ou null) : Qualité de l’objet (couleur du nom en jeu). Valeurs : `poor`, `common`, `uncommon`, `rare`, `epic`, `legendary`, `artifact`, `heirloom`.
- `quality_name` (chaîne ou null) : Qualité, libellé français.
- `icon` (chaîne ou null) : Adresse absolue de l’icône du jeu (WebP, JPEG ou PNG), servie par WoWDB ; null si la fiche n’en a pas.
- `item_level` (entier ou null) : Niveau d’objet.
- `required_level` (entier ou null) : Niveau requis pour l’équiper ou l’utiliser.
- `slot` (code ou null) : Emplacement d’équipement ; null si l’objet ne se porte pas. Valeurs : voir les codes (https://docs.wowdb.assemblee-defias.fr/filtres#codes).
- `slot_name` (chaîne ou null) : Emplacement, libellé du jeu (« À une main »).
- `type` (code ou null) : Type d’objet : sous-classe pour les armes et armures (dague, cuir…), classe pour les autres. Valeurs : voir les codes (https://docs.wowdb.assemblee-defias.fr/filtres#codes).
- `type_name` (chaîne ou null) : Type, libellé français.
- `weapon` (objet ou null) : Caractéristiques d’arme lues dans l’infobulle ; null hors des armes.
  - `damage_min` (entier) : Dégâts minimum.
  - `damage_max` (entier) : Dégâts maximum.
  - `speed` (nombre) : Vitesse d’attaque en secondes.
  - `dps` (nombre) : Dégâts par seconde.
- `sell_price` (entier ou null) : Prix de vente à un marchand, en pièces de cuivre (10 000 = 1 pièce d’or) ; null si invendable.
- `rogue` (booléen) : Utile au voleur : arme ou armure qu’il porte, objet qui lui est réservé, fourniture (poisons, crochets, poudres), objet cité par un guide.
- `internal` (booléen) : Objet interne du jeu (test, doublon, jamais sorti) : absent des listes et de la recherche, mais joignable par son identifiant.
- `tooltip` (tableau de chaînes) : Infobulle du jeu, ligne par ligne, en français (sans le prix de vente, donné par sell_price).
- `url` (chaîne) : Adresse publique de la fiche sur WoWDB (page HTML, à donner à vos lecteurs).
- `api_url` (chaîne) : Adresse de l’objet dans l’API.

Champs de la fiche seulement (`GET …/{id}`) :

- `required_reputation` (objet ou null) : Réputation requise pour l’acheter ou l’utiliser.
  - `faction` (Ref ou null) : La réputation, quand elle a une fiche.
  - `name` (chaîne) : Nom de la faction.
  - `rank` (code ou null) : Rang requis. Valeurs : `hated`, `hostile`, `unfriendly`, `neutral`, `friendly`, `honored`, `revered`, `exalted`.
  - `rank_name` (chaîne ou null) : Rang requis, libellé du jeu.
- `dropped_by` (tableau d’objets) : Où il tombe dans les donjons et raids : monstres, boss et coffres, par difficulté.
  - `source_type` (chaîne) : « npc » (créature) ou « game_object » (coffre).
  - `name` (chaîne) : Nom de la source.
  - `npc` (Ref ou null) : Fiche du PNJ, quand elle existe.
  - `boss` (booléen) : Vrai pour un boss.
  - `instance` (InstanceRef) : Le donjon ou raid.
  - `difficulty` (code ou null) : Difficulté. Valeurs : `normal`, `heroic`, `10_player`, `25_player`, `10_player_heroic`, `25_player_heroic`.
  - `difficulty_name` (chaîne ou null) : Difficulté, libellé français.
  - `chance` (nombre ou null) : Chance de butin en pour cent.
- `rewarded_by` (tableau d’objets) : Quêtes qui le donnent en récompense.
  - `quest` (Ref) : La quête.
  - `choice` (booléen) : Vrai si c’est une récompense au choix.
- `summons` (objet ou null) : Monture ou compagnon que l’objet invoque.
  - `type` (chaîne) : « mount », « companion » ou « other ».
  - `name` (chaîne ou null) : Nom de la créature.
  - `npc` (Ref ou null) : Fiche de la créature.
- `other_names` (tableau de chaînes) : Autres noms : nom anglais, anciens noms français.
- `versions` (tableau de Ref) : La même fiche dans chaque version du jeu où elle existe (elle comprise).
- `guides` (tableau d’objets) : Guides de L’Assemblée des Défias qui citent cette fiche.
  - `title` (chaîne) : Titre du guide.
  - `url` (chaîne) : Adresse du guide sur assemblee-defias.fr.

**Exemple : objet** (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 les objets

`GET /v1/{version}/items`

Tous les objets d’une version (internes exclus), triés par nom par défaut. Le filtre rogue=true garde ceux qui servent au voleur.

**Paramètres**

- `version` (code, dans le chemin, obligatoire) : Version du jeu : classic (Vanilla 1.12.1), tbc (2.4.3) ou wotlk (3.3.5a). Valeurs : `classic`, `tbc`, `wotlk`.
- `q` (chaîne, facultatif) : Filtre sur le nom : chaque mot doit commencer un mot du nom (« lame om » trouve « Lame de l’ombre »). Sans accent ni majuscule nécessaires.
- `quality` (codes séparés par des virgules, facultatif) : Qualités. Plusieurs valeurs séparées par des virgules. Valeurs : `poor`, `common`, `uncommon`, `rare`, `epic`, `legendary`, `artifact`, `heirloom`.
- `slot` (codes séparés par des virgules, facultatif) : Emplacements. Plusieurs valeurs séparées par des virgules. Valeurs : voir https://docs.wowdb.assemblee-defias.fr/filtres#codes.
- `type` (codes séparés par des virgules, facultatif) : Types d’objet. Plusieurs valeurs séparées par des virgules. Valeurs : voir https://docs.wowdb.assemblee-defias.fr/filtres#codes.
- `min_level` (entier, facultatif) : Niveau requis minimum (1 à 100).
- `max_level` (entier, facultatif) : Niveau requis maximum (1 à 100).
- `min_item_level` (entier, facultatif) : Niveau d’objet minimum.
- `max_item_level` (entier, facultatif) : Niveau d’objet maximum.
- `rogue` (booléen, facultatif) : true : seulement les objets utiles au voleur ; false : seulement les autres. Absent : tout (par défaut).
- `sort` (chaîne, facultatif) : Ordre : name, item_level, required_level, quality ; « - » devant inverse l’ordre (-item_level : du plus haut au plus bas). Valeurs vides en fin de liste. Par défaut : name. Valeurs : `name`, `-name`, `item_level`, `-item_level`, `required_level`, `-required_level`, `quality`, `-quality`.
- `limit` (entier, facultatif) : Nombre d’éléments par page, de 1 à 100 (20 par défaut).
- `cursor` (chaîne, facultatif) : Curseur de la page suivante : la valeur de next_cursor de la page précédente, avec les mêmes filtres.
- `include_total` (booléen, facultatif) : true : ajoute total_count, le nombre total d’éléments avec ces filtres.

**Renvoie** : Une liste (`object: "list"`) d’objets `item`, paginée par curseur.

**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"
}
```

## Obtenir un objet

`GET /v1/{version}/items/{id}`

La fiche complète de l’objet : les champs de la liste, plus ceux marqués « fiche seulement ».

**Paramètres**

- `version` (code, dans le chemin, obligatoire) : Version du jeu : classic (Vanilla 1.12.1), tbc (2.4.3) ou wotlk (3.3.5a). Valeurs : `classic`, `tbc`, `wotlk`.
- `id` (entier, dans le chemin, obligatoire) : Identifiant du jeu de l’objet.

**Renvoie** : La fiche complète, objet `item` (champs du résumé et champs « fiche seulement »), ou une erreur 404.

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

#### 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": []
}
```

---

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.
