OSRS Price Data API
Observed Grand Exchange prices for apps, research, and AI assistants.
The production API is public, read-only, and needs no account or API key. Search for an item, then request its latest available price observations in in-game gold pieces (GP).
Look up a price
-
Find the item.
GET /api/public/items?q=abyssal%20whip&limit=10qaccepts an item name or exact ID, with 2–80 characters total and at least two after trimming surrounding whitespace.limitaccepts 1–20 results and defaults to 10. The response contains anitemslist withitem_id,name, and the canonical item-pageurl. No match returns an empty list. -
Read its price observations.
The item ID selects the exact item variant. This example looks up the Abyssal whip; the response reports each price side independently.
Use https://runescapetrader.com as the production base URL. All responses are JSON. These endpoints expose public market observations, without account data or trading actions.
Read the response
item_id,name,url- The exact item identity and canonical human-readable page to cite.
unitandbuy_limitunitis alwaysGP, an in-game unit rather than a real-world currency.buy_limitis the Grand Exchange buy limit, ornullwhen unknown.prices.instant_buy- The Wiki high side: a reported completed instant-buy trade.
prices.instant_sell- The Wiki low side: a reported completed instant-sell trade, before Grand Exchange tax.
gp,observed_at,age_seconds,status- Each price side contains its GP value, that trade's UTC timestamp, its age in seconds when the response was generated, and a freshness state. Missing values are
null, never a zero-GP price. market_data_updated_at- UTC publication time of the site's market snapshot, or
null. A snapshot refresh does not mean a new trade occurred for every item. source.nameandsource.url- Attribution to the OSRS Wiki real-time prices project, the source of these observations.
Freshness is per price side
fresh: the observation is at most 15 minutes old.stale: the observation is more than 15 minutes old.unknown: a price exists, but its observation time is missing, invalid, or in the future;age_secondsisnull.unavailable: no usable price is available for that side;gp,observed_at, andage_secondsarenull.
These are reported trades, not a live order book or guaranteed fill prices. They are also separate from the modeled trade recommendations, margins, and ROI elsewhere on the site.
Sample JSON response
Illustrative sample only, showing unavailable observations. This is not a live quote.
{
"item_id": 4151,
"name": "Abyssal whip",
"url": "https://runescapetrader.com/item/4151",
"unit": "GP",
"buy_limit": null,
"prices": {
"instant_buy": {
"gp": null,
"observed_at": null,
"age_seconds": null,
"status": "unavailable"
},
"instant_sell": {
"gp": null,
"observed_at": null,
"age_seconds": null,
"status": "unavailable"
}
},
"market_data_updated_at": null,
"source": {
"name": "OSRS Wiki real-time prices",
"url": "https://oldschool.runescape.wiki/w/RuneScape:Real-time_Prices"
}
}
Use it with an AI assistant
The OpenAPI specification describes the public endpoints for clients and tool integrations. When building a pricing answer, fetch the quote at answer time, name the buy or sell side, give the observation's exact time, and preserve any stale or unavailable state. Cite the returned url and acknowledge the Wiki source.
A useful citation reads: “Abyssal whip, instant-buy observation: [GP value], reported at [UTC observation time], via RuneScape Trader using OSRS Wiki data.” Do not substitute the snapshot publication time for a missing observation time.
We do not currently provide an MCP connector. An API or specification also does not automatically make ChatGPT, Claude, or another assistant choose this site; direct tools must be configured in the client that will use them.
Limits and errors
Requests share the browser API's allowance of 100 requests per minute per IP address. Reuse recent responses where suitable and avoid repeated polling.
404: unknown item ID.422: invalid item ID, query, or limit.429: the shared request allowance has been exceeded; back off before retrying.503: the market snapshot is not ready. Wait for theRetry-After: 60interval before retrying.
A known item with a missing price returns a normal quote with null values and unavailable status for the affected side. It is different from an unknown item or a snapshot that is not ready.