NTPrices
Deals All Regions Sales Blog

eShop Game Price API

Already have a key? Your (sign in first) dashboard shows live monthly usage, a 30-day request history, your plan & expiry, and self-service region picking. Prefer no account at all? The same self-service works purely by API key: GET /api/v2/account, GET /api/v2/account/usage and PUT /api/v2/account/regions — see the v2 reference. Open developer dashboard →
Heads up — this page documents the legacy v1 API (/api.php), which is now deprecated. It will be retired on 1 December 2026 — you have a 6-month window to migrate. It still works today, but all new integrations should use the modern v2 REST API — header auth, filtering, pagination, price history and unified game cards. → Go to the v2 reference.

The NTPrices eShop API gives developers programmatic access to eShop game data in clean, easy-to-use JSON: current Switch & Switch 2 prices, full price history, and live sales and discounts – across 50 eShop regions. It returns exactly the same data shown throughout NTPrices, so it is always kept up to date.

  • eShop price API
  • Switch & Switch 2 prices
  • Price history
  • Sales & discounts
  • Release dates
  • 50 regions
  • JSON

What the eShop API provides

Full price historyUnique

Every price change we’ve recorded for a title – track the lowest-ever price and spot genuine deals, data general price APIs don’t expose.

Live & historical pricing

Base and sale prices with DiscPerc, in raw cents and a formatted string, plus when a title was last discounted.

Sales & discounts

Pull everything discounted in the last 48 hours, list every active store sale, or fetch a single sale’s full line-up.

50 regions

Add &region=GB (any ISO 2-letter code) for that country’s pricing and release date.

Rich metadata

Genres, audio/subtitle languages, ratings, download sizes, screenshots and the OpenCriticID for review data.

Flexible lookups

Find a product by ppid, official nsuid (eShop NSUID; legacy psnid still accepted), or fuzzy name search.

Plans & Pricing

Start free with 1,000 requests a month – no card required. Upgrade any time as your usage grows; limits are counted per calendar month (UTC), and every response includes your current apiLimit and apiUsage. List endpoints (/games, /deals) return up to your plan’s page size per request — 25 on Free, up to 200 on Business — so a single request can fetch many titles at once.

Free

$0 forever
1,000 req / mo

For evaluating the API and hobby projects.

  • Live prices & current sales
  • Switch & Switch 2 game data
  • 2 regions
  • 1,000 requests / month
  • Up to 25 games per list request
  • Clean JSON — no card required
  • Non-commercial use only
Get free key

Indie

$19/mo
20,000 req / mo

For indie devs and small sites.

  • Everything in Free
  • Commercial use allowed
  • Price history (last 3 months)
  • 5 regions
  • 20,000 requests / month
  • Up to 50 games per list request
  • Email support
Subscribe

Business

$149/mo
500,000 req / mo

For high-volume and commercial use.

  • Everything in Pro
  • Deep price history (12 months)
  • All 50 regions
  • 500,000 requests / month
  • Up to 200 games per list request
  • Priority support
Subscribe

Need more than 500,000 requests a month, a full multi-region mirror, or a custom price-history export? Talk to us – we’re happy to tailor a plan. After subscribing, your API key is emailed to you – see the welcome note for how to claim it.

API Terms of Use. Use the API in your apps, sites, dashboards, analytics and user-facing alerts. Commercial use requires a paid plan — the Free plan is for evaluation and non-commercial projects only. You may not use the API to build a directly competing price-tracking service, resell or redistribute the raw data, bulk-archive data beyond your plan’s limits and history window, or scrape ntprices.com to get around those limits. Plans where attribution is required must show “Powered by NTPrices” with a link wherever the data is displayed publicly. Keys that violate these terms may be throttled or revoked. Questions about a use case? Just ask.

Quick Start

1. Email us for a key  ·  2. Make a GET request  ·  3. Read JSON. That’s it – no SDK required.

To get your key, send us a short note about your project at [email protected]. The full reference for every endpoint and field is below.

# A game's price & metadata (US store)
curl "https://ntprices.com/api.php?key=$PP_KEY&ppid=7704&region=us"

# Everything discounted in the UK in the last 48 hours
curl "https://ntprices.com/api.php?key=$PP_KEY&discount=1&region=GB"

API v2 (REST) is the recommended interface — header auth, filtering, pagination, price history and unified game cards. → Read the v2 reference. The v1 endpoint documented below is deprecated and will be retired on 1 December 2026.

How do I get Information About a Single Game or Product?

The API is accessed simply via a GET request (i.e., a standard web request), and the data is returned in JSON format. For example, accessing the URL https://ntprices.com/api.php?key=<API key>&ppid=7704, where <API key> is your API key, gives information like the following:

Example response — ppid=7704 (single game)
{
   "PPID":"7704",
   "NSUID":"70010000012345",
   "GameID":"HAC_AABCD",
   "NTPricesURL":"https://ntprices.com/en-us/game/7704-hollow-knight",
   "ProductName":"Hollow Knight",
   "GameName":"Hollow Knight",
   "Publisher":"Team Cherry",
   "Developer":"Team Cherry",
   "ReleaseDate":"2018-06-12",
   "Desc":"Forge your own path in Hollow Knight! An epic action adventure through a vast ruined kingdom of insects and heroes. Explore twisting caverns, battle tainted creatures and befriend bizarre bugs, all in a classic, hand-drawn 2D style.",

   "IsSwitch":"1",
   "IsSwitch2":"0",
   "IsDLC":"0",
   "IsDemoOrSoundtrack":"0",
   "SwitchSize":"924000000",
   "Switch2Size":"0",
   "OnlinePlay":"0",
   "OfflinePlayers":"1",
   "OnlinePlayers":"0",
   "VoiceLang":"",
   "SubtitleLang":"",
   "Rating":"ESRB Everyone 10+",
   "RatingDesc":"[\"Fantasy Violence\",\"Mild Blood\"]",
   "OpenCriticID":"3190",
   "MetacriticURL":"",

   "Img":"https://imgcdn.platprices.com/prod_img/7704_340.webp",
   "CoverArt":"https://imgcdn.platprices.com/gametiles/HAC_AABCD_512.webp",
   "LogoImg":"",
   "Screenshot1":"",
   "PreviewVideo":"",

   "GenreAction":"1",
   "GenreAdventure":"1",
   "GenreArcade":"0",
   "GenreFighting":"0",
   "GenreFPS":"0",
   "GenreHorror":"0",
   "GenreIntStory":"0",
   "GenreMMO":"0",
   "GenreMusic":"0",
   "GenrePlatformer":"1",
   "GenrePuzzle":"0",
   "GenreRacing":"0",
   "GenreRPG":"0",
   "GenreSimulation":"0",
   "GenreSports":"0",
   "GenreStrategy":"0",
   "GenreTPS":"0",

   "Region":"US",
   "BasePrice":"1499",
   "SalePrice":"749",
   "formattedBasePrice":"$14.99",
   "formattedSalePrice":"$7.49",
   "DiscPerc":"50",
   "LastDiscounted":"2021-02-10 09:11:04",
   "DiscountedUntil":"2021-02-25 07:59:00",

   "apiLimit":"100",
   "apiUsage":"15",
   "error":0,
   "errorDesc":""
}

How do I specify which product or game I want information for?

To tell the API which game or product you would like information about, specify exactly one of the following three parameters in the URL querystring:

  • ppid: The "NTPrices ID" of the product. This ID number can be found in the URL of every product page on NTPrices. For example, since the NTPrices page for Hollow Knight is https://ntprices.com/en-us/game/7704-hollow-knight, we see that its ppid is 7704, which is why we specified ppid=7704 in our first example above.
  • nsuid: The eShop product ID (NSUID) of the product — the per-region store SKU. For example, accessing the API url https://ntprices.com/api.php?key=<API key>&nsuid=70010000012345 returns the exact same information as our first example above. (The legacy psnid parameter still works as a deprecated alias.)
  • name: The name of the game or product. If this is provided, the API will return information about the most relevant product that it finds in the database. For example, the API URL https://ntprices.com/api.php?key=<API key>&name=Hollow Knight will return information about Hollow Knight. The game/product name does not need to be an exact match, but the lookup algorithm is also not perfect, so better-formatted names are more likely to return the product you are actually interested in. An error will be returned if no product with a similar name can be found.
Optionally, you may also specify a region parameter, which takes a 2-letter country code. By default the region is "US", but if you specify another region then pricing information and the release date will be returned for that region. For example, the url https://ntprices.com/api.php?key=<API key>&name=Hollow Knight&region=GB returns the same data as in our first example above, but with the release date and pricing information corresponding to the United Kingdom instead of the United States.

What do the values returned by the API mean?

For the most part, the values returned by the API should be self-explanatory. However, we clarify some of them here:

  • IsVR: "0" means VR not supported, "1" means VR is optional, "2" means VR is required
  • SwitchSize and Switch2Size: the download size, in bytes, of the product
  • OnlinePlay: "0" means the game is offline-only, "1" means online and offline modes are supported, "2" means the game is online-only
  • VoiceLang: a JSON array like ["en","es"] of language codes specifying the supported voice languages in the game
  • SubtitleLang: a JSON array like ["en","es"] of language codes specifying the supported subtitle languages in the game
  • OpenCriticID: the numeric ID of this game on OpenCritic, which can be used to look up game and review information from the (also free) OpenCritic API via URLs like https://api.opencritic.com/api/game/1520
  • MetacriticURL: the Metacritic URL of this game, which is only provided if the game does not have an OpenCritic entry
  • DiscPerc: the current discount percentage
  • LastDiscounted: the last time (in UTC) that we noticed this product go on sale – this might not be the exact time that it actually went on sale
  • error: 0 if successfully returned product information, a bigger-than-zero number if an error was encountered

How Can I Get a List of Games That Recently Went on Sale?

There are a couple of different ways to do this. The simplest is to specify discount=1 in the URL querystring (instead of the other parameters discussed above), which returns a list of all games that had new discounts applied within the past 48 hours. For example, accessing the URL https://ntprices.com/api.php?key=<API key>&discount=1, where <API key> is your API key, gives a list of products in the following format:

Example response — discount=1 (recent discounts)
{
   "discounts":[
      {
         "PPID":"35552",
         "Name":"Hollow Knight",
         "NTPricesURL":"https://ntprices.com/en-us/game/35552-hollow-knight",
         "LastDiscounted":"2021-02-15 08:10:05",
         "DiscountedUntil":"2021-02-24 07:59:00",
         "BasePrice":"1499",
         "SalePrice":"749",
         "formattedBasePrice":"$14.99",
         "formattedSalePrice":"$7.49",
         "IsSwitch":"1",
         "IsSwitch2":"0"
      },
      {
         "PPID":"35551",
         "Name":"Celeste",
         "NTPricesURL":"https://ntprices.com/en-us/game/35551-celeste",
         "LastDiscounted":"2021-02-15 08:10:05",
         "DiscountedUntil":"2021-02-24 07:59:00",
         "BasePrice":"1999",
         "SalePrice":"999",
         "formattedBasePrice":"$19.99",
         "formattedSalePrice":"$9.99",
         "IsSwitch":"1",
         "IsSwitch2":"0"
      },
      {
         "PPID":"35550",
         "Name":"Stardew Valley",
         "NTPricesURL":"https://ntprices.com/en-us/game/35550-stardew-valley",
         "LastDiscounted":"2021-02-15 08:10:04",
         "DiscountedUntil":"2021-02-24 07:59:00",
         "BasePrice":"1499",
         "SalePrice":"1049",
         "formattedBasePrice":"$14.99",
         "formattedSalePrice":"$10.49",
         "IsSwitch":"1",
         "IsSwitch2":"0"
      }
   ],
   "error":0,
   "errorDesc":"",
   "apiLimit":"100",
   "apiUsage":"13"
}

Each game's PPID is provided so that additional information about it can be obtained via another API query, if desired.

Optionally, you may also specify a region parameter, which takes a 2-letter country code. By default the region is "US", but if you specify another region then pricing and discount information will be returned for that region. For example, the url https://ntprices.com/api.php?key=<API key>&discount=1&region=GB returns the discounts that went live in the United Kingdom region of the eShop in the last 48 hours.

How Can I Get Information About All Active Sales?

You can get a list of all active sales (i.e., the sales marked "Active" on this page) by specifying sales=1 in the URL querystring (instead of the other parameters discussed above). This will return information like the following:

Example response — sales=1 (active sales)
{
   "sales":[
      {
         "ID":"441",
         "SaleTime":"2021-02-17 08:11:44",
         "SaleEnd":"2021-03-04 07:59:00",
         "NumGames":"437",
         "ImgURL":"https://imgcdn.platprices.com/sales/441.jpg",
         "SaleName":"Double Discounts sale"
      },
      {
         "ID":"398",
         "SaleTime":"2021-02-10 02:29:07",
         "SaleEnd":"2021-02-25 07:59:00",
         "NumGames":"212",
         "ImgURL":"https://imgcdn.platprices.com/sales/398.jpg",
         "SaleName":"Big in Japan Sale"
      }
   ],
   "error":0,
   "errorDesc":"",
   "apiLimit":"100",
   "apiUsage":"1"
}

As with all of the API calls, the times returned here are in UTC. Also, the region parameter can be specified here as well to learn about sales in countries other than the US. The sales are always returned in order from newest to oldest. The sale IDs that are returned here can be used to look up all games that were discounted as part of that sale (see below).

How Can I Get A List of Games That Were Part of a Particular Sale?

After getting a sale's ID (either from the API call above with sales=1, or by looking at the URL of its sale table page, you can get a list of games and DLC packages that were part of that sale by specifying sale=<sale_id>. For example, the API URL https://ntprices.com/api.php?key=<API key>&sale=441 will return information like the following:

Example response — sale=441 (games & DLC in one sale)
{
   "SaleName":"Double Discounts sale",
   "SaleTime":"2021-02-17 08:11:44",
   "SaleEnd":"2021-03-04 07:59:00",
   "ImgURL":"https://imgcdn.platprices.com/sales/441.jpg",
   "Region":"US",
   "game_discounts":[
      {
         "PPID":"4081",
         "Name":"2064: Read Only Memories",
         "IsSwitch":"1",
         "IsSwitch2":"0",
         "LastDiscounted":"2021-02-17 08:11:05",
         "DiscountedUntil":"2021-03-04 07:59:00",
         "BasePrice":"1999",
         "SalePrice":"399",
         "formattedBasePrice":"$19.99",
         "formattedSalePrice":"$3.99",
         "NTPricesURL":"https://ntprices.com/en-us/game/4081-2064-read-only-memories"
      },
      {
         "PPID":"6326",
         "Name":"A Fisherman's Tale",
         "IsSwitch":"1",
         "IsSwitch2":"0",
         "LastDiscounted":"2021-02-17 08:10:40",
         "DiscountedUntil":"2021-03-04 07:59:00",
         "BasePrice":"1499",
         "SalePrice":"749",
         "formattedBasePrice":"$14.99",
         "formattedSalePrice":"$7.49",
         "NTPricesURL":"https://ntprices.com/en-us/game/6326-a-fishermans-tale"
      },
      {
         "PPID":"33870",
         "Name":"A Fisherman's Tale - Deluxe Edition",
         "IsSwitch":"1",
         "IsSwitch2":"0",
         "LastDiscounted":"2021-02-17 08:10:09",
         "DiscountedUntil":"2021-03-04 07:59:00",
         "BasePrice":"1999",
         "SalePrice":"999",
         "formattedBasePrice":"$19.99",
         "formattedSalePrice":"$9.99",
         "NTPricesURL":"https://ntprices.com/en-us/game/33870-a-fishermans-tale-deluxe-edition"
      },
      {
         "PPID":"4690",
         "Name":"Aces of the Luftwaffe - Squadron",
         "IsSwitch":"1",
         "IsSwitch2":"0",
         "LastDiscounted":"2021-02-17 08:10:49",
         "DiscountedUntil":"2021-03-04 07:59:00",
         "BasePrice":"1499",
         "SalePrice":"749",
         "formattedBasePrice":"$14.99",
         "formattedSalePrice":"$7.49",
         "NTPricesURL":"https://ntprices.com/en-us/game/4690-aces-of-the-luftwaffe-squadron"
      },
      ...
   ],
   "dlc_discounts":[
      {
         "PPID":"27379",
         "Name":"3on3 FreeStyle - 270 Fs Points",
         "BasePrice":"2499",
         "SalePrice":"2374",
         "ParentGame":"3on3 Freestyle",
         "formattedBasePrice":"$24.99",
         "formattedSalePrice":"$23.74",
         "NTPricesURL":"https://ntprices.com/en-us/game/27379-3on3-freestyle-270-fs-points"
      },
      {
         "PPID":"27374",
         "Name":"3on3 FreeStyle - 550 Fs Points",
         "BasePrice":"4999",
         "SalePrice":"4499",
         "ParentGame":"3on3 Freestyle",
         "formattedBasePrice":"$49.99",
         "formattedSalePrice":"$44.99",
         "NTPricesURL":"https://ntprices.com/en-us/game/27374-3on3-freestyle-550-fs-points"
      },
      ...
   "error":0,
   "errorDesc":"",
   "apiLimit":"100",
   "apiUsage":"10"
}

Note that the region parameter is not needed here (even for regions other than the US), since sales in different regions have different sale IDs.

Developer FAQ

How do I get an API key?
Email [email protected] with a one-line description of your project and the plan you want. We’ll reply with your key, usually within a day. Tip: fill in your developer profile first — it makes the request a one-liner.
Where can I see my usage and manage my key?
Two ways — pick whichever suits you. Via the API itself, by key alone (no website account needed): GET /api/v2/account returns your plan, quota, expiry and regions; GET /api/v2/account/usage the daily request history with a per-endpoint breakdown; and PUT /api/v2/account/regions changes which store regions your key serves (up to your plan’s limit, once per day). None of these consume a request, and every API response carries X-RateLimit-Remaining / X-RateLimit-Reset headers. Or in a UI: your developer dashboard shows the same data with a 30-day chart and a region picker.
What does the free plan include?
All endpoints, all pricing data, and 2 regions, with 1,000 requests a month and up to 25 results per list request. The paid plans add commercial-use rights, price history (last 3 months on Indie/Pro, 12 months on Business), more regions, larger page sizes, a higher monthly quota and support – see the table above.
How are requests counted?
Every successful API call counts as one request, no matter how many titles it returns. Your usage resets to zero on the 1st of each calendar month at 00:00 UTC, and the current count is returned in apiUsage on every response (with your cap in apiLimit). The same monthly counter is shared across the v1 and v2 APIs.
Can I use a competing service’s data, or build a price-alert site?
The API may not be used to power services that duplicate NTPrices’ core offering (for example, eShop wishlist sale-alert sites). If you’re not sure whether your project qualifies, just ask – we’re friendly.
Do I need to credit NTPrices?
On the Free and Indie plans, please link back to NTPrices wherever the data is shown. The Pro and Business plans have no attribution requirement. On every plan, please cache results in your own database rather than re-requesting the same data.
Does the API include review scores?
Yes. Responses include the OpenCriticID you can use with the free OpenCritic API for review data.

Still have a question? Email [email protected] and we’ll be glad to help.

We value your privacy. We use strictly-necessary cookies to run the site (sign-in, security). With your permission we also use analytics and advertising cookies to measure traffic and fund the site. You can accept all, reject non-essential, or choose per category. See our Cookie & Privacy Policy.