SOTA.net API
SOTA.net is opening a public read API: the community-collected data this site is built from, exposed as JSON for your tools, spreadsheets and websites. The first data set is the market data behind Receipt Search — prices and sales collected from player-uploaded vendor receipts.
The API is young and we are actively expanding it. This page is the contract: endpoints are documented here as they go live, and the roadmap section covers what is coming next.
What this is
A read-only HTTP API over the public, aggregated community data on SOTA.net. No registration, no API keys, no sign-in: if data is public on the site, the API serves the same view of it as plain JSON, with the same privacy rules the site itself applies.
Responses are UTF-8 JSON. Endpoints are versioned under /api/v1; anything documented on this page is stable — we will add fields, but not rename or remove them without notice here. Every endpoint on this page comes with a copy-paste curl example.
Receipt market data
Item price lookup over the vendor receipt archive. For any item — or the whole catalogue — the endpoint reports what it last sold for, when that sale happened, and its average price over the last 90 days. It is the data set behind Receipt Search and the item price list, as JSON.
GET /api/v1/receipts/prices
No authentication. One optional query parameter: item — the exact item name, matched case-insensitively. Repeat it for up to 50 items per request; leave it off to get the whole catalogue (~15,000 items) in one response.
Look up one item:
curl "https://shroudoftheavatar.net/api/v1/receipts/prices?item=Gold%20Ore"Several items — repeat item (names are matched whole, so commas in a name are fine):
curl "https://shroudoftheavatar.net/api/v1/receipts/prices?item=Gold%20Ore&item=Iron%20Ore"The whole catalogue:
curl "https://shroudoftheavatar.net/api/v1/receipts/prices"The response, per item:
{
"generatedAt": "2026-09-27T22:40:12Z",
"count": 3,
"items": [
{
"item": "Gold Ore",
"lastPrice": 8.5,
"lastSoldAt": "2026-09-27T18:03:00Z",
"avg90d": 9.13,
"sold90d": 4120,
"estimated": false
},
{
"item": "Iron Ore",
"lastPrice": 3,
"lastSoldAt": "2026-09-26T02:11:00Z",
"avg90d": 3.42,
"sold90d": 9860,
"estimated": false
},
{
"item": "Obsidian Chip",
"lastPrice": 80,
"lastSoldAt": null,
"avg90d": null,
"sold90d": 0,
"estimated": true
}
],
"missing": []
}lastPrice— gold per unit of the item's most recent published sale, or, whenestimated, 80% of its NPC vendor listed sale value — the price a vendor pays a player selling the item back, used as a stand-in price when no one has published a sale.lastSoldAt— when that sale happened, ISO 8601, UTC;nullwhenestimated.avg90d— average gold per unit over the trailing 90 days;nullif nothing sold in that window, or ifestimated.sold90d— units sold over the trailing 90 days;0whenestimated.estimated—truewhen the item has no published receipt sale andlastPriceis a vendor-derived estimate instead of an observed sale.generatedAt— when this snapshot was computed; the data refreshes about every 10 minutes.missing— requested names with no published sale and no vendor listing to estimate from (only present when you asked for specific items).
Prices come from published receipts, with the same privacy rules the site applies everywhere else, plus vendor-derived estimates for items no one has sold yet. Want a shape this doesn't cover — sales history, trends? Tell us.
Skill data
Our own Shroud of the Avatar skill reference, the data behind Skills and the XP planner: every adventuring skill with its school, focus cost, prerequisites, reagents and effects, each effect with the scaling terms the calculator reads. The formulas come from the community wiki and predate the game's overhaul, so every record carries confidence (estimate until we check the school in the live game) and lastVerified.
GET /api/v1/skills
Every live skill, grouped by school in the game's order (Combat, Magic, Strategy, then Combos). Optional school: one school by name, e.g. Death Magic. missing is true for a school whose skills aren't in the reference yet.
curl "https://shroudoftheavatar.net/api/v1/skills?school=Death%20Magic"{
"total": 14,
"schools": [
{
"name": "Death Magic",
"school": "Death Magic",
"missing": false,
"hue": "#9a86c2",
"group": "Magic",
"specialization": { "slug": "death-magic-specialization", "name": "Death Magic Specialization" },
"confidence": "estimate",
"skills": [
{
"slug": "death-ray",
"name": "Death Ray",
"type": "Active",
"cost": 10,
"prerequisite": { "skill": "Death Touch", "level": 40 },
"effect": "Range: 20"
}
]
}
]
}GET /api/v1/skills/{slug}
One skill: the full record, its prerequisite chain (root first), the skills it unlocks, its school's Specialization record, and pooled combat data (combat) when at least three players have uploaded fights with it, otherwise null.
curl "https://shroudoftheavatar.net/api/v1/skills/death-ray"skill.effects[]:label,base/baseMax,unit,penalty,specializationOnly, the wiki'sscalingnote and its parsedscalingTerms.chain:{ slug, name, level }from the root prerequisite to the skill;levelis the level the next skill needs.combat:{ skill, hits, geoMean, contributors }, the same pooled numbers as combat records.
GET /api/v1/skills/xp-table
The SkillExp table the XP planner uses: cumulativeXp[n - 1] is the base experience at skill level n (1 to 200); multiply by a skill's factor (×0.5 to ×20) from skills. Static, so cache it as long as you like.
curl "https://shroudoftheavatar.net/api/v1/skills/xp-table"{
"maxLevel": 200,
"factors": [0.5, 1, 2, 3, 4, 5, 6, 10, 20],
"cumulativeXp": [0, 10, 21, 33, 46, ...],
"skills": [{ "name": "Death Ray", "school": "Death Magic", "factor": 1 }, ...]
}The skill endpoints share one budget of 60 requests a minute per IP and are served from a 10-minute server cache; the data changes only when we update the reference.
Fair use
- Read endpoints are cached server-side; the data behind them updates on the order of minutes, not seconds. Polling faster than once a minute gains you nothing.
- Requests are rate-limited per IP. A
429response carries aRetry-Afterheader in seconds — honour it. - Identify your tool with a descriptive
User-Agentso we can reach out instead of blocking if something misbehaves.
Roadmap
The API grows in the direction people pull it. What is planned, roughly in order:
- Richer receipt views — the price lookup above is the start; per-item sales history and market trends come next.
- Read endpoints for community data — the stats the site renders (loot, monsters, fishing, combat) exposed as JSON for tools and overlays. Skill data is the second set to ship.
Building something and missing an endpoint? Tell us — real needs decide what ships next. Contact the site team and we'll talk it through.
