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.
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
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-31 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-30 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-29 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-28 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-27 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 2 rows CSV · 153 B JSONL · 171 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-26 14 tables · with rankings
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
- ranking-characters 0 rows CSV · 95 B JSONL · 20 B
- ranking-guilds 0 rows CSV · 95 B JSONL · 20 B
- ranking-zeny 0 rows CSV · 95 B JSONL · 20 B
- ranking-deaths 0 rows CSV · 95 B JSONL · 20 B
- ranking-mvp 0 rows CSV · 95 B JSONL · 20 B
- ranking-homunculus 0 rows CSV · 95 B JSONL · 20 B
- ranking-alchemist 0 rows CSV · 95 B JSONL · 20 B
- ranking-blacksmith 0 rows CSV · 95 B JSONL · 20 B
2026-10-25 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-24 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-23 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-22 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-21 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-20 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-19 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-18 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-17 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-16 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-15 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-14 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-13 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-12 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-11 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-10 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-09 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 1 row CSV · 142 B JSONL · 163 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-08 6 tables
- zeny-log 6 rows CSV · 336 B JSONL · 471 B
- item-log 30 rows CSV · 524 B JSONL · 620 B
- drop-log 1 row CSV · 132 B JSONL · 126 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 3 rows CSV · 141 B JSONL · 167 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-07 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 1 row CSV · 144 B JSONL · 161 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-06 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-05 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-04 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
2026-10-03 6 tables
- zeny-log 0 rows CSV · 120 B JSONL · 20 B
- item-log 0 rows CSV · 108 B JSONL · 20 B
- drop-log 0 rows CSV · 95 B JSONL · 20 B
- mvp-log 0 rows CSV · 118 B JSONL · 20 B
- gm-command-log 0 rows CSV · 76 B JSONL · 20 B
- cash-log 0 rows CSV · 92 B JSONL · 20 B
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