Current state of every visible account
Built for polling every 2–10 s (the live map, Home Assistant). Limited to 1 request per 1 s per key, on top of the general limit.
Each account carries id, name, type, type_label, owner and categories (and account_hash for service keys); every other field belongs to one category and is omitted when the key can’t read that category on the account, and null when it can but the plugin never sent it.
Send the last ETag as If-None-Match: while nothing you would see has changed, the answer is 304 Not Modified without a body (it still counts towards the rate limits). With since (the previous meta.last_modified), only accounts that changed after it are returned, re-sending those that changed up to 30 s before it; accounts whose activity the key can’t read are always returned, and an account that leaves the key’s scope simply stops appearing, so fetch without since now and then. A location older than 2 minutes has stale: true.
Authorization
bearerAuth An API key from the hub’s API keys page.
In: header
Query Parameters
Only accounts that changed after this time (pass the previous response’s meta.last_modified). Accounts changed up to 30 s before it are sent again (late commits), and accounts whose activity the key can’t read are always sent.
date-timeResponse Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/snapshot"{ "data": [ { "id": "string", "name": "string", "account_hash": "string", "type": 0, "type_label": "string", "owner": { "name": "string", "discord_id": "string" }, "categories": [ "stats" ], "online": true, "world": 0, "special_world": true, "game_state": "string", "last_seen": "2019-08-24T14:15:22Z", "hp": { "current": 0, "max": 0 }, "prayer": { "current": 0, "max": 0 }, "spellbook": "string", "location": { "x": 0, "y": 0, "plane": 0, "is_on_boat": true, "stale": true, "updated_at": "2019-08-24T14:15:22Z" }, "skills": { "total_level": 0, "overall_xp": 0, "skills": [ { "skill": "string", "level": 0, "real_level": 0, "xp": 0 } ] }, "equipment": { "items": [ { "id": 0, "name": "string", "quantity": 0, "ge_price": 0, "ha_price": 0, "equipment_slot": "string", "inventory_slot": 0 } ], "value": 0 }, "inventory": { "items": [ { "id": 0, "name": "string", "quantity": 0, "ge_price": 0, "ha_price": 0, "equipment_slot": "string", "inventory_slot": 0 } ], "value": 0 } } ], "meta": { "generated_at": "2019-08-24T14:15:22Z", "count": 0, "last_modified": "2019-08-24T14:15:22Z" }}One account’s current state GET
The account’s current state, section by section. A section of a category the key can’t read on this account is **omitted**; a readable section the player’s plugin never sent is `{ "shared": false, "updated_at": null }` ("not shared"), never an empty value. Every sent section carries `updated_at`.
XP series of one account GET
XP per skill over time (`stats`). Defaults: Overall, the last 7 days, `resolution=auto`.