Path of Exile 2 Item and Currency Pricing
Live Path of Exile 2 market prices — unique item medians, currency exchange rates, and price history — drawn straight from the official GGG trade API and normalized into clean JSON.
This API wraps Grinding Gear Games' official Path of Exile 2 trade API and the community price tracker poe2scout, then hands you structured, ready-to-use price data instead of raw trade listings. Ask for an item by name and get back a median price plus p10/p90 spread and a 7-day trend; ask for currency and get every major orb priced in Chaos. Responses are heavily cached so you stay well clear of GGG's strict rate limits without managing any of that yourself.
Endpoints
| Endpoint | What it returns |
|---|---|
GET /health |
Liveness check. Fields: status, redis (connected/disconnected), league, timestamp. Always unauthenticated. |
GET /league/current |
The active PoE2 league. Fields: league, start_date, end_date, description. Note: GGG's PoE2 league feed only returns the league id/name, so start_date, end_date, and description are typically null. |
GET /price/currency |
Exchange rates for all major orbs, priced in Chaos. Fields: league, currency ("chaos"), rates (a map of orb id → { chaos_per_unit, sample_size }), last_updated. Optional league query param. |
GET /price/item?name=<item> |
Median / percentile price for a named unique item. Fields: item, league, currency (divine or chaos), price_median, price_p10, price_p90, listings_count, last_updated, trend_7d (rising/falling/stable). Requires name; optional league. |
GET /price/bulk?ids[]=a&ids[]=b |
Batch price check for up to 20 items in one call. Returns league and a results array; each entry is either { item, league, currency, price_median, listings_count, last_updated } or { item, error } for items with no listings. |
GET /price/history/:item?days=7 |
Daily price trend over time, sourced from poe2scout. Fields: item, league, days, trend, history (array of { date, price_chaos, price_divine, count }), last_updated. days defaults to 7, max 90; item name is URL-encoded in the path. |
Why this API
- Real, official data. Item and currency prices come from GGG's own PoE2 trade API (
/api/trade2), not a scraped mirror — the same source the in-game trade site uses. - Decision-ready numbers, not raw listings. You get a computed median plus p10/p90 percentile spread and a
trend_7ddirection per item, instead of having to page through and parse dozens of trade listings yourself. - One call for the whole currency market.
/price/currencyreturns every major orb (Divine, Exalted, Annulment, Chaos-relative, and more) in a single response, each with asample_sizeso you know how thin the data is. - Batch-friendly.
/price/bulkprices up to 20 items per request, with per-item errors so one missing unique never fails the whole call. - Rate-limit safe by design. All upstream responses are cached in Redis (default 10-minute TTL, 1-hour for league data), and currency requests fall back to poe.watch if the GGG API is briefly unavailable — so you're insulated from GGG's ~12 req/min ceiling and transient outages.
Typical use cases
- Power a price-check overlay, Discord bot, or trade companion that resolves "what is X worth right now?" by item name.
- Build crafting-cost or flip calculators using live orb exchange rates from
/price/currency. - Track a watchlist of uniques over time with
/price/history/:itemand surface rising/falling movers. - Snapshot a basket of items at once for loot-value or stash-valuation tools via
/price/bulk. - Detect the current temp league name programmatically with
/league/currentand route all your other queries to it.
Good to know
namemust be an exact item name./price/itemand/price/bulkmatch against unique item names (e.g.Shavronne's Wrappings,Astramentis). Currency orbs are not searchable here — requesting one (e.g.Divine Orb) returns a clean404pointing you to/price/currency.- Items rotate by league. Available uniques and their liquidity change every league; a heavily-traded staple may have hundreds of listings while a niche or rotated-out item returns a
404(no listings found). This is expected, not an outage. - Currency display switches automatically. For
/price/itemand/price/bulk, prices are shown indivinewhen the median exceeds ~100 chaos, otherwise inchaos— check thecurrencyfield on each response. Divine↔Chaos uses an approximate fixed conversion, so treatprice_*values as estimates, not exact quotes. - Freshness and caching. Responses are cached for ~10 minutes (currency/items) and ~1 hour (league), so
last_updatedreflects when the data was fetched, not the instant you called. Markets move fast near league launch. - Nullable fields are normal.
start_date/end_date/descriptionon/league/currentandprice_divine/countin history entries can benulldepending on what upstream returns. - History depends on poe2scout coverage.
/price/history/:itemis only as complete as poe2scout's data for that item and league; items it doesn't track return a404. - Limits.
/price/bulkaccepts at most 20 items per call;/price/historydaysmust be between 1 and 90. By default the API queries the league set in its configuration, but every price endpoint accepts aleaguequery param to override it.