Navigation
The Ledger Sections

API & dumps

Everything on the Ledger is open data: a public JSON API with no key, and a nightly dump of every public log. The same privacy rules apply as on the pages.

Base URL /api/v1/ledger
Rate limit 60 requests per minute per address
Authentication None: everything here is public
Specification openapi.json

Nightly dumps

Each public log for one UTC day, gzipped; the newest day also has the rankings as of that night. Kept 30 days.

2026-11-01 14 tables · with rankings
2026-10-31 14 tables · with rankings
2026-10-30 14 tables · with rankings
2026-10-29 14 tables · with rankings
2026-10-28 14 tables · with rankings
2026-10-27 14 tables · with rankings
2026-10-26 14 tables · with rankings
2026-10-25 6 tables
2026-10-24 6 tables
2026-10-23 6 tables
2026-10-22 6 tables
2026-10-21 6 tables
2026-10-20 6 tables
2026-10-19 6 tables
2026-10-18 6 tables
2026-10-17 6 tables
2026-10-16 6 tables
2026-10-15 6 tables
2026-10-14 6 tables
2026-10-13 6 tables
2026-10-12 6 tables
2026-10-11 6 tables
2026-10-10 6 tables
2026-10-09 6 tables
2026-10-08 6 tables
2026-10-07 6 tables
2026-10-06 6 tables
2026-10-05 6 tables
2026-10-04 6 tables
2026-10-03 6 tables

Each day lists SHA-256 checksums in /api/v1/ledger/dumps. Chat and login logs are never published.

Reference

125 read-only endpoints, generated from the API's OpenAPI document

Overview

  • GET/api/v1/ledger/ping

    Check the Ledger API

    A cheap, cacheable request for clients and monitors. Like every Ledger endpoint it is limited to 60 requests per minute per client.

  • GET/api/v1/ledger/search

    Search items, monsters, characters, guilds, maps and unique IDs

    Finds entities by name or ID, grouped by kind: items, monsters and maps by any part of the name (exact, then prefix, then contains), characters and guilds by the start of the name. A unique item ID can be typed in decimal or grouped hex (6C2B·33D0). When the query finds little, didYouMean lists names a few edits away. Characters of blocked accounts are never found.

    3 parameters
    q*
    query · stringName, ID or unique item ID
    type
    query · string: item | monster | character | guild | map | uidOne kind only
    limit
    query · integerResults per kind; 5 across kinds, 20 for one kind by default
  • GET/api/v1/ledger/status

    Server status

    Live health of every game server process, 90 days of uptime, incidents and the next maintenance window. Counts only, never player identities.

  • GET/api/v1/ledger/status/maintenance.ics

    Maintenance calendar

    Scheduled maintenance windows (upcoming and the last 30 days) as an iCalendar feed to subscribe to.

  • GET/api/v1/ledger/summary

    Get the Ledger's headline figures

    Population, totals with 7-day changes, the zeny supply and today's trades. Staff and blocked accounts are excluded.

Logs

  • GET/api/v1/ledger/logs/cash

    Cash log

    Cash and Kafra point changes (v1): the character, what moved the points, the currency and the amount (negative when spent). Range defaults to 30d; sorts: time, amount. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringType codes, comma-separated (see typeCounts), e.g. $,N
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID
  • GET/api/v1/ledger/logs/cash/export

    Cash log export

    The cash log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringType codes, comma-separated (see typeCounts), e.g. $,N
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID
  • GET/api/v1/ledger/logs/commands

    GM command log

    Every @command staff accounts ran: the staff character, the command and, where they can't carry personal data or free text, its arguments. Broadcasts, messages, punishments, account tools and unknown commands show their name only (redacted). Players' own commands aren't listed. Range defaults to 30d; sort: time.

    8 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    command
    query · stringA command name, with or without its @, e.g. item
    char
    query · stringThe issuing staff character's name
  • GET/api/v1/ledger/logs/commands/export

    GM command log export

    The gm command log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    command
    query · stringA command name, with or without its @, e.g. item
    char
    query · stringThe issuing staff character's name
  • GET/api/v1/ledger/logs/credits

    Credits log

    The cash log's website side: every change to a credit balance. Credits bought, moved between master accounts (listed once), granted as goodwill or adjusted by staff, spent in the item shop, and reversed. Rows never identify an account: no master account, handle, transfer partner, staff member, note, payment or order reference, or balance. Times are to the second. Range defaults to 30d; sort: time.

    7 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringKind codes, comma-separated (see typeCounts), e.g. purchase,shop_purchase
  • GET/api/v1/ledger/logs/credits/export

    Credits log export

    The credits log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    8 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringKind codes, comma-separated (see typeCounts), e.g. purchase,shop_purchase
  • GET/api/v1/ledger/logs/drops

    Drop log

    Items monsters dropped, with the monster. Rows carry no map: with the time, it would locate the killer or looter. card=true keeps cards only. Range defaults to 24h; sort: time. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    item
    query · stringItem ID or part of its name
    card
    query · booleanCards only
  • GET/api/v1/ledger/logs/drops/export

    Drop log export

    The drop log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    item
    query · stringItem ID or part of its name
    card
    query · booleanCards only
  • GET/api/v1/ledger/logs/events

    Event reward log

    What staff handed out to players with #item, #item2, #itembound, #itembound2, #zeny, #cash and #points, and to whom, under the event label they opened in game with @event (absent when none was open). Rows name the staff character and the recipient, the item (with refine and the unique ID for the item passport) or the zeny or points, and no map. Range defaults to 30d; sorts: time, amount.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    event
    query · stringAn event label, exact (as opened with @event)
    unlabelled
    query · booleanOnly rewards handed out without an event label
    type
    query · stringKinds, comma-separated (see typeCounts): item, zeny, cash, points
    char
    query · stringThe recipient's character name
    staff
    query · stringThe staff character's name
  • GET/api/v1/ledger/logs/events/export

    Event reward log export

    The event reward log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    event
    query · stringAn event label, exact (as opened with @event)
    unlabelled
    query · booleanOnly rewards handed out without an event label
    type
    query · stringKinds, comma-separated (see typeCounts): item, zeny, cash, points
    char
    query · stringThe recipient's character name
    staff
    query · stringThe staff character's name
  • GET/api/v1/ledger/logs/items

    Item log

    Items entering (positive amount) and leaving (negative) characters: trades, vending, shops, storage and more, with refine, cards and the unique ID for the item passport. Monster drops and MVP prizes have their own logs. Range defaults to 24h; sorts: time, amount. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringpicklog type codes, comma-separated, e.g. T,V,S
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID (its page's log)
    item
    query · stringItem ID or part of its name
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/items/export

    Item log export

    The item log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringpicklog type codes, comma-separated, e.g. T,V,S
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID (its page's log)
    item
    query · stringItem ID or part of its name
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/mail

    Mail log

    Mails sent in game: the sender (or the server, for mails it sends itself), the receiver, the zeny and every attachment with refine, cards and the unique ID for the item passport. Mail titles and messages are never logged. Rows carry no map: with the time, it would place the sender. Auction settlements and achievement rewards, which the char server writes itself, aren't in this log. Range defaults to 7d; sort: time. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    char
    query · stringCharacter name, sender or receiver
    charId
    query · integerOne character's mails, sent or received, by character ID
    item
    query · stringItem ID or part of its name, attached
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/mail/export

    Mail log export

    The mail log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    char
    query · stringCharacter name, sender or receiver
    charId
    query · integerOne character's mails, sent or received, by character ID
    item
    query · stringItem ID or part of its name, attached
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/mvps

    MVP log

    MVP kills: the credited character, their party at the kill, the monster, the prize, the MVP experience and the fight time (from the first player damage since the MVP spawned). The game server logs the credited character's party only, not the other members. Range defaults to 30d; sort: time. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    char
    query · stringCharacter name
    charId
    query · integerOne character's kills, by character ID (its page's log)
  • GET/api/v1/ledger/logs/mvps/export

    MVP log export

    The mvp log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    char
    query · stringCharacter name
    charId
    query · integerOne character's kills, by character ID (its page's log)
  • GET/api/v1/ledger/logs/refines

    Refine log

    Every refine attempt: the character, the item (with cards and the unique ID for the item passport), the level before and after, the result, and for refine NPCs the material, fee and success chance. The map and the NPC show only when the player shows their map. Range defaults to 30d; sort: time. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringResults, comma-separated (see typeCounts): success, downgrade, break
    char
    query · stringCharacter name
    charId
    query · integerOne character's attempts, by character ID (its page's log)
    item
    query · stringItem ID or part of its name
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/refines/export

    Refine log export

    The refine log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    type
    query · stringResults, comma-separated (see typeCounts): success, downgrade, break
    char
    query · stringCharacter name
    charId
    query · integerOne character's attempts, by character ID (its page's log)
    item
    query · stringItem ID or part of its name
    uid
    query · stringItem unique ID (decimal)
  • GET/api/v1/ledger/logs/trades

    Trade log

    Completed trades: both characters, the zeny and every item (with refine, cards and the unique ID for the item passport) each side gave. Rows carry no map: with the time, it would locate both players. markers are public patterns built from the log itself (oneSided: at least 1,000,000 zeny or a non-stackable item given for nothing; newAccount: one-sided into a game account that joined the website under 7 days before; roundTrip: one leg of a loop, an item that went back to the character who had given it within 7 days; both legs are marked), signs worth a look, not accusations; flagged=true keeps those trades. Range defaults to 7d; sort: time. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    char
    query · stringCharacter name, on either side
    charId
    query · integerOne character's trades, by character ID
    item
    query · stringItem ID or part of its name, given by either side
    uid
    query · stringItem unique ID (decimal)
    flagged
    query · booleanOnly trades with a oneSided or roundTrip marker
  • GET/api/v1/ledger/logs/trades/export

    Trade log export

    The trade log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    char
    query · stringCharacter name, on either side
    charId
    query · integerOne character's trades, by character ID
    item
    query · stringItem ID or part of its name, given by either side
    uid
    query · stringItem unique ID (decimal)
    flagged
    query · booleanOnly trades with a oneSided or roundTrip marker
  • GET/api/v1/ledger/logs/world-firsts

    World-first log

    Every item's first-ever monster drop on the server ("world first"): the item, the monster and the time, with the unique ID for the item passport. Rows name no character and no map: the drop row doesn't say who killed the monster. Drops from before the pick log began aren't known. card=true keeps cards only. Range defaults to all; sort: time.

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    item
    query · stringItem ID or part of its name
    card
    query · booleanCards only
  • GET/api/v1/ledger/logs/world-firsts/export

    World-first log export

    The world-first log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    monster
    query · stringMonster ID or part of its name
    item
    query · stringItem ID or part of its name
    card
    query · booleanCards only
  • GET/api/v1/ledger/logs/zeny

    Zeny log

    Every zeny change: the character, the counterparty (another character, or the source such as an NPC shop), the amount and the balance before and after, with the items of the same transaction. Range defaults to 24h; sorts: time, amount. Every row is public by design, GM-sourced rows included; characters appear by name and accounts only as IDs.

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    minAmount
    query · integerSmallest amount to include
    maxAmount
    query · integerLargest amount to include
    type
    query · stringType codes, comma-separated (see typeCounts), e.g. T,V
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID (its page's log)
    map
    query · stringMap name: only rows of characters whose players show their map match (castles during the running WoE never do)
  • GET/api/v1/ledger/logs/zeny/export

    Zeny log export

    The zeny log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows (X-Export-Limit).

    13 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    minAmount
    query · integerSmallest amount to include
    maxAmount
    query · integerLargest amount to include
    type
    query · stringType codes, comma-separated (see typeCounts), e.g. T,V
    char
    query · stringCharacter name
    charId
    query · integerOne character's rows, by character ID (its page's log)
    map
    query · stringMap name: only rows of characters whose players show their map match (castles during the running WoE never do)

Characters

  • GET/api/v1/ledger/characters

    Find characters by name

    Prefix match on current and former names, so renamed and deleted characters stay findable.

    1 parameters
    name*
    query · stringStart of the name
  • GET/api/v1/ledger/characters/{id}

    Get a character's profile

    Class, levels, guild, party and family, zeny, the account's bank, played time and deaths. Online status respects the player's presence setting; the map appears only with their opt-in. Deleted characters return their last known state with deletedAt. streaming is set while a streamer-program channel shows the character live.

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/achievements

    Get a character's achievements

    Every achievement with the character's progress and the UTC day it earned each. Logs count in complete UTC days only, so today's play shows tomorrow; levels count as they are.

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/cart

    Get a character's cart

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/equipment

    Get a character's worn equipment

    The paperdoll, in slot order: refine, cards, broken, identified and bound state.

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/inventory

    Get a character's inventory

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/logs/items

    Get a character's item log

    4 parameters
    id*
    path · integerCharacter ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/characters/{id}/logs/kills

    Get a character's monster kills

    The killing blows the character dealt, from the game server's hourly kill log: per monster in the range and per day over the last 30 days. Complete UTC days only (today's kills show tomorrow) and no maps, so it can't tell where the character is hunting now. Monster deaths aren't logged per event; the profile has the character's death count.

    2 parameters
    id*
    path · integerCharacter ID
    range
    query · string: 7d | 30d | allRange of the per-monster counts
  • GET/api/v1/ledger/characters/{id}/logs/mvps

    Get a character's MVP kills

    4 parameters
    id*
    path · integerCharacter ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/characters/{id}/logs/refines

    Get a character's refine attempts

    The character's rows of the public refine log (/api/v1/ledger/logs/refines), all time, newest first.

    4 parameters
    id*
    path · integerCharacter ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/characters/{id}/logs/trades

    Get a character's trades

    The character's rows of the public trade log (/api/v1/ledger/logs/trades), all time, newest first.

    4 parameters
    id*
    path · integerCharacter ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/characters/{id}/logs/zeny

    Get a character's zeny log

    4 parameters
    id*
    path · integerCharacter ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/characters/{id}/progress

    Get a character's level progression

    The character's class, levels and EXP at the end of each day on which they changed, oldest first (the last 730 such days). The Ledger records them hourly from `trackedSince` on; earlier levels are unknown. `basePercent` and `jobPercent` are absent at the maximum level and while the game server doesn't export its EXP table.

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/skills

    Get a character's skills

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/{id}/storage

    Get the storage of a character's account

    1 parameters
    id*
    path · integerCharacter ID
  • GET/api/v1/ledger/characters/browse

    List characters

    Every character the Ledger has seen, deleted ones included, from its archive (refreshed every few minutes). Filters: the start of a current or former name, class family, guild, base level and status. Blocked accounts' characters are left out. Sorts: level (base), name, new (first seen).

    8 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    name
    query · stringStart of a current or former name
    class
    query · stringClass family, e.g. knight (see families)
    guild
    query · stringPart of a guild name
    level
    query · stringBase level: 90-99, 90-, -50 or one level
    status
    query · string: live | deletedOnly live or only deleted characters; both by default

Accounts

  • GET/api/v1/ledger/accounts

    List game accounts

    Game accounts by number, with a few of their characters, from the characters archive (refreshed every few minutes). Find one by the start of any current or former name of its characters. Never the login name, email or owner; blocked accounts are left out. Sorts: new (account number), characters (live), level (highest base level).

    4 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    character
    query · stringStart of a current or former character name
  • GET/api/v1/ledger/accounts/{id}

    Get a game account's public page

    The account by number: player or staff, its join date when the website created it, the shared bank, the storage size and its characters. Never the login name, email or address. Blocked accounts are 404s.

    1 parameters
    id*
    path · integerGame account ID
  • GET/api/v1/ledger/accounts/{id}/storage

    Get a game account's storage

    1 parameters
    id*
    path · integerGame account ID

Guilds

  • GET/api/v1/ledger/guilds

    List guilds

    Every guild with its level, members, their average base level, the castles it holds and its leader. Members of hidden accounts aren't counted, and a hidden leader isn't named. Filter: part of the guild's name. Sorts: members, level, castles, name.

    4 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    name
    query · stringPart of the guild's name
  • GET/api/v1/ledger/guilds/{id}

    Get a guild's public page

    Level and EXP, the leader, the members whose accounts may be shown (with their position, tax, devotion, and presence only where the player shows it), alliances and oppositions, the castles held, the current notice and counts of the notices, expulsions and storage stacks.

    1 parameters
    id*
    path · integerGuild ID
  • GET/api/v1/ledger/guilds/{id}/emblem.png

    Get a guild's emblem as PNG

    The emblem the guild uploaded in-game, converted to PNG with the client's magenta key colour transparent. Add `?v={emblemId}` from the guild page so a new emblem is a new URL.

    2 parameters
    id*
    path · integerGuild ID
    v
    query · integerEmblem version (cache key only)
  • GET/api/v1/ledger/guilds/{id}/expulsions

    List a guild's expulsions

    Who was expelled and when the Ledger first saw it. The category is always unspecified: the message typed in-game is never published. Characters of hidden accounts are left out.

    1 parameters
    id*
    path · integerGuild ID
  • GET/api/v1/ledger/guilds/{id}/notices

    List a guild's recorded notices

    The game keeps only the current notice; the Ledger records each change it sees (every few minutes), newest first, up to 100.

    1 parameters
    id*
    path · integerGuild ID
  • GET/api/v1/ledger/guilds/{id}/storage

    Get a guild's storage

    1 parameters
    id*
    path · integerGuild ID

Rankings

  • GET/api/v1/ledger/rankings/{kind}

    Get a ranking

    An hourly snapshot, by rank. Staff are never ranked and permanently banned accounts are hidden; temporarily banned characters keep their rank with banned set. Character rankings count characters active within activeDays. mvp_recent is the latest MVP kills, newest first. Filter by class family, the start of a name, or a list of IDs (e.g. a player's own characters, wherever they rank); mvp also by MVP (its own hourly snapshot), the fame rankings by class and homunculus by line.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    kind*
    path · string: characters | guilds | zeny | deaths | mvp | homunculus | alchemist | blacksmith | mvp_recent
    class
    query · stringClass family, e.g. knight (character rankings)
    name
    query · stringStart of a name (or of a homunculus owner's)
    ids
    query · stringSubject IDs, comma-separated (at most 50): e.g. a player's own characters
    owners
    query · stringHomunculus owners' character IDs, comma-separated (at most 50)
    monster
    query · integermvp: one MVP's hunters, by its kills (monster ID; see monsters)
    job
    query · string: alchemist | creator | blacksmith | whitesmithalchemist or blacksmith fame: one class (second job with its baby form, or transcendent)
    type
    query · string: lif | amistr | filir | vanilmirthhomunculus: one line, first and evolved forms
  • GET/api/v1/ledger/rankings/{kind}/export

    Export a ranking

    The ranking with the same filters as CSV (main columns) or JSON (whole rows).

    12 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    kind*
    path · string: characters | guilds | zeny | deaths | mvp | homunculus | alchemist | blacksmith | mvp_recent
    class
    query · stringClass family, e.g. knight (character rankings)
    name
    query · stringStart of a name (or of a homunculus owner's)
    ids
    query · stringSubject IDs, comma-separated (at most 50): e.g. a player's own characters
    owners
    query · stringHomunculus owners' character IDs, comma-separated (at most 50)
    monster
    query · integermvp: one MVP's hunters, by its kills (monster ID; see monsters)
    job
    query · string: alchemist | creator | blacksmith | whitesmithalchemist or blacksmith fame: one class (second job with its baby form, or transcendent)
    type
    query · string: lif | amistr | filir | vanilmirthhomunculus: one line, first and evolved forms

Items

  • GET/api/v1/ledger/items

    List the item database

    Every item of the game server's item database (db_item export) with the copies in existence at the latest hourly snapshot and a 30-day sparkline. Copies count inventories, carts, vending shops, storage, guild storage and unclaimed mail; staff and blocked accounts are left out. Paged by number.

    22 parameters
    q
    query · stringPart of the name or aegis name, or the item ID
    type
    query · stringItem type: healing, usable, delayConsume, etc, weapon, armor, card, petEgg, petArmor, ammo, shadowGear or cash
    subtype
    query · stringSubtype of the type, as in facets, e.g. BOW; needs type
    slots
    query · stringCard slots: 0, 1+, 2+, 3+ or 4
    equip
    query · stringEquip location: headTop, headMid, headLow, armor, weapon, shield, garment, footgear, accessory or ammo
    job
    query · stringA job that can equip it, e.g. knight or bardDancer; transcendent and baby forms equip what their base job does
    refineable
    query · booleanRefineable items only
    tradeRestricted
    query · booleanOnly items that can't be traded, vended, mailed or dropped
    hasDrop
    query · booleanOnly items a monster drops
    forSale
    query · booleanOnly items in a vending shop at the latest snapshot
    minAttack
    query · integer
    maxAttack
    query · integer
    minDefense
    query · integer
    maxDefense
    query · integer
    minRange
    query · integerSmallest attack range, in cells
    maxRange
    query · integer
    maxWeight
    query · integerHeaviest weight, in the game's units (a Red Potion weighs 7)
    minBuy
    query · integerLowest NPC buy price
    maxBuy
    query · integer
    sort
    query · stringid, name, aegis, type, slots, weight, buy, sell or copies; prefix with - for descending
    page
    query · integerPage number
    perPage
    query · integer: 20 | 50 | 100Items per page
  • GET/api/v1/ledger/items/{id}

    Get an item

    An item's db_item entry with readable equip jobs and restrictions, its copies and holders at the latest snapshot, what entered and left in 30 days, the monsters that drop it (with the configured and effective rate) and the NPCs that sell it.

    1 parameters
    id*
    path · integerItem ID
  • GET/api/v1/ledger/items/{id}/flows

    Get how an item's copies enter and leave

    Daily copies created, destroyed and moved, and the totals per picklog type, from picklog rolled up every minute. Monster drops, NPC shops, scripts, crafting and admin commands create or destroy copies; trades, vending, storage and mail only move them. GM-sourced rows count: admin creations stay visible.

    2 parameters
    id*
    path · integerItem ID
    range
    query · string: 30d | 90d | 1y | all
  • GET/api/v1/ledger/items/{id}/holders

    List an item's holders

    Who holds the item at the latest hourly snapshot, most copies first (ties: best refine). Characters and guilds are named; a game account's storage is listed without the account. Staff and blocked accounts are left out.

    3 parameters
    id*
    path · integerItem ID
    page
    query · integer
    perPage
    query · integer: 10 | 20 | 50 | 100
  • GET/api/v1/ledger/items/{id}/movements

    List an item's movements

    The item log rows of this item, newest first, with the same privacy as the item log: characters by name, a map only when its player shows it. Monster drops are in the drop log.

    4 parameters
    id*
    path · integerItem ID
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
  • GET/api/v1/ledger/items/{id}/prices

    Get an item's price history

    Daily vending prices of an item in one refine bucket: the units-weighted median and 25th–75th percentiles, units and purchases. Carded and crafted copies aren't priced. Also the 7-day median and the item's open listings.

    3 parameters
    id*
    path · integer
    range
    query · string: 30d | 90d | 1y
    refine
    query · integerRefine level; prices are kept per bucket (0, 1–4, 5, 6, 7, 8, 9, 10+)
  • GET/api/v1/ledger/items/{id}/recipes

    Get an item's recipes

    The recipes that make the item and those it's a material or tool of, and Arrow Crafting both ways. Empty lists for an item no recipe mentions.

    1 parameters
    id*
    path · integerItem ID
  • GET/api/v1/ledger/items/{id}/supply

    Get an item's supply over time

    Copies by location at the first snapshot of each UTC day, and the latest snapshot last. Staff and blocked accounts are left out.

    2 parameters
    id*
    path · integerItem ID
    range
    query · string: 30d | 90d | all
  • GET/api/v1/ledger/items/export

    Export the item database

    The item database with the same filters as a CSV or JSON download, at most 100000 rows (X-Export-Limit). Sparklines are left out.

    23 parameters
    q
    query · stringPart of the name or aegis name, or the item ID
    type
    query · stringItem type: healing, usable, delayConsume, etc, weapon, armor, card, petEgg, petArmor, ammo, shadowGear or cash
    subtype
    query · stringSubtype of the type, as in facets, e.g. BOW; needs type
    slots
    query · stringCard slots: 0, 1+, 2+, 3+ or 4
    equip
    query · stringEquip location: headTop, headMid, headLow, armor, weapon, shield, garment, footgear, accessory or ammo
    job
    query · stringA job that can equip it, e.g. knight or bardDancer; transcendent and baby forms equip what their base job does
    refineable
    query · booleanRefineable items only
    tradeRestricted
    query · booleanOnly items that can't be traded, vended, mailed or dropped
    hasDrop
    query · booleanOnly items a monster drops
    forSale
    query · booleanOnly items in a vending shop at the latest snapshot
    minAttack
    query · integer
    maxAttack
    query · integer
    minDefense
    query · integer
    maxDefense
    query · integer
    minRange
    query · integerSmallest attack range, in cells
    maxRange
    query · integer
    maxWeight
    query · integerHeaviest weight, in the game's units (a Red Potion weighs 7)
    minBuy
    query · integerLowest NPC buy price
    maxBuy
    query · integer
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
  • GET/api/v1/ledger/items/facets

    List the item types

    The item types and subtypes of the item database with their counts, for the type and subtype filters.

  • GET/api/v1/ledger/passport/{uid}

    Get an item's passport

    The full chain of custody of one unique item: every logged pick-up, trade, sale, refine and storage move, oldest first, with its inferred origin, its owners over time, whether a GM ever touched it and, for refines to +10, how many copies of the item got there first. Characters appear by name; a map only when the character shows theirs.

    1 parameters
    uid*
    path · stringUnique ID: decimal, or hex as the Ledger groups it (6C2B·33D0)

Market

  • GET/api/v1/ledger/market

    List open vending shops

    Every open vending shop from a snapshot at most a minute old, with the market's headline figures. A shop shows its map; its coordinates only on autotrade or when the owner shows their location. Staff and blocked accounts are left out. Buying stores and auctions aren't available on this server.

    7 parameters
    item
    query · stringPart of an item name, or an item ID
    map
    query · stringMap ID
    minPrice
    query · integerLowest unit price
    maxPrice
    query · integerHighest unit price
    autotrade
    query · booleanOnly autotrade shops
    sort
    query · string: recent | items | value | pricerecent: newest shops first; price: cheapest highlighted item first
    limit
    query · integer
  • GET/api/v1/ledger/market/index

    Get the market index and movers

    A chained price index (100 at the start of the range) over the up to 120 plain items traded on the most days, from daily median vending prices, and the week's biggest risers and fallers among items with at least 5 purchases in each week, and the items given in the most trades over the last 7 days (staff and blocked accounts excluded).

    1 parameters
    range
    query · string: 30d | 90d
  • GET/api/v1/ledger/market/shops/{id}

    Get a vending shop

    A shop's items with each plain item's price against its 7-day median sale at the same refine.

    1 parameters
    id*
    path · integer

Monsters

  • GET/api/v1/ledger/monsters

    List monsters

    The game server's monster database with each monster's kills in a window (24h, 7d or 30d, counted per hour by the kill log) and its busiest permanent spawn maps. Filters: name, sprite name or ID; element, race, size, level, and modes (mvp, boss, aggressive, looter, combined with AND; boss includes MVPs). Sorts: id, name, level, hp, race, element, size, baseExp, jobExp, kills.

    10 parameters
    page
    query · integerPage number
    perPage
    query · integer: 20 | 50 | 100Monsters per page
    sort
    query · stringSort column; prefix with - for descending order
    q
    query · stringPart of the name or sprite (aegis) name, or the monster ID
    element
    query · string: neutral | water | earth | fire | wind | poison | holy | shadow | ghost | undeadElement
    race
    query · string: formless | undead | brute | plant | insect | fish | demon | demiHuman | angel | dragonRace
    size
    query · string: small | medium | largeSize
    level
    query · stringLevel: 1-99, 50-, -20 or one level
    mode
    query · stringModes that must all hold, comma-separated: mvp, boss (MVPs included), aggressive, looter
    window
    query · string: 24h | 7d | 30dKill count window
  • GET/api/v1/ledger/monsters/{id}

    Get a monster

    A monster from the game server's monster database: stats, mode flags, permanent spawn lines and skills.

    1 parameters
    id*
    path · integerMonster ID
  • GET/api/v1/ledger/monsters/{id}/drops

    Get a monster's drop table

    The drop table with the configured rates (database and effective, per 10,000) and, for monster drops, the observed rate: logged drops (picklog) over kills (the kill log) since the later of the range and the kill log's first hour, with its 95% Wilson interval and a verdict (within, below or above the configured rate). Slots dropping the same item are merged and their rates added. MVP prizes show the configured rates only.

    2 parameters
    id*
    path · integerMonster ID
    range
    query · string: 30d | allObservation range
  • GET/api/v1/ledger/monsters/{id}/hunters

    Get a monster's top hunters

    The 10 characters behind the most kills in the range, with the monster's cards each picked up. Staff and blocked accounts are left out. The list is computed at most once an hour, so it can't be used to follow someone.

    2 parameters
    id*
    path · integerMonster ID
    range
    query · string: 7d | 30d | allKill range
  • GET/api/v1/ledger/monsters/{id}/kills

    Get a monster's kills per day

    Kills per UTC day over the last 90 complete days (today is left out) and the total, from the kill log. Monsters removed by scripts or commands, and deaths that a monster revives from, are not kills.

    1 parameters
    id*
    path · integerMonster ID
  • GET/api/v1/ledger/monsters/export

    Export monsters

    The monster list with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows.

    11 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    q
    query · stringPart of the name or sprite (aegis) name, or the monster ID
    element
    query · string: neutral | water | earth | fire | wind | poison | holy | shadow | ghost | undeadElement
    race
    query · string: formless | undead | brute | plant | insect | fish | demon | demiHuman | angel | dragonRace
    size
    query · string: small | medium | largeSize
    level
    query · stringLevel: 1-99, 50-, -20 or one level
    mode
    query · stringModes that must all hold, comma-separated: mvp, boss (MVPs included), aggressive, looter
    window
    query · string: 24h | 7d | 30dKill count window

Maps

  • GET/api/v1/ledger/maps

    List maps

    Every map the game server exports, by name, with its mapflags, the monsters its permanent spawns keep up and its population now (grouped as on Who's online). `available` is false while the server doesn't export its maps.

    2 parameters
    name
    query · stringPart of the map name
    flag
    query · stringOnly maps with this mapflag, e.g. town, pvp, gvg_castle
  • GET/api/v1/ledger/maps/{name}

    Get a map

    A map's size, mapflags, permanent monster spawns (summed per monster, bosses first), its portals in and out, the NPCs players can see there, population (now and the hourly peaks of the last 24 hours, each shown only from three players; castles never show one) and monster kills on the map from the game server's kill log, every killer together, in complete UTC days (today's kills show tomorrow); castles never show kills.

    1 parameters
    name*
    path · string
  • GET/api/v1/ledger/maps/population

    Players per map

    Players per map, from the same snapshot as Who's online. Only characters whose players show their map are counted on a map; the others are counted in locationHidden, on no map, so per-map counts can't reveal them. Maps with fewer than minPlayers players are grouped as Other, and castles merge into In WoE while the War of Emperium runs.

War of Emperium

  • GET/api/v1/ledger/woe/breaks

    List Emperium breaks

    Every Emperium break, newest first: the castle, the guild that took it and the one it was taken from, and the breaker (the character who landed the final hit). Blocked accounts' characters are hidden.

    5 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    castle
    query · integerOne castle's breaks, by castle ID
    realm
    query · stringOne realm's breaks, by its name in /woe/castles (e.g. Prontera)
  • GET/api/v1/ledger/woe/castles

    Get the castles and the WoE schedule

    The realms (castles fighting together) with their weekly sessions from the published schedule, whether each is live (the game server runs its edition, or a scheduled session is on), the next session and the last one with its breaks; every castle with its owner guild, economy, defense and when the owner took it; and the castles held per guild. Until the schedule is published, sessions are empty and the times are placeholders.

  • GET/api/v1/ledger/woe/leaderboard

    Get the cross-session WoE leaderboards

    Every War of Emperium session in the range summed per character, on the session report's boards (killers, most killed, K/D, breakers, damage dealt and received, healing, skills), 50 characters each. Staff and blocked accounts are left out. A snapshot, recomputed at most every 10 minutes.

    2 parameters
    range
    query · string: 30d | 90d | allSessions started in the range
    edition
    query · string: FE | SE | TE | One edition's sessions; all by default
  • GET/api/v1/ledger/woe/ownership

    Get castle ownership over time

    Each castle's holders over the last days (default 30), from the castle log: who held it from when, and the breaker who won it. The first holder is the one at the window's start.

    1 parameters
    days
    query · integerWindow in days
  • GET/api/v1/ledger/woe/sessions

    List WoE sessions

    Every War of Emperium session the game server logged, newest first, with its breaks, owner changes, participants and kills. With guild, only the sessions that guild fought in: one of its members has WoE figures in it, or it took, lost or broke a castle during it.

    5 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    edition
    query · string: FE | SE | TEOne edition's sessions
    guild
    query · integerOnly the sessions this guild fought in
  • GET/api/v1/ledger/woe/sessions/{id}

    Get a WoE session's report

    A session's figures from the game server's per-character WoE log: totals, per guild, the top performers of each board (kills, deaths, breaks, damage dealt and taken, healing, skills used, K/D; staff and blocked accounts are left out) and the session's breaks. A running session's figures are written every 5 minutes.

    1 parameters
    id*
    path · integerSession ID

Who’s online

  • GET/api/v1/ledger/online

    Who's online

    Characters on the map servers, from a snapshot at most a minute old. Staff and players who hide their presence are not listed; a map is shown only when the player chose to show it, and castles read In WoE while the War of Emperium runs. Sorts: level (base, then job), name, online.

    8 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    name
    query · stringPart of a character name
    class
    query · stringClass family, e.g. knight (see families)
    guild
    query · stringPart of a guild name
    map
    query · stringMap ID; only characters whose players show their map match
    level
    query · stringBase level: 90-99, 90-, -50 or one level

Economy

  • GET/api/v1/ledger/economy/bank

    Get daily bank deposits and withdrawals

    Zeny moved into and out of bank vaults per UTC day (zenylog type K). Bank balances stay in the supply; see the daily supply for the total deposited.

    1 parameters
    range
    query · string: 30d | 90d | 1y
  • GET/api/v1/ledger/economy/flows

    Get daily zeny faucets, sinks and transfers

    Per UTC day and zenylog type: zeny created (faucet), destroyed (sink) and moved between players (transfer). Defaults to the last 30 days.

    3 parameters
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
  • GET/api/v1/ledger/economy/supply

    Get the zeny supply over time

    Hourly zeny on characters, in unclaimed mail and in bank vaults. Defaults to the last 30 days.

    3 parameters
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
  • GET/api/v1/ledger/economy/supply/daily

    Get the zeny supply per day

    The zeny on characters, in unclaimed mail and in bank vaults at the end of each UTC day (the day's last hourly snapshot), for long ranges up to all time.

    1 parameters
    range
    query · string: 90d | 1y | all
  • GET/api/v1/ledger/economy/wealth

    Get the wealth distribution and top holders

    Daily Gini coefficient, top 1% and 10% shares and a histogram of characters' zeny on hand, plus an hourly snapshot of the richest characters. Defaults to the last 30 days.

    3 parameters
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day

Population

  • GET/api/v1/ledger/classes

    Get characters per job class

    Counts characters by job class, optionally only those at base level 80 or more, or those who logged in during the last 7 days. Staff and blocked accounts are excluded.

    1 parameters
    filter
    query · string: all | level80 | active7d
  • GET/api/v1/ledger/classes/history

    Get characters per job class over time

    Characters per job class per UTC day, from a daily snapshot of the all-characters count (staff and blocked accounts excluded). Defaults to the last 30 days; history starts when the snapshot first ran.

    3 parameters
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
  • GET/api/v1/ledger/population/activity

    Get daily and weekly active accounts

    Per UTC day: accounts that played (a successful login), accounts that played in the 7 days up to that day, and accounts first seen. Counts only; staff and blocked accounts are excluded.

    1 parameters
    range
    query · string: 30d | 90d
  • GET/api/v1/ledger/population/heatmap

    Get average players online per weekday and hour

    The average online count per UTC weekday and hour over the last four weeks of hourly samples.

  • GET/api/v1/ledger/population/levels

    Get characters per level and level 99s over time

    Characters per base and job level now, and the daily count of level 99 characters. Staff and blocked accounts are excluded.

    1 parameters
    range
    query · string: 90d | 1y | allRange of the level 99 series
  • GET/api/v1/ledger/population/retention

    Get weekly retention cohorts

    Accounts first seen in each of the last weeks (Monday to Sunday, UTC) and how many of them played again in every following week. Counts only.

Rates & config

  • GET/api/v1/ledger/rates

    Get the live rates and config

    Every gameplay rate the server runs, read from its exported configuration: EXP and drop multipliers, the refine table and other settings, with the published version and a drift flag when the server runs settings that aren't published. data is null until the first export.

  • GET/api/v1/ledger/rates/summary

    Get the headline rates

    Base and job EXP, common, card and MVP drop multipliers of the live version, for the landing page.

  • GET/api/v1/ledger/rates/versions

    List the published config versions

    Every published version, newest first, with the keys it changed. v1.0 is the launch baseline.

  • GET/api/v1/ledger/rates/versions/{version}

    Get a config version with every value

    1 parameters
    version*
    path · stringVersion, e.g. 1.3
  • GET/api/v1/ledger/rates/versions/{version}/diff.json

    Download a config version's diff

    The keys the version changed against the one before, as a JSON array.

    1 parameters
    version*
    path · stringVersion, e.g. 1.3

Accountability

  • GET/api/v1/ledger/punishments

    List punishments

    Bans, blocks, jails and mutes, newest first: those issued on the website's staff console (category, duration, status and the account) and the in-game @ban, @block, @jail and @mute run by staff accounts (kind and duration; the category is unspecified and the target withheld). Never evidence, reasons or who issued them.

    4 parameters
    kind
    query · string: temp_ban | perm_ban | jail | muteOne kind of punishment
    source
    query · string: website | game
    cursor
    query · string
    limit
    query · integer
  • GET/api/v1/ledger/staff

    List the staff roster

    Every staff game account that isn't blocked, highest role first: its role (from its group), its characters and its GM commands in the last 30 days. Accounts appear by ID only.

Disclosure

  • GET/api/v1/ledger/changelog

    List the changelog

    What changed, newest first: public staff actions from the audit log (bans and lifts, group, state and account edits, item shop changes), published configuration versions and news posts. Staff appear as staff, never by name or handle.

    3 parameters
    kind
    query · string: staff | config | news
    cursor
    query · string
    limit
    query · integer

Data dumps

  • GET/api/v1/ledger/dumps

    List the nightly data dumps

    Each public log for one UTC day as gzipped CSV and JSON lines, with row counts and SHA-256 checksums; the newest day also has the rankings as of that night. Newest first, kept 30 days. Rows follow the same privacy rules as the API: a day written before a character was hidden, or stopped sharing their map, is withdrawn within the hour and written again. Also reports the public API's rate limit.

  • GET/api/v1/ledger/dumps/{date}/{file}

    Download a dump file

    A gzipped CSV or JSON lines file from the list, as the day's dump wrote it; check it against the list's SHA-256.

    2 parameters
    date*
    path · string
    file*
    path · string

Other

  • GET/api/v1/ledger/achievements

    List achievements

    The website's achievements (the 2008 game client has none), derived from the game logs (kills, MVPs, refines, vending, trades, player kills, Emperium breaks) and characters' levels, with how many characters earned each. Logs count in complete UTC days only; staff and hidden characters are left out.

  • GET/api/v1/ledger/achievements/{code}

    Get an achievement

    An achievement and the characters that earned it, first earners first, with the UTC day each earned it (no time of day, no map). Staff and hidden characters are left out.

    3 parameters
    code*
    path · stringAchievement code, e.g. mvp_1
    page
    query · integer
    perPage
    query · integer: 20 | 50 | 100Earners per page
  • GET/api/v1/ledger/events

    List recent live events

    The ring of recent notable events (the live stream's history), newest first, optionally of one kind.

    3 parameters
    kind
    query · string: cardDrop | mvpKill | refine | refineBreak | emperiumBreak | worldFirst
    before
    query · integerEvents before this ID (the previous page's next)
    limit
    query · integer
  • GET/api/v1/ledger/jobs

    List jobs

    The player jobs (pre-renewal) from the game server's job database, by tier: novice, first, second, expanded, rebirth (High Novice and the High first jobs) and transcendent. `available` is false while the server doesn't export its job database.

  • GET/api/v1/ledger/jobs/{id}

    Get a job

    A player job: where it comes from and leads to, its level caps, base weight and stat limits; per base level the EXP to the next and base HP/SP; per job level the EXP to the next and its total stat bonuses; its attack speed per weapon type; and its skill tree with each skill's prerequisites.

    1 parameters
    id*
    path · integerJob ID
  • GET/api/v1/ledger/live

    Stream live events

    Server-sent events: card drops, MVP kills, +8 to +10 refines and breaks, Emperium breaks and world firsts, as the logs record them. Each event's SSE id resumes the stream: reconnect with Last-Event-ID (or ?since=) to receive what you missed, up to 200 events. A comment is sent every 15 seconds to keep the connection open.

    1 parameters
    since
    query · integerResume after this event ID, for clients that can't set headers
  • GET/api/v1/ledger/mvp-timers

    Get MVP respawn timers

    Every MVP spawn with its respawn window: the spawn's delays after the last logged kill on that map. Killers aren't named here; the MVP log has them.

  • GET/api/v1/ledger/og/items/{file}

    Get an item's link-preview image

    A 600×600 PNG for og:image and twitter:image: the item's large image (`items/images/{id}.png`) from the asset host (`WEB_ASSETS_URL`), scaled up with nearest neighbour and centred on the page colour. 404 without an asset host or a sprite.

    1 parameters
    file*
    path · stringThe entity's ID followed by .png, e.g. 501.png
  • GET/api/v1/ledger/og/monsters/{file}

    Get a monster's link-preview image

    A 600×600 PNG for og:image and twitter:image: the monster's sprite (`monsters/{id}.gif`, first frame) from the asset host (`WEB_ASSETS_URL`), scaled up with nearest neighbour and centred on the page colour. 404 without an asset host or a sprite.

    1 parameters
    file*
    path · stringThe entity's ID followed by .png, e.g. 501.png
  • GET/api/v1/ledger/pvp/kills

    PvP log

    Players killed by other players, newest first: killer and victim with their guilds and the mode (pvp, gvg, woe, bg, duel). The map shows only with the victim's opt-in. Range defaults to 30d; sort: time.

    9 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    mode
    query · stringModes, comma-separated: pvp, gvg, woe, bg, duel, other
    char
    query · stringStart of the killer's or victim's name
    charId
    query · integerOne character's kills and deaths
  • GET/api/v1/ledger/pvp/kills/export

    PvP log export

    The PvP log with the same filters as a CSV or JSON download, from the cursor on, at most 100000 rows.

    10 parameters
    cursor
    query · stringOpaque cursor from the previous page's next field
    limit
    query · integerRows per page
    sort
    query · stringSort column; prefix with - for descending order
    format
    query · string: csv | jsonFile format
    range
    query · string: 24h | 7d | 30d | 90d | customTime range; custom uses from and to. Defaults per endpoint
    from
    query · stringCustom range start, inclusive: RFC 3339 time or YYYY-MM-DD (UTC midnight)
    to
    query · stringCustom range end, exclusive: RFC 3339 time, or YYYY-MM-DD to include that whole day
    mode
    query · stringModes, comma-separated: pvp, gvg, woe, bg, duel, other
    char
    query · stringStart of the killer's or victim's name
    charId
    query · integerOne character's kills and deaths
  • GET/api/v1/ledger/pvp/leaderboard

    Get the PvP leaderboard

    The 50 characters with the most player kills in the range and modes, with their deaths. Staff and blocked accounts are left out. A snapshot, recomputed at most every 10 minutes.

    2 parameters
    range
    query · string: 7d | 30d | allKill range
    mode
    query · stringModes, comma-separated: pvp, gvg, woe, bg, duel, other; all by default
  • GET/api/v1/ledger/rarity

    Get the rarity watch

    The items with the fewest copies in existence (at least one), from the latest hourly supply snapshot (inventories, carts, storage, guild storage, mail and vending), with each item's first monster drop and the number of one-of-a-kind items. kind=gear counts weapons and armor, cards cards, all every item.

    2 parameters
    kind
    query · string: gear | cards | all
    limit
    query · integer
  • GET/api/v1/ledger/recipes

    List recipes

    The game server's item recipes (pre-renewal produce_db: forged weapons, potions, cooking, metals, elemental converters) with their skill and materials, and Arrow Crafting. Filters: kind (or arrow) and a product's or material's name or item ID. Third-job crafting is left out.

    2 parameters
    kind
    query · string: forging | cooking | metal | potion | converter | arrowOnly this kind; arrow for Arrow Crafting
    q
    query · stringPart of a product's or material's name, or an item ID
  • GET/api/v1/ledger/refining

    Get refining statistics

    Refine attempts from the game server's refine log, rolled up per day: per equipment group and target level the attempts, successes, downgrades and breaks, the success rate with its 95% Wilson interval against the attempts' expected chance (logged by the NPC, or db_refine's) and a verdict; attempts, breaks and +10s per day over 90 days; material use; and the copies of items refined to +7 and more in existence (inventories, carts, storage and guild storage, counted every 10 minutes by a background job).

    1 parameters
    range
    query · string: 30d | 90d | allRange of the observed rates and material use
  • GET/api/v1/ledger/refining/items/{id}

    Get one item's refine outcomes

    One item's refine attempts from the game server's refine log, per target level: attempts, successes, downgrades and breaks, the success rate with its 95% Wilson interval against the expected chance (logged by the NPC, or db_refine's for the item's group and level) and a verdict. Weapon Refine (the skill) is left out.

    2 parameters
    id*
    path · integerItem ID
    range
    query · string: 30d | 90d | all
  • GET/api/v1/ledger/skills

    List skills

    The skills player jobs learn, from the game server's skill database and skill trees (pre-renewal), by name. Filters: name, aegis name or ID; a job (its whole tree, inherited skills included); target type; damage kind. `available` is false while the server doesn't export its skill database.

    4 parameters
    q
    query · stringPart of the name or aegis name, or the skill ID
    job
    query · stringOnly skills this job's tree has (inherited ones included), by job ID
    target
    query · string: passive | attack | ground | self | support | trapTarget type
    type
    query · string: weapon | magic | miscDamage kind
  • GET/api/v1/ledger/skills/{id}

    Get a skill

    A skill's values per level (costs, timings in milliseconds, range), the items it consumes or needs equipped, the player jobs that learn it with their level and skill prerequisites, and the monsters that use it.

    1 parameters
    id*
    path · integerSkill ID