Online Discord beitreten

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.

  1. Mit Discord auf /user/api-keys.php einloggen.
  2. „Neuen API-Key erstellen" → Label angeben → Key sicher kopieren (wird nur einmal angezeigt).
  3. Request senden:
curl -H "Authorization: Bearer dzt_xxxxxxxx_yyyy…" \
  https://www.dayztools.de/api/v2/items/M4A1?lang=en
Free Tier: 1.000 Calls / Tag, 60 / Minute. Pro User max. 2 aktive Keys.

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.

TierCalls / TagCalls / Minute
free1.00060
supporter10.000120
customnach Vereinbarungnach Vereinbarung

Header bei jedem Call:

X-RateLimit-LimitTageslimit deines Keys
X-RateLimit-Remainingverbleibende Calls heute
X-RateLimit-ResetSekunden bis 00:00 UTC
Retry-Afternur 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

HTTPerrorWann
400bad_requestUngültiger Parameter
401no_keyKein Key übergeben
403invalid_keyKey existiert nicht / revoked / blocked
404not_foundResource oder Class nicht gefunden
429rate_limitTages- oder Minute-Limit überschritten — siehe retry_after
503maintenanceAPI 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.

CodeSprache
enEnglish (default)
deDeutsch
ruРусский
csČeština
plPolski
frFrançais
esEspañol
itItaliano
huMagyar
ptPortuguê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

GET /api/v2/health

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"}}
GET /api/v2/items

Liste aller Items mit Filtern und Pagination.

ParameterTypeBeschreibung
qstringFree-Text-Suche in class_name, display_name, description
categorystringz. B. Weapon, Magazine, Ammo, Clothing, Food, Medical, Vehicle, Building
tierstringTier1 / Tier2 / Tier3 / Tier4 / Unique
usagestringMilitary, Police, Hunting, Industrial, Town, Village, Farm, Coast, Firefighter, Medic
mapstringchernarus / enoch / sakhal
langstringSprachcode (siehe Languages). Default: en
limitint1–200, default 50
offsetintdefault 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"}}
GET /api/v2/items/{class_name}

Volldetail eines Items inkl. Stats, Loot-Economy, Compat-Listen, Recipes und SpawnIn.

ParameterTypeBeschreibung
langstringSprachcode 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":[…]}}
GET /api/v2/items/{class_name}/compat

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"}]}}
GET /api/v2/items/{class_name}/fits-into

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"}]}
GET /api/v2/recipes

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}}
GET /api/v2/recipes/{id}

Ein Rezept mit Zutaten und Ergebnis.

Beispiel-Response
{"ok":true,"data":{"id":"sharpenstoneknife","name":"…","instant":"0","anim_length":"3","ingredients":["StoneKnife","Stone"],"results":["StoneKnife"]}}
GET /api/v2/loot

Loot-Liste mit nominal/min/lifetime/restock. Gefiltert nach map/tier/usage.

ParameterTypeBeschreibung
mapstringchernarus / enoch / sakhal
tierstringTier1–4 / Unique
usagestringMilitary / Police / …
limitint1–500, default 100
offsetintdefault 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}}
GET /api/v2/spawn-in

Ohne ?building= → Liste aller Buildings. Mit ?building= → Items, die dort spawnen können.

ParameterTypeBeschreibung
buildingstringBuilding-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"}}
GET /api/v2/me

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

Bug oder Wunsch? Schreib im DayZTools-Discord oder mach ein Issue.