{"openapi":"3.1.0","info":{"title":"Grimlight's Depot API","version":"1.0.0","summary":"World of Warcraft: Forever auction house data from saved in-game scans.","description":"Free and read-only. Sign in with Battle.net at https://grimlightdepot.com/api/keys/ for a personal key and send it as the X-Grimlight-Key header (or Authorization: Bearer). Keyed requests are not rate limited. The index, /openapi.json, /markets, /health and /status never need a key. Prices are scanned minimum asking buyouts per unit in copper, not sales and not live inventory. Scans happen when the scanner plays, so data can be days old: always read scanTime. Markets are separate and never mixed. Responses are cached by snapshot: poll /markets for a new snapshot, then fetch. Full guide: https://grimlightdepot.com/api/\n\nAll existing v1 market aliases are archived Forever beta data. JSON data envelopes add lifecycle (status, gameEnvironment, referenceOnly, closedOn, notice). X-Grimlight-Data-Status, X-Grimlight-Environment and X-Grimlight-Archive-Date identify archival responses. Immutable snapshot/history payloads are unchanged. Live release markets are not available through these beta aliases.","contact":{"name":"Grimlight's Depot","url":"https://grimlightdepot.com/api/","email":"veruca@grimlightdepot.com"}},"servers":[{"url":"https://grimlightdepot.com/ah/api/v1"}],"paths":{"/":{"get":{"summary":"API index","description":"Endpoints and a summary of the three markets in the selected publication.","parameters":[{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Index","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets":{"get":{"summary":"List markets","description":"Availability, scan time and age of each market. Poll this (not more than every 30 s) to notice a new scan.","parameters":[{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Markets","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"markets":{"type":"array","items":{"$ref":"#/components/schemas/LiveMarket"}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}":{"get":{"summary":"Market summary","description":"Totals, the value-weighted movement index (against previous close unless compare says otherwise), and links.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"compare","in":"query","required":false,"schema":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"],"default":"previousClose"},"description":"Reference for the movement block. closeCutoff is null for anything but previousClose."}],"responses":{"200":{"description":"Market","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/MarketSummary"},"links":{"type":"object"}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/items":{"get":{"summary":"Search items","description":"Filter, sort and page through a market.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":64},"description":"Part of an item name (case-insensitive), or an exact item ID."},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Exact category name, case-insensitive. See /categories."},{"name":"subcategory","in":"query","required":false,"schema":{"type":"string"},"description":"Exact subcategory name, case-insensitive."},{"name":"classId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item class ID."},{"name":"subClassId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item subclass ID."},{"name":"quality","in":"query","required":false,"schema":{"type":"string","examples":["2","3,4"]},"description":"One or more quality numbers separated by commas (0 poor to 5 legendary)."},{"name":"trend","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged","new"]},"description":"Direction against the previous full scan (the item's trend field)."},{"name":"compare","in":"query","required":false,"schema":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"],"default":"previousClose"},"description":"Which earlier quote comparePct, move and the movers sort measure against. previousClose: the last daily close before the current scanning session (the default, same as the website). previousDay: the preceding UTC day. previousScan: the previous full scan. dayOpen: the first observation of the scan's UTC day."},{"name":"move","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged"]},"description":"Direction of minBuyout against the compare reference. Items without that reference are left out."},{"name":"minPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Lowest minBuyout to include, in copper."},{"name":"maxPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Highest minBuyout to include, in copper."},{"name":"ids","in":"query","required":false,"schema":{"type":"string","examples":["2589,2592,4306"]},"description":"Up to 200 item IDs separated by commas. Includes historical items unless listed is set."},{"name":"listed","in":"query","required":false,"schema":{"type":"string","enum":["true","false","all"],"default":"true"},"description":"true: in the latest scan. false: seen before but not in the latest scan. all: both."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","id","minBuyout","quantity","floorValue","changePct","itemLevel","quality","observedDays","movers","comparePct"],"default":"name"},"description":"Sort field. Items without a value always come last. movers: the size of the move against the compare reference in either direction (a halving ranks like a doubling), largest first. comparePct: the signed change against the compare reference."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Defaults to asc for name and id, desc otherwise."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Items per page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Items to skip."}],"responses":{"200":{"description":"Items","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"compare":{"type":"string","description":"The reference comparePct, move and movers used."},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"next":{"type":["string","null"],"description":"Path of the next page, or null."},"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/items/{id}":{"get":{"summary":"Item detail","description":"Quotes, item facts, the captured tooltip and daily history.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Base item ID, as in game and on Wowhead."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Item","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"item":{"$ref":"#/components/schemas/ItemDetail"}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/items/{id}/history":{"get":{"summary":"Item history","description":"One row per observed UTC day. Missing days are never filled in.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Base item ID, as in game and on Wowhead."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"First UTC day to include."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Last UTC day to include."}],"responses":{"200":{"description":"History","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"item":{"type":"object"},"days":{"type":"integer"},"history":{"type":"array","items":{"$ref":"#/components/schemas/HistoryDay"}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/categories":{"get":{"summary":"Categories","description":"Category and subcategory names with listed item counts.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Categories","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"total":{"type":"integer"},"categories":{"type":"array","items":{"type":"object"}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/scans":{"get":{"summary":"Scan log","description":"Completed scans retained in the snapshot, oldest first.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Scans","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"total":{"type":"integer"},"scans":{"type":"array","items":{"type":"object","properties":{"completed":{"type":"string","format":"date-time"},"items":{"type":["integer","null"]}}}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/prices.json":{"get":{"summary":"Price table (JSON)","description":"Every matching item in one response. Takes the same filters as /items, without paging; sorted by id unless sort is given.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":64},"description":"Part of an item name (case-insensitive), or an exact item ID."},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Exact category name, case-insensitive. See /categories."},{"name":"subcategory","in":"query","required":false,"schema":{"type":"string"},"description":"Exact subcategory name, case-insensitive."},{"name":"classId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item class ID."},{"name":"subClassId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item subclass ID."},{"name":"quality","in":"query","required":false,"schema":{"type":"string","examples":["2","3,4"]},"description":"One or more quality numbers separated by commas (0 poor to 5 legendary)."},{"name":"trend","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged","new"]},"description":"Direction against the previous full scan (the item's trend field)."},{"name":"compare","in":"query","required":false,"schema":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"],"default":"previousClose"},"description":"Which earlier quote comparePct, move and the movers sort measure against. previousClose: the last daily close before the current scanning session (the default, same as the website). previousDay: the preceding UTC day. previousScan: the previous full scan. dayOpen: the first observation of the scan's UTC day."},{"name":"move","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged"]},"description":"Direction of minBuyout against the compare reference. Items without that reference are left out."},{"name":"minPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Lowest minBuyout to include, in copper."},{"name":"maxPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Highest minBuyout to include, in copper."},{"name":"ids","in":"query","required":false,"schema":{"type":"string","examples":["2589,2592,4306"]},"description":"Up to 200 item IDs separated by commas. Includes historical items unless listed is set."},{"name":"listed","in":"query","required":false,"schema":{"type":"string","enum":["true","false","all"],"default":"true"},"description":"true: in the latest scan. false: seen before but not in the latest scan. all: both."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","id","minBuyout","quantity","floorValue","changePct","itemLevel","quality","observedDays","movers","comparePct"],"default":"name"},"description":"Sort field. Items without a value always come last. movers: the size of the move against the compare reference in either direction (a halving ranks like a doubling), largest first. comparePct: the signed change against the compare reference."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Defaults to asc for name and id, desc otherwise."}],"responses":{"200":{"description":"Prices","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"$ref":"#/components/schemas/Market"},"compare":{"type":"string"},"total":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/prices.csv":{"get":{"summary":"Price table (CSV)","description":"The same table as CSV with a header row. Text that could start a spreadsheet formula is prefixed with an apostrophe.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":64},"description":"Part of an item name (case-insensitive), or an exact item ID."},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Exact category name, case-insensitive. See /categories."},{"name":"subcategory","in":"query","required":false,"schema":{"type":"string"},"description":"Exact subcategory name, case-insensitive."},{"name":"classId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item class ID."},{"name":"subClassId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item subclass ID."},{"name":"quality","in":"query","required":false,"schema":{"type":"string","examples":["2","3,4"]},"description":"One or more quality numbers separated by commas (0 poor to 5 legendary)."},{"name":"trend","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged","new"]},"description":"Direction against the previous full scan (the item's trend field)."},{"name":"compare","in":"query","required":false,"schema":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"],"default":"previousClose"},"description":"Which earlier quote comparePct, move and the movers sort measure against. previousClose: the last daily close before the current scanning session (the default, same as the website). previousDay: the preceding UTC day. previousScan: the previous full scan. dayOpen: the first observation of the scan's UTC day."},{"name":"move","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged"]},"description":"Direction of minBuyout against the compare reference. Items without that reference are left out."},{"name":"minPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Lowest minBuyout to include, in copper."},{"name":"maxPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Highest minBuyout to include, in copper."},{"name":"ids","in":"query","required":false,"schema":{"type":"string","examples":["2589,2592,4306"]},"description":"Up to 200 item IDs separated by commas. Includes historical items unless listed is set."},{"name":"listed","in":"query","required":false,"schema":{"type":"string","enum":["true","false","all"],"default":"true"},"description":"true: in the latest scan. false: seen before but not in the latest scan. all: both."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","id","minBuyout","quantity","floorValue","changePct","itemLevel","quality","observedDays","movers","comparePct"],"default":"name"},"description":"Sort field. Items without a value always come last. movers: the size of the move against the compare reference in either direction (a halving ranks like a doubling), largest first. comparePct: the signed change against the compare reference."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Defaults to asc for name and id, desc otherwise."}],"responses":{"200":{"description":"CSV","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets/{market}/prices.lua":{"get":{"summary":"Price table (Lua)","description":"A Lua 5.1 file for addons: <var>[\"<market>\"].prices[itemId] = {minBuyout, quantity}. Listed items only.","parameters":[{"name":"market","in":"path","required":true,"schema":{"type":"string","enum":["horde","alliance","neutral"]},"description":"Auction house market. Neutral covers Booty Bay only."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":64},"description":"Part of an item name (case-insensitive), or an exact item ID."},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Exact category name, case-insensitive. See /categories."},{"name":"subcategory","in":"query","required":false,"schema":{"type":"string"},"description":"Exact subcategory name, case-insensitive."},{"name":"classId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item class ID."},{"name":"subClassId","in":"query","required":false,"schema":{"type":"integer"},"description":"Game item subclass ID."},{"name":"quality","in":"query","required":false,"schema":{"type":"string","examples":["2","3,4"]},"description":"One or more quality numbers separated by commas (0 poor to 5 legendary)."},{"name":"trend","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged","new"]},"description":"Direction against the previous full scan (the item's trend field)."},{"name":"compare","in":"query","required":false,"schema":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"],"default":"previousClose"},"description":"Which earlier quote comparePct, move and the movers sort measure against. previousClose: the last daily close before the current scanning session (the default, same as the website). previousDay: the preceding UTC day. previousScan: the previous full scan. dayOpen: the first observation of the scan's UTC day."},{"name":"move","in":"query","required":false,"schema":{"type":"string","enum":["rising","falling","unchanged"]},"description":"Direction of minBuyout against the compare reference. Items without that reference are left out."},{"name":"minPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Lowest minBuyout to include, in copper."},{"name":"maxPrice","in":"query","required":false,"schema":{"type":"integer"},"description":"Highest minBuyout to include, in copper."},{"name":"ids","in":"query","required":false,"schema":{"type":"string","examples":["2589,2592,4306"]},"description":"Up to 200 item IDs separated by commas. Includes historical items unless listed is set."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","id","minBuyout","quantity","floorValue","changePct","itemLevel","quality","observedDays","movers","comparePct"],"default":"name"},"description":"Sort field. Items without a value always come last. movers: the size of the move against the compare reference in either direction (a halving ranks like a doubling), largest first. comparePct: the signed change against the compare reference."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Defaults to asc for name and id, desc otherwise."},{"name":"var","in":"query","required":false,"schema":{"type":"string","default":"GrimlightDepotData","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$"},"description":"Global table name to fill."},{"name":"names","in":"query","required":false,"schema":{"type":"string","enum":["0","1"],"default":"0"},"description":"1 adds the item name as a third value."}],"responses":{"200":{"description":"Lua","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/health":{"get":{"summary":"Health","description":"Version, Git commit, deployment, binding checks and recent error rate. 503 when a check fails. Never cached; no key needed.","parameters":[],"responses":{"200":{"description":"Health","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/status":{"get":{"summary":"Status","description":"Everything in /health plus each market's scan time and freshness. Never cached; no key needed.","parameters":[],"responses":{"200":{"description":"Status","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Health"},{"type":"object","properties":{"markets":{"type":"array","items":{"type":"object"}}}}]}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/items/{id}":{"get":{"summary":"Item across markets","description":"The same item in Horde, Alliance and Neutral, each with its own scan time. Markets are reported side by side, never merged.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":0},"description":"Base item ID, as in game and on Wowhead."},{"name":"environment","in":"query","required":false,"schema":{"type":"string","enum":["beta","live"],"default":"beta"},"description":"beta: the archived Forever Beta · Normal (PvE) pools (default). live: the launch pools, Normal (PvE) Horde so far; markets not yet published there answer available:false / market_unavailable. gameEnvironment is accepted as an alias."},{"name":"ruleset","in":"query","required":false,"schema":{"type":"string","enum":["normal"],"default":"normal"},"description":"Server ruleset. Only normal is published; other values answer 400 ruleset_unavailable."}],"responses":{"200":{"description":"Comparison","headers":{"ETag":{"schema":{"type":"string"},"description":"Changes only when the content changes. Send it back as If-None-Match."},"X-Grimlight-Scan-Time":{"schema":{"type":"string"},"description":"Scan time of the market that answered (market endpoints)."},"X-Grimlight-Snapshot":{"schema":{"type":"string"},"description":"SHA-256 of the snapshot that answered (market endpoints)."},"X-Grimlight-Data-Status":{"schema":{"type":"string","enum":["archived"]},"description":"Historical beta reference only."},"X-Grimlight-Environment":{"schema":{"type":"string","enum":["beta"]}},"X-Grimlight-Archive-Date":{"schema":{"type":"string","format":"date"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"markets":{"type":"object","additionalProperties":{"type":"object","properties":{"available":{"type":"boolean"},"market":{"$ref":"#/components/schemas/Market"},"item":{"oneOf":[{"$ref":"#/components/schemas/ItemDetail"},{"type":"null"}]}}}}}}}}},"400":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The API key is missing (once keys are required), malformed, revoked or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown endpoint, market or item, or the market has no published scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Retry after the Retry-After seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Market data is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"security":[{"apiKeyHeader":[]},{"bearerKey":[]},{}],"components":{"securitySchemes":{"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Grimlight-Key","description":"Personal key from https://grimlightdepot.com/api/keys/ (gdk_...)."},"bearerKey":{"type":"http","scheme":"bearer","description":"The same key as Authorization: Bearer gdk_..."}},"schemas":{"Health":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"version":{"type":"string"},"rev":{"type":"integer"},"commit":{"type":["string","null"],"description":"Git commit the deploy was built from."},"deployment":{"type":"object"},"keyMode":{"type":"string","enum":["off","grace","required"]},"checks":{"type":"object"},"recent":{"type":"object","description":"Requests and 5xx errors since this isolate started, and today's totals (UTC)."},"time":{"type":"string","format":"date-time"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_parameter","key_required","invalid_key","not_found","unknown_market","market_unavailable","item_not_found","method_not_allowed","rate_limited","snapshot_unavailable","temporarily_unavailable"]},"message":{"type":"string"},"docs":{"type":"string"}},"required":["code","message"]}}},"Market":{"type":"object","properties":{"id":{"type":"string","enum":["horde","alliance","neutral"]},"name":{"type":"string"},"environment":{"type":"string","enum":["beta","live"],"description":"Which publication this block describes."},"coverage":{"type":["string","null"],"description":"What the scan covers, in words."},"scanTime":{"type":["string","null"],"format":"date-time","description":"When the scan completed in game. Judge freshness by this."},"savedTime":{"type":["string","null"],"format":"date-time","description":"When the game saved the scan to disk."},"snapshot":{"type":"string","description":"SHA-256 of the published snapshot. Cache by this value."},"snapshotUrl":{"type":"string","description":"The full snapshot the website itself loads."},"priceBasis":{"type":"string"},"historyArchive":{"type":["object","null"],"description":"Present for archive-backed publications. The snapshot carries up to 32 days of recent history and earlier comparison points; immutable complete history remains available separately.","properties":{"schema":{"type":"integer","const":1},"root":{"type":"string"},"from":{"type":"string","format":"date"},"days":{"type":"integer"},"scanRows":{"type":"integer"},"sessionStart":{"type":["string","null"],"format":"date-time","description":"Start of the continuous scanning session, preserved across snapshot windows."},"through":{"type":["string","null"],"format":"date-time","description":"Scan covered by the session start."},"url":{"type":"string","description":"Immutable root index of month, day and row pages."},"queryUrl":{"type":"string","description":"Append &item=<id>&month=YYYY-MM for at most one UTC month of complete archived item observations."}}}}},"MarketSummary":{"type":"object","properties":{"id":{"type":"string","enum":["horde","alliance","neutral"]},"name":{"type":"string"},"environment":{"type":"string","enum":["beta","live"],"description":"Which publication this block describes."},"coverage":{"type":["string","null"],"description":"What the scan covers, in words."},"scanTime":{"type":["string","null"],"format":"date-time","description":"When the scan completed in game. Judge freshness by this."},"savedTime":{"type":["string","null"],"format":"date-time","description":"When the game saved the scan to disk."},"snapshot":{"type":"string","description":"SHA-256 of the published snapshot. Cache by this value."},"snapshotUrl":{"type":"string","description":"The full snapshot the website itself loads."},"priceBasis":{"type":"string"},"historyArchive":{"type":["object","null"],"description":"Present for archive-backed publications. The snapshot carries up to 32 days of recent history and earlier comparison points; immutable complete history remains available separately.","properties":{"schema":{"type":"integer","const":1},"root":{"type":"string"},"from":{"type":"string","format":"date"},"days":{"type":"integer"},"scanRows":{"type":"integer"},"sessionStart":{"type":["string","null"],"format":"date-time","description":"Start of the continuous scanning session, preserved across snapshot windows."},"through":{"type":["string","null"],"format":"date-time","description":"Scan covered by the session start."},"url":{"type":"string","description":"Immutable root index of month, day and row pages."},"queryUrl":{"type":"string","description":"Append &item=<id>&month=YYYY-MM for at most one UTC month of complete archived item observations."}}},"previousScanTime":{"type":["string","null"],"format":"date-time","description":"The scan before this one."},"observedDays":{"type":["integer","null"]},"listedItems":{"type":"integer"},"historicalItems":{"type":"integer"},"totals":{"type":"object","properties":{"floorValue":{"type":"integer"},"quantity":{"type":"integer"},"extremeListings":{"type":"integer"}}},"movement":{"type":"object","properties":{"reference":{"type":"string","enum":["previousClose","previousDay","previousScan","dayOpen"]},"indexPct":{"type":["number","null"],"description":"Each change weighted by previousClose x quantity and capped at +-50%."},"up":{"type":"integer"},"down":{"type":"integer"},"flat":{"type":"integer"},"compared":{"type":"integer"},"closeCutoff":{"type":["string","null"],"format":"date-time","description":"Quotes at or before this time count as previous close. null for other references."}}},"scans":{"type":"integer"},"source":{"type":"object"}}},"LiveMarket":{"type":"object","properties":{"id":{"type":"string","enum":["horde","alliance","neutral"]},"name":{"type":"string"},"available":{"type":"boolean"},"scanTime":{"type":["string","null"],"format":"date-time","description":"When the scan completed in game. Judge freshness by this."},"savedTime":{"type":["string","null"],"format":"date-time","description":"When the game saved the scan to disk."},"publishedAt":{"type":["string","null"],"format":"date-time","description":"When the snapshot reached the website."},"ageSeconds":{"type":"integer","description":"Seconds since scanTime."},"stale":{"type":"boolean","description":"true when the scan is more than 24 hours old."},"items":{"type":["integer","null"]},"snapshot":{"type":"string","description":"SHA-256 of the published snapshot. Cache by this value."},"snapshotUrl":{"type":"string","description":"The full snapshot the website itself loads."},"url":{"type":"string"}}},"Item":{"type":"object","properties":{"id":{"type":"integer","description":"Base item ID."},"name":{"type":"string"},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"classId":{"type":["integer","null"]},"subClassId":{"type":["integer","null"]},"quality":{"type":["integer","null"],"description":"0 poor, 1 common, 2 uncommon, 3 rare, 4 epic, 5 legendary."},"itemLevel":{"type":["integer","null"]},"minLevel":{"type":["integer","null"]},"inventoryType":{"type":["integer","null"],"description":"Game inventory type (equipment slot) number."},"vendorSell":{"type":["integer","null"],"description":"What a vendor pays for one. Copper (10000 = 1 gold)."},"maxStack":{"type":["integer","null"]},"icon":{"type":["integer","null"],"description":"Icon FileDataID. In game, pass it straight to SetTexture."},"listed":{"type":"boolean","description":"true when the item was in the latest scan. false for a historical item: its quote fields are null and lastSeen/lastMinBuyout say when and what it was."},"minBuyout":{"type":["integer","null"],"description":"Lowest asking buyout per unit in the latest scan. Copper (10000 = 1 gold)."},"quantity":{"type":["integer","null"],"description":"Units listed across every auction of the item in the latest scan."},"floorValue":{"type":["integer","null"],"description":"minBuyout x quantity. A size measure, not revenue. Copper (10000 = 1 gold)."},"extreme":{"type":"boolean","description":"true when floorValue is over 100x the market 99th percentile (a placeholder or troll listing). Left out of totals and the market index."},"previousClose":{"type":["integer","null"],"description":"The item's last daily close from before the current scanning session. Copper (10000 = 1 gold)."},"previousCloseTime":{"type":["string","null"],"format":"date-time","description":"When previousClose was observed."},"changePct":{"type":["number","null"],"description":"minBuyout against previousClose, in percent. null without a reference."},"previousScan":{"type":["integer","null"],"description":"minBuyout in the previous full scan. Copper (10000 = 1 gold)."},"previousDay":{"type":["integer","null"],"description":"Last observed minBuyout on the preceding UTC day. Copper (10000 = 1 gold)."},"dayOpen":{"type":["integer","null"],"description":"First observed minBuyout of the scan UTC day. Copper (10000 = 1 gold)."},"dayOpenTime":{"type":["string","null"],"format":"date-time","description":"When dayOpen was observed."},"previousQuantity":{"type":["integer","null"],"description":"quantity in the previous full scan."},"trend":{"type":["string","null"],"enum":["rising","falling","unchanged","new",null],"description":"minBuyout against previousScan. new: the previous full scan had no quote."},"observedDays":{"type":["integer","null"],"description":"UTC days with at least one observation."},"lastSeen":{"type":["string","null"],"format":"date-time","description":"Scan in which the item was last observed."},"lastMinBuyout":{"type":["integer","null"],"description":"minBuyout at lastSeen. Copper (10000 = 1 gold)."},"comparePct":{"type":["number","null"],"description":"minBuyout against the compare reference of the request, in percent. Equals changePct for the default previousClose. null without that reference."}}},"ItemDetail":{"type":"object","properties":{"id":{"type":"integer","description":"Base item ID."},"name":{"type":"string"},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"classId":{"type":["integer","null"]},"subClassId":{"type":["integer","null"]},"quality":{"type":["integer","null"],"description":"0 poor, 1 common, 2 uncommon, 3 rare, 4 epic, 5 legendary."},"itemLevel":{"type":["integer","null"]},"minLevel":{"type":["integer","null"]},"inventoryType":{"type":["integer","null"],"description":"Game inventory type (equipment slot) number."},"vendorSell":{"type":["integer","null"],"description":"What a vendor pays for one. Copper (10000 = 1 gold)."},"maxStack":{"type":["integer","null"]},"icon":{"type":["integer","null"],"description":"Icon FileDataID. In game, pass it straight to SetTexture."},"listed":{"type":"boolean","description":"true when the item was in the latest scan. false for a historical item: its quote fields are null and lastSeen/lastMinBuyout say when and what it was."},"minBuyout":{"type":["integer","null"],"description":"Lowest asking buyout per unit in the latest scan. Copper (10000 = 1 gold)."},"quantity":{"type":["integer","null"],"description":"Units listed across every auction of the item in the latest scan."},"floorValue":{"type":["integer","null"],"description":"minBuyout x quantity. A size measure, not revenue. Copper (10000 = 1 gold)."},"extreme":{"type":"boolean","description":"true when floorValue is over 100x the market 99th percentile (a placeholder or troll listing). Left out of totals and the market index."},"previousClose":{"type":["integer","null"],"description":"The item's last daily close from before the current scanning session. Copper (10000 = 1 gold)."},"previousCloseTime":{"type":["string","null"],"format":"date-time","description":"When previousClose was observed."},"changePct":{"type":["number","null"],"description":"minBuyout against previousClose, in percent. null without a reference."},"previousScan":{"type":["integer","null"],"description":"minBuyout in the previous full scan. Copper (10000 = 1 gold)."},"previousDay":{"type":["integer","null"],"description":"Last observed minBuyout on the preceding UTC day. Copper (10000 = 1 gold)."},"dayOpen":{"type":["integer","null"],"description":"First observed minBuyout of the scan UTC day. Copper (10000 = 1 gold)."},"dayOpenTime":{"type":["string","null"],"format":"date-time","description":"When dayOpen was observed."},"previousQuantity":{"type":["integer","null"],"description":"quantity in the previous full scan."},"trend":{"type":["string","null"],"enum":["rising","falling","unchanged","new",null],"description":"minBuyout against previousScan. new: the previous full scan had no quote."},"observedDays":{"type":["integer","null"],"description":"UTC days with at least one observation."},"lastSeen":{"type":["string","null"],"format":"date-time","description":"Scan in which the item was last observed."},"lastMinBuyout":{"type":["integer","null"],"description":"minBuyout at lastSeen. Copper (10000 = 1 gold)."},"tooltip":{"type":["object","null"],"description":"The in-game tooltip as captured by the scanner, without character-specific lines.","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"left":{"type":"string"},"leftColor":{"type":"string"},"right":{"type":"string"},"rightColor":{"type":"string"}}}},"capturedAt":{"type":["string","null"],"format":"date-time","description":"When the tooltip was captured."}}},"history":{"type":"array","items":{"$ref":"#/components/schemas/HistoryDay"}},"url":{"type":"string","description":"The item page on the website."}}},"HistoryDay":{"type":"object","properties":{"day":{"type":"string","format":"date","description":"UTC day."},"low":{"type":["integer","null"],"description":"Lowest minBuyout observed that day. Copper (10000 = 1 gold)."},"high":{"type":["integer","null"],"description":"Highest minBuyout observed that day. Copper (10000 = 1 gold)."},"close":{"type":["integer","null"],"description":"Last minBuyout observed that day. Copper (10000 = 1 gold)."},"quantity":{"type":["integer","null"],"description":"Units listed at the last observation."},"samples":{"type":["integer","null"],"description":"Observations that day."},"observedAt":{"type":["string","null"],"format":"date-time","description":"Time of the last observation that day."}}}}},"x-grimlight-data-lifecycle":{"status":"archived","gameEnvironment":"beta","referenceOnly":true,"closedOn":"2026-10-23","notice":"Archived Forever beta observations. Historical reference only; not current or live-release prices."}}