API v2 Reference
REST-API für die DayZTools ItemDB 2.0. Read-only, JSON, CORS aktiv. 4.832 Items, 180 Recipes, 41.208 Spawn-Mappings, 13 Sprachen.
Quickstart
Hol dir einen Key, dann schick deinen ersten Request.
- Mit Discord auf /user/api-keys.php einloggen.
- „Neuen API-Key erstellen" → Label angeben → Key sicher kopieren (wird nur einmal angezeigt).
- Request senden:
curl -H "Authorization: Bearer dzt_xxxxxxxx_yyyy…" \
https://www.dayztools.de/api/v2/items/M4A1?lang=en
Authentication
Bearer-Token im Authorization-Header. Alternativ ?key=… als Query-Parameter (für Embeds; weniger sicher, da der Key in URLs/Logs erscheint).
Authorization: Bearer dzt_a3f9c12b_4d2e6f8a1b9c3d5e7f0a2b4c6d8e0f12
Format: dzt_ + 8 Hex-Zeichen Prefix + _ + 32 Hex-Zeichen Secret. Ein ungültiger oder revokter Key gibt 403 Forbidden, ein fehlender Key 401 Unauthorized.
Rate Limits
Jeder Response enthält Rate-Limit-Header. Bei Überschreitung kommt 429 Too Many Requests mit Retry-After.
| Tier | Calls / Tag | Calls / Minute |
|---|---|---|
free | 1.000 | 60 |
supporter | 10.000 | 120 |
custom | nach Vereinbarung | nach Vereinbarung |
Header bei jedem Call:
X-RateLimit-Limit | Tageslimit deines Keys |
X-RateLimit-Remaining | verbleibende Calls heute |
X-RateLimit-Reset | Sekunden bis 00:00 UTC |
Retry-After | nur bei 429: Sekunden bis Retry sinnvoll |
Reset täglich um 00:00 UTC. Tageszähler abrufen via GET /me.
Response Format
Alle Responses sind JSON mit einem konsistenten Envelope:
{
"ok": true,
"data": // Resource oder Array,
"meta": { // optional, bei Listen
"total": 4832,
"limit": 50,
"offset": 0,
"lang": "en"
}
}
Bei Fehlern:
{
"ok": false,
"error": "rate_limit",
"message": "Rate limit exceeded.",
"retry_after": 42
}
Errors
| HTTP | error | Wann |
|---|---|---|
| 400 | bad_request | Ungültiger Parameter |
| 401 | no_key | Kein Key übergeben |
| 403 | invalid_key | Key existiert nicht / revoked / blocked |
| 404 | not_found | Resource oder Class nicht gefunden |
| 429 | rate_limit | Tages- oder Minute-Limit überschritten — siehe retry_after |
| 503 | maintenance | API offline (Kill-Switch aktiviert) |
Pagination & Filter
Listen-Endpoints (/items, /loot) unterstützen limit und offset. Filter werden als zusätzliche Query-Parameter angehängt und mit AND kombiniert.
GET /api/v2/items?category=Weapon&tier=Tier4&map=chernarus&limit=20&offset=40
Die meta-Properties total / limit / offset verraten dir die Gesamtanzahl. Mit offset = (page - 1) * limit blätterst du durch.
Languages
Item-display_name und description sind in 13 Sprachen verfügbar. Wähle mit ?lang=<code>. Default: Englisch.
| Code | Sprache |
|---|---|
en | English (default) |
de | Deutsch |
ru | Русский |
cs | Čeština |
pl | Polski |
fr | Français |
es | Español |
it | Italiano |
hu | Magyar |
pt | Português |
zh | 繁體中文 |
zh-cn | 简体中文 |
ja | 日本語 |
curl -H "Authorization: Bearer $KEY" \
"https://www.dayztools.de/api/v2/items/BearTrap?lang=de"
// → "display_name": "Bärenfalle"
Endpoints
Base-URL: https://www.dayztools.de/api/v2
Status-Check. Kein API-Key nötig, kein Rate-Limit.
Beispiel-Response
{"ok":true,"data":{"status":"ok","time":"2026-05-09T11:15:34+00:00","version":"v2"}}
Liste aller Items mit Filtern und Pagination.
| Parameter | Type | Beschreibung |
|---|---|---|
q | string | Free-Text-Suche in class_name, display_name, description |
category | string | z. B. Weapon, Magazine, Ammo, Clothing, Food, Medical, Vehicle, Building |
tier | string | Tier1 / Tier2 / Tier3 / Tier4 / Unique |
usage | string | Military, Police, Hunting, Industrial, Town, Village, Farm, Coast, Firefighter, Medic |
map | string | chernarus / enoch / sakhal |
lang | string | Sprachcode (siehe Languages). Default: en |
limit | int | 1–200, default 50 |
offset | int | default 0 |
Beispiel-Response
{"ok":true,"data":[{"class_name":"M4A1","display_name":"M4-A1","category":"Weapon","icon_file":"icons/M4A1.png","weight":2276,"size_w":8,"size_h":3,"dz_tags":null,"dz_seen_in_last_import":1}],"meta":{"total":4832,"limit":50,"offset":0,"lang":"en"}}
Volldetail eines Items inkl. Stats, Loot-Economy, Compat-Listen, Recipes und SpawnIn.
| Parameter | Type | Beschreibung |
|---|---|---|
lang | string | Sprachcode für display_name + description. Default: en |
Beispiel-Response
{"ok":true,"data":{"class_name":"M4A1","display_name":"M4-A1","description":"Standardized 5.56 mm assault rifle...","category":"Weapon","weight":2276,"damage":8,"rpm_full_auto":923.1,"init_speed":850,"primary_ammo":"Ammo_556x45","loot_tier":["Tier3"],"loot_usage":["Military"],"compat_attachments":[…],"compat_magazines":[…],"compat_ammo":[…],"recipes":[…],"spawn_in":[…]}}
Was passt drauf — Attachments, Magazines, Ammo.
Beispiel-Response
{"ok":true,"data":{"attachments":[{"attachment":"M68Optic","slot":"weaponOptics","icon_file":"icons/M68Optic.png"}],"magazines":[{"magazine":"Mag_STANAG_30Rnd","icon_file":"icons/Mag_STANAG_30Rnd.png"}],"ammo":[{"ammo":"Ammo_556x45","kind":"chamber","icon_file":"icons/Ammo_556x45.png"}]}}
Wo passt das Item rein (z. B. ein Optic in welche Waffen).
Beispiel-Response
{"ok":true,"data":[{"carrier":"AK74","slot":"weaponOptics","icon_file":"icons/AK74.png"}]}
Alle Crafting-Rezepte. Liste mit ID + Name + Animations-Dauer.
Beispiel-Response
{"ok":true,"data":[{"id":"attachholster","name":"#STR_AttachHolster0","instant":"0","anim_length":"0.5"}],"meta":{"total":180}}
Ein Rezept mit Zutaten und Ergebnis.
Beispiel-Response
{"ok":true,"data":{"id":"sharpenstoneknife","name":"…","instant":"0","anim_length":"3","ingredients":["StoneKnife","Stone"],"results":["StoneKnife"]}}
Loot-Liste mit nominal/min/lifetime/restock. Gefiltert nach map/tier/usage.
| Parameter | Type | Beschreibung |
|---|---|---|
map | string | chernarus / enoch / sakhal |
tier | string | Tier1–4 / Unique |
usage | string | Military / Police / … |
limit | int | 1–500, default 100 |
offset | int | default 0 |
Beispiel-Response
{"ok":true,"data":[{"class_name":"AK74","display_name":"KA-74","category":"Weapon","loot_nominal":6,"loot_min":4,"loot_lifetime":28800,"loot_restock":0}],"meta":{"total":300,"limit":100,"offset":0}}
Ohne ?building= → Liste aller Buildings. Mit ?building= → Items, die dort spawnen können.
| Parameter | Type | Beschreibung |
|---|---|---|
building | string | Building-Klassenname, z. B. Land_Mil_Barracks5 |
Beispiel-Response
{"ok":true,"data":[{"class_name":"AK74","display_name":"KA-74","category":"Weapon","icon_file":"icons/AK74.png"}],"meta":{"total":12,"building":"Land_Mil_Barracks5"}}
Status des aktuellen API-Keys: Tier, Limits, heutige Calls, Restkontingent.
Beispiel-Response
{"ok":true,"data":{"key_id":"dzt_a3f9c12b","prefix":"a3f9c12b","label":"Discord-Bot","tier":"free","daily_limit":1000,"per_minute":60,"calls_today":42,"errors_today":0,"remaining":958,"total_calls":12345,"last_used_at":"2026-05-09 11:42:01"}}
Code-Beispiele
KEY="dzt_xxxxxxxx_yyyy…"
# Detail eines Items
curl -H "Authorization: Bearer $KEY" \
"https://www.dayztools.de/api/v2/items/M4A1?lang=de"
# Liste mit Filtern
curl -H "Authorization: Bearer $KEY" \
"https://www.dayztools.de/api/v2/items?category=Weapon&tier=Tier3&limit=20"
# Eigener Key-Status
curl -H "Authorization: Bearer $KEY" \
https://www.dayztools.de/api/v2/me
const KEY = 'dzt_xxxxxxxx_yyyy…';
async function getItem(name, lang = 'en') {
const res = await fetch(
`https://www.dayztools.de/api/v2/items/${name}?lang=${lang}`,
{ headers: { Authorization: `Bearer ${KEY}` } }
);
const { data } = await res.json();
return data;
}
const m4 = await getItem('M4A1', 'de');
console.log(m4.display_name, m4.compat_magazines);
import requests
KEY = "dzt_xxxxxxxx_yyyy…"
BASE = "https://www.dayztools.de/api/v2"
def search(category, tier=None, lang="en"):
r = requests.get(
f"{BASE}/items",
params={"category": category, "tier": tier, "lang": lang, "limit": 50},
headers={"Authorization": f"Bearer {KEY}"},
timeout=10,
)
r.raise_for_status()
return r.json()["data"]
weapons = search("Weapon", tier="Tier4", lang="de")
for w in weapons:
print(w["class_name"], "—", w["display_name"])
<?php
$key = 'dzt_xxxxxxxx_yyyy…';
$ctx = stream_context_create(['http' => [
'header' => "Authorization: Bearer $key",
]]);
$json = file_get_contents(
'https://www.dayztools.de/api/v2/items/M4A1?lang=de', false, $ctx
);
$data = json_decode($json, true)['data'];
echo $data['display_name'], "\n";
Bug oder Wunsch? Schreib im DayZTools-Discord oder mach ein Issue.