> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.wynncraft.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.wynncraft.com/_mcp/server.

# Search item database

POST https://api.wynncraft.com/v3/item/search
Content-Type: application/json

This endpoint is cached for 1 hour in the SHARED cache source.   See [Caching](/welcome#caching).  This endpoint belongs to the ITEMS rate-limit bucket. See [Throttling and Rate Limits](/welcome#throttling-and-rate-limits).

Filters can be empty and do not always need to be present in the payload. To understand the endpoint better, try the official Wynncraft item guide while monitoring the network tab in your browser devtools.

`fullResult` bypasses pagination and returns the `results` object for all objects at once.

This endpoint uses the generic pagination response format.

Enum values in these docs are based on the item metadata available on April 23, 2026. New item content can add or change values over time.

Reference: https://docs.wynncraft.com/modules/item-recipe/search-items

## Request

### Query parameters

- `page` (integer, optional)
- `fullResult` (enum, optional) — Presence-based flag that expands responses. Send it without a value as `?fullResult`. Using `?fullResult=true` or `?fullResult=false` is not accepted.
  - Allowed values: ``

### Body (application/json)

This endpoint expects an ItemSearchRequest.

- `query` (string, optional, nullable)
- `type` (ItemSearchRequestType, optional)
- `tier` (ItemSearchRequestTier, optional)
- `attackSpeed` (ItemSearchRequestAttackSpeed, optional)
- `levelRange` (ItemSearchRequestLevelRange, optional)
- `professions` (ItemSearchRequestProfessions, optional)
- `identifications` (ItemSearchRequestIdentifications, optional)
- `majorIds` (ItemSearchRequestMajorIds, optional)

## Response

### 200

Paginated search results.

- `controller` (PaginationController, required)
- `results` (list of Item, required)

## Errors

### 400 Bad Request Error

Invalid request payload.

- `error` (string, required)
- `detail` (string, required)
- `code` (integer, required)

### 404 Not Found Error

No items matched the request.

- `error` (string, required)
- `detail` (string, required)
- `code` (integer, required)

## Types

### ItemSearchRequestType

### ItemSearchRequestTier

### ItemSearchRequestAttackSpeed

### ItemSearchRequestLevelRange

### ItemSearchRequestProfessions

### ItemSearchRequestIdentifications

### ItemSearchRequestMajorIds

### PaginationController

- `count` (integer, required)
- `current_count` (integer, required)
- `pages` (integer, required)
- `prev` (integer, required, nullable)
- `current` (integer, required)
- `next` (integer, required, nullable)

### Item

- `displayName` (string, required)
- `internalName` (string, required)
- `type` (enum, required)
  - Allowed values: `weapon`, `armour`, `accessory`, `charm`, `tome`, `tool`, `material`, `ingredient`
- `subType` (enum, required)
  - Allowed values: `bow`, `dagger`, `relik`, `spear`, `wand`, `boots`, `chestplate`, `helmet`, `leggings`, `bracelet`, `necklace`, `ring`, `guildTome`, `armourTome`, `expertiseTome`, `marathonTome`, `mysticismTome`, `lootrunTome`, `weaponTome`, `axe`, `rod`, `pickaxe`, `scythe`, `farming`, `fishing`, `mining`, `woodcutting`
- `icon` (ItemIcon, required)
- `emblem` (enum, required)
  - Allowed values: `diamond5`, `diamond_5`, `diamond1`, `diamond_1`, `diamond4`, `diamond_4`, `diamond6`, `diamond_6`, `diamond3`, `diamond_3`, `diamond2`, `diamond_2`, `shield5`, `shield_5`, `shield1`, `shield_1`, `shield4`, `shield_4`, `shield6`, `shield_6`, `shield3`, `shield_3`, `shield2`, `shield_2`, `shield`, `sticker5`, `sticker_5`, `sticker1`, `sticker_1`, `sticker4`, `sticker_4`, `sticker6`, `sticker_6`, `sticker3`, `sticker_3`, `sticker2`, `sticker_2`, `square5`, `square_5`, `square4`, `square_4`, `square6`, `square_6`, `square`
- `tier` (enum, required)
  - Allowed values: `rare`, `unique`, `normal`, `legendary`, `mythic`, `fabled`, `TIER3`, `TIER2`, `TIER1`, `TIER0`
- `attackSpeed` (enum, optional)
  - Allowed values: `slow`, `fast`, `superSlow`, `normal`, `verySlow`, `veryFast`, `superFast`
- `averageDps` (double, optional)
- `restriction` (string, optional)
- `dropRestriction` (string, optional)
- `gathering` (enum, optional)
  - Allowed values: `farming`, `fishing`, `mining`, `woodcutting`
- `set` (enum, optional)
  - Allowed values: `boundless`, `corrupted`, `firemoss`, `bony`, `spore`, `petal`, `scrap`, `beachside`, `pigman`, `toxic`, `regal`, `vexing`, `voidglass`, `cosmicFoundations`, `snail`, `thanosLegionnaire`, `uth`, `cosmic`, `leaf`, `tribal`, `saint's`, `visceral`, `ascension`, `ultramarine`, `taigaElk`, `clock`, `nii`, `moirai`, `bleeding`, `liffmail`, `elf`, `slime`, `goblin`, `ghostly`, `horse`, `snow`, `skien's`, `thunderRelic`, `morph`, `black`, `earthRelic`, `waterRelic`, `relic`, `outlaw`, `silverfish`, `nether`, `fireRelic`, `airRelic`, `adventurer`, `darkened`, `bovine`, `bear`, `kaerynn`, `villager`, `spider`, `conqueredSkies`, `synchCore`, `flashfire`, `jester`, `forgottenChronicles`, `wynnterfest2016`, `bandit's`, `desert`, `blackCatalyst`, `constellation`, `hallowynn2016`
- `elements` (list of string, optional)
- `requirements` (ItemRequirements, optional)
- `majorIds` (map from string to string, optional)
- `powderSlots` (integer, optional)
- `lore` (string, optional)
- `identifications` (map from string to IdentificationValue, optional)
- `base` (map from string to IdentificationValue, optional)

### ItemIcon

- `value` (AbilityIconValue, required)
- `format` (string, required)

### ItemRequirements

- `level` (integer, optional)
- `classRequirement` (string, optional)
- `strength` (integer, optional)
- `dexterity` (integer, optional)
- `intelligence` (integer, optional)
- `defence` (integer, optional)
- `agility` (integer, optional)

### IdentificationValue

### AbilityIconValue

- `id` (string, required)
- `name` (string, required)
- `customModelData` (AbilityIconValueCustomModelData, required)

### IdentificationValue1

- `min` (integer, required)
- `raw` (integer, required)
- `max` (integer, required)

### AbilityIconValueCustomModelData

- `rangeDispatch` (list of integer, required)

## Examples

**Request**

```json
{}
```

**Response**

```json
{
  "controller": {
    "count": 3,
    "current_count": 1,
    "pages": 3,
    "prev": 1,
    "current": 2,
    "next": 3
  },
  "results": [
    {
      "displayName": "Idol",
      "internalName": "Idol",
      "type": "weapon",
      "subType": "spear",
      "icon": {
        "value": {
          "id": "minecraft:potion",
          "name": "spear.water3",
          "customModelData": {
            "rangeDispatch": [
              3024
            ]
          }
        },
        "format": "attribute"
      },
      "emblem": "diamond_5",
      "tier": "mythic",
      "attackSpeed": "normal",
      "averageDps": 533,
      "restriction": "none",
      "dropRestriction": "normal",
      "elements": [
        "water"
      ],
      "requirements": {
        "level": 95,
        "classRequirement": "warrior",
        "intelligence": 120
      },
      "majorIds": {
        "Tidal Drift": "<span class='font-ascii' style='color:#AAAAAA'>Flying Kick will instead send you forwards. This effect is limited to once per Charge cast.</span>"
      },
      "powderSlots": 3,
      "lore": "<span class='font-ascii' style='color:#AAAAAA'>Intricate carvings and images, almost like that of a totem pole, cover the shaft of this marvelous trident, dredged up from the Seavale Reef. Foreign magics heighten the senses of its user in battle, but also instills a longing for the ocean. Many have succumbed to this urge and drowned themselves.</span>",
      "identifications": {
        "manaRegen": {
          "min": 3,
          "raw": 10,
          "max": 13
        },
        "reflection": {
          "min": 9,
          "raw": 30,
          "max": 39
        },
        "waterDefence": {
          "min": 5,
          "raw": 15,
          "max": 20
        },
        "rawIntelligence": 26,
        "rawSpellDamage": {
          "min": 79,
          "raw": 264,
          "max": 343
        },
        "raw2ndSpellCost": {
          "min": -15,
          "raw": -50,
          "max": -65
        }
      },
      "base": {
        "baseWaterDamage": {
          "min": 220,
          "raw": 220,
          "max": 300
        }
      }
    }
  ]
}
```

**SDK Code**

```python Paginated item response with a single item
import requests

url = "https://api.wynncraft.com/v3/item/search"

payload = {}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Paginated item response with a single item
const url = 'https://api.wynncraft.com/v3/item/search';
const options = {method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{}'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Paginated item response with a single item
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.wynncraft.com/v3/item/search"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Paginated item response with a single item
require 'uri'
require 'net/http'

url = URI("https://api.wynncraft.com/v3/item/search")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java Paginated item response with a single item
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.wynncraft.com/v3/item/search")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php Paginated item response with a single item
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.wynncraft.com/v3/item/search', [
  'body' => '{}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Paginated item response with a single item
using RestSharp;

var client = new RestClient("https://api.wynncraft.com/v3/item/search");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Paginated item response with a single item
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.wynncraft.com/v3/item/search")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```