Your PS garage: trophies, nostalgia, stats and dealsYour PS hub 10,465 players have started
Build my hub
PS Store DB PS Store DB
Charts Deals
Install Base

API

You do not need a key to use these endpoints. They return the same data the site uses, as JSON. 2 of them (/api/search and /api/gameinfo) ask the PlayStation Store when a game is not already saved; the rest read only from the site's own database.

Base URL: https://ps-store-db.live. All parameters are query string unless marked as a JSON body. No header is needed.

Version 1

Every figure the site's pages show, read from the last saved charts. None of these send a request to the PlayStation Store. Each answer carries saved_at, the time of the save it reads, and a link to the matching page. Rate limit: 60 requests a minute per visitor. Responses are cached for 5 minutes.

EndpointReturns
GET /api/v1/storesThe 55 tracked stores with their 2 letter codes, by region
GET /api/v1/charts/{store}?depth=25A store's best seller chart: rank, game, rating, reviews and price, up to the top 100
GET /api/v1/number-onesThe number 1 in every store today, grouped by game, with the longest streak
GET /api/v1/search?q=Games by name, with the id the other endpoints take
GET /api/v1/games/{id}1 game: release date, rating, launch label with its proof, and its rank in every store
GET /api/v1/games/{id}/rank-history?stores=US,JPDaily best rank per store from 100 days before release to 100 days after, top 100 only
GET /api/v1/top-rated/{list}A top rated list: best, most-reviewed, new, hidden-gems, on-sale, all-time or most-reviewed-all-time
GET /api/v1/most-anticipatedBest selling games not released yet, ranked by the same points as the best sellers chart
GET /api/v1/preorders/{store}1 store's own preorder chart on the latest day saved
GET /api/v1/top-downloads/{region}Sony's latest monthly top downloads for us, eu, asia or japan, from the PlayStation Blog
GET /api/v1/moversThe biggest 1 day climbs and falls in the top 50 of the 20 featured stores
GET /api/v1/publishersEvery publisher with games charting and top 100 places today
GET /api/v1/publishers/{slug}A publisher's top 100 places, share, regions, labels, games and official sales figures

A game id, list or store that does not exist returns 404 with a message naming the valid values.

MCP server

The same data as tools for AI assistants, at https://ps-store-db.live/mcp (Streamable HTTP, no key). In Claude, add it under Settings, Connectors, Add custom connector. In Claude Code: claude mcp add --transport http ps-store-db https://ps-store-db.live/mcp.

Tools: list_stores, get_chart, get_number_ones, search_games, get_game, get_rank_history, get_top_rated, get_most_anticipated, get_movers, list_publishers and get_publisher. All are read only.

Older endpoints

Chart data (cached)

These read the last saved charts and never send a request to the PlayStation Store. Both accept a stores parameter: a comma separated list of region keys (US,GB,JP), or one of the named sets below.

GET /api/topten

Each tracked store's top 25 best sellers.

GET /api/topten?stores=US,JP

{
  "results": {
    "US": [
      { "rank": 1, "id": "...", "name": "...", "cover": "...", "price": "$59.99", ... }
    ]
  },
  "note": null
}

GET /api/top100

The full Top 100 browse grid, same shape as above.

GET /api/top100?stores=plato

Named store sets

Search and lookup (live)

These ask store.playstation.com when the answer is not already in the site's own index, so each visitor has a rate limit, and all requests to the store share 1 overall limit that pauses them if the store starts refusing. When that happens a response can come back empty instead of failing. See status for current collection health.

GET /api/search

Rate limit: 60 requests a minute per visitor. It searches the site's own index first, with no request to the store, and only uses the PlayStation Store search when nothing is found. A result from the index has no price, because prices differ by store and the index holds names.

GET /api/search?q=persona&store=US

{ "results": [ { "id": "...", "name": "...", "cover": "...", "price": "..." } ] }

GET /api/gameinfo

Rate limit: 30 requests a minute per visitor. Returns 404 if the id is not found. Like search, it reads the saved record first: a saved response has everything except price and sets "cached": true. A game never seen before is fetched from the store, and that response includes the price and leaves out the field.

A game's release_date comes with release_date_precision: "day", "month" (the store gave only the month, written as its last day) or "year" (the store gave only the year, so the date is just "2027"). A month or year only date has no days_until_release. On Most anticipated and the preorder charts, release_month holds "Dec 2026" for a month and "2027" for a year. When that month or year has passed and the game has no ratings yet, so it is not out, release_date is null with precision "to_be_confirmed", and the charts send "date_to_be_confirmed": true.

GET /api/gameinfo?id=10008789&store=US

{ "id": "10008789", "name": "...", "cover": "...", "rating": ..., "release_date": "...",
  "cached": true, ... }

Status

GET /api/refresh-status

{ "regions": { "US": { "last_success": ..., "last_error": null } }, "auto_refresh": true }

GET /api/stores

Every tracked region, its metadata, and the named sets above, in one call.

GET /api/health

{ "status": "ok", "time": "2026-08-31T12:00:00+00:00" }

There is no versioning, and the responses can change, because the site itself uses the same endpoints. If you rely on it for a project, get in touch through the contact page and I will try to give notice before a change.