Endpoints
Every route is scoped by chronicle; today that’s always interlude.
There are two kinds of list endpoints:
- Paginated, searchable lists —
items,npcs,monsters,items/{id}/dropped-by,items/{id}/spoiled-by. They acceptlimit/offset, and the three main lists also acceptq,sortand filters. See Query parameters. - Catalogs —
quests,classes,hennas,armor-sets,locations,regions,meta/*. They return the whole collection in one response and ignorelimit/offset.
Route lists use real example IDs so URLs can be opened directly.
https://l2api.dev/api/interlude/itemshttps://l2api.dev/api/interlude/items/57https://l2api.dev/api/interlude/items/57/dropped-byhttps://l2api.dev/api/interlude/items/57/spoiled-bydropped-by and spoiled-by list the monsters that drop or spoil an item (paginated). For the full drop table of one monster see /monsters/{id}/drops below.
https://l2api.dev/api/interlude/npcshttps://l2api.dev/api/interlude/npcs/30048https://l2api.dev/api/interlude/npcs/30048/shophttps://l2api.dev/api/interlude/npcs/30048/spawnshttps://l2api.dev/api/interlude/npcs/22001/drops/npcs/{id}/drops returns drops: [] for NPCs that exist but have no drop table (e.g. merchants like 30048), and 404 only for unknown ids. /drops/npc/{id} is an alias with the identical response.
Monsters
Section titled “Monsters”https://l2api.dev/api/interlude/monstershttps://l2api.dev/api/interlude/monsters/22001https://l2api.dev/api/interlude/monsters/22001/dropsMonster detail does not embed the drop table — fetch it from /monsters/{id}/drops. To go the other way (which monsters drop or spoil an item), use /items/{id}/dropped-by and /items/{id}/spoiled-by above.
Quests
Section titled “Quests”https://l2api.dev/api/interlude/questshttps://l2api.dev/api/interlude/quests/1Classes
Section titled “Classes”https://l2api.dev/api/interlude/classeshttps://l2api.dev/api/interlude/classes/2Hennas
Section titled “Hennas”https://l2api.dev/api/interlude/hennashttps://l2api.dev/api/interlude/hennas/1Armor sets
Section titled “Armor sets”https://l2api.dev/api/interlude/armor-setsLocations
Section titled “Locations”https://l2api.dev/api/interlude/locationsRegions
Section titled “Regions”https://l2api.dev/api/interlude/regionshttps://l2api.dev/api/interlude/meta/item-gradeshttps://l2api.dev/api/interlude/meta/item-typeshttps://l2api.dev/api/interlude/meta/npc-typesRaw audit routes
Section titled “Raw audit routes”Source-faithful records, mainly for auditing and debugging — see Scope.
https://l2api.dev/api/interlude/raw/npcshttps://l2api.dev/api/interlude/raw/npcs/30048https://l2api.dev/api/interlude/raw/monstershttps://l2api.dev/api/interlude/raw/monsters/29001https://l2api.dev/api/interlude/raw/monsters/29001/spawnsQuery parameters
Section titled “Query parameters”Only the parameters listed here are supported. Unknown parameters are ignored; invalid values return 400 with the list of allowed values.
Search — q
Section titled “Search — q”items, npcs and monsters support q: a case-insensitive substring match on name.
https://l2api.dev/api/interlude/items?q=swordhttps://l2api.dev/api/interlude/monsters?q=wolfhttps://l2api.dev/api/interlude/npcs?q=gatekeeperItem filters — type, grade
Section titled “Item filters — type, grade”| Param | Allowed values |
|---|---|
type | weapon, armor, etcitem |
grade | none, d, c, b, a, s |
https://l2api.dev/api/interlude/items?type=weapon&grade=d&q=swordhttps://l2api.dev/api/interlude/items?type=armor&grade=sNPC / monster filters — levelMin, levelMax, npcType
Section titled “NPC / monster filters — levelMin, levelMax, npcType”| Param | Notes |
|---|---|
levelMin | Integer. Keeps records with level >= levelMin. |
levelMax | Integer. Keeps records with level <= levelMax. levelMin > levelMax is a 400. |
npcType | Case-insensitive. On /monsters only monster types are accepted (Monster, RaidBoss, GrandBoss, …); on /npcs any type from /meta/npc-types (Merchant, Guard, Gatekeeper, …). |
https://l2api.dev/api/interlude/monsters?levelMin=20&levelMax=30https://l2api.dev/api/interlude/monsters?npcType=RaidBoss&levelMin=40&levelMax=50https://l2api.dev/api/interlude/npcs?npcType=Merchant&q=weaponSorting — sort
Section titled “Sorting — sort”sort=<field> sorts ascending, sort=-<field> descending. Ties fall back to id ascending, so pages never overlap.
| Endpoint | Fields |
|---|---|
items | id, name, grade |
npcs, monsters | id, name, level |
https://l2api.dev/api/interlude/monsters?npcType=RaidBoss&sort=-level&limit=5https://l2api.dev/api/interlude/items?type=weapon&grade=a&sort=namePagination — limit, offset
Section titled “Pagination — limit, offset”Paginated lists accept limit and offset. Filters apply first, then sort, then pagination; meta.total is the count after filtering.
https://l2api.dev/api/interlude/items?q=sword&limit=10&offset=20limit— records per page. Default50(25ondropped-by/spoiled-by), max200(larger values are clamped, not rejected).offset— records to skip. Default0.
{ "data": [ ], "meta": { "total": 431, "limit": 10, "offset": 20 }}Catalog endpoints (quests, classes, hennas, armor-sets, locations, regions, meta/*) return everything in one response and ignore limit / offset; their meta.limit equals meta.total.
Existence rules for relation endpoints
Section titled “Existence rules for relation endpoints”For items/{id}/dropped-by, items/{id}/spoiled-by, npcs/{id}/drops, monsters/{id}/drops and drops/npc/{id}:
- The parent item / NPC / monster does not exist →
404. - The parent exists but the relation is empty →
200with an emptydatalist (ordrops: []).
Errors
Section titled “Errors”Failed requests return a flat error message and a status code:
{ "error": "Invalid id: abc", "status": 400}