Skip to content

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 accept limit / offset, and the three main lists also accept q, sort and filters. See Query parameters.
  • Catalogs — quests, classes, hennas, armor-sets, locations, regions, meta/*. They return the whole collection in one response and ignore limit / offset.

Route lists use real example IDs so URLs can be opened directly.

https://l2api.dev/api/interlude/items
https://l2api.dev/api/interlude/items/57
https://l2api.dev/api/interlude/items/57/dropped-by
https://l2api.dev/api/interlude/items/57/spoiled-by

dropped-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/npcs
https://l2api.dev/api/interlude/npcs/30048
https://l2api.dev/api/interlude/npcs/30048/shop
https://l2api.dev/api/interlude/npcs/30048/spawns
https://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.

https://l2api.dev/api/interlude/monsters
https://l2api.dev/api/interlude/monsters/22001
https://l2api.dev/api/interlude/monsters/22001/drops

Monster 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.

https://l2api.dev/api/interlude/quests
https://l2api.dev/api/interlude/quests/1
https://l2api.dev/api/interlude/classes
https://l2api.dev/api/interlude/classes/2
https://l2api.dev/api/interlude/hennas
https://l2api.dev/api/interlude/hennas/1
https://l2api.dev/api/interlude/armor-sets
https://l2api.dev/api/interlude/locations
https://l2api.dev/api/interlude/regions
https://l2api.dev/api/interlude/meta/item-grades
https://l2api.dev/api/interlude/meta/item-types
https://l2api.dev/api/interlude/meta/npc-types

Source-faithful records, mainly for auditing and debugging — see Scope.

https://l2api.dev/api/interlude/raw/npcs
https://l2api.dev/api/interlude/raw/npcs/30048
https://l2api.dev/api/interlude/raw/monsters
https://l2api.dev/api/interlude/raw/monsters/29001
https://l2api.dev/api/interlude/raw/monsters/29001/spawns

Only the parameters listed here are supported. Unknown parameters are ignored; invalid values return 400 with the list of allowed values.

items, npcs and monsters support q: a case-insensitive substring match on name.

https://l2api.dev/api/interlude/items?q=sword
https://l2api.dev/api/interlude/monsters?q=wolf
https://l2api.dev/api/interlude/npcs?q=gatekeeper
ParamAllowed values
typeweapon, armor, etcitem
gradenone, d, c, b, a, s
https://l2api.dev/api/interlude/items?type=weapon&grade=d&q=sword
https://l2api.dev/api/interlude/items?type=armor&grade=s

NPC / monster filters — levelMin, levelMax, npcType

Section titled “NPC / monster filters — levelMin, levelMax, npcType”
ParamNotes
levelMinInteger. Keeps records with level >= levelMin.
levelMaxInteger. Keeps records with level <= levelMax. levelMin > levelMax is a 400.
npcTypeCase-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=30
https://l2api.dev/api/interlude/monsters?npcType=RaidBoss&levelMin=40&levelMax=50
https://l2api.dev/api/interlude/npcs?npcType=Merchant&q=weapon

sort=<field> sorts ascending, sort=-<field> descending. Ties fall back to id ascending, so pages never overlap.

EndpointFields
itemsid, name, grade
npcs, monstersid, name, level
https://l2api.dev/api/interlude/monsters?npcType=RaidBoss&sort=-level&limit=5
https://l2api.dev/api/interlude/items?type=weapon&grade=a&sort=name

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=20
  • limit — records per page. Default 50 (25 on dropped-by / spoiled-by), max 200 (larger values are clamped, not rejected).
  • offset — records to skip. Default 0.
{
"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.

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 → 200 with an empty data list (or drops: []).

Failed requests return a flat error message and a status code:

{
"error": "Invalid id: abc",
"status": 400
}