JSON API
Everything this site shows is available as JSON: 8,635 MSFS add-ons, 8,643 store offers across 7 storefronts, with the price history behind every discount. No key, no rate limit, CORS open to every origin.
Last price check across all stores: 2026-09-22T13:20:30.485Z (UTC). Responses are cached for 10 minutes and carry generated_at.
Shape of a response
Every response is an object carrying generated_at (RFC 3339, UTC),source, license and contact, followed by the payload. Money always looks like this — the currency the store charges in, plus a conversion into all three display currencies so you never need an FX table of your own:
"price": {
"amount": 59.99,
"currency": "GBP",
"converted": { "EUR": 69.14, "USD": 74.82, "GBP": 59.99 }
}Quote amount/currency when stating a price; converted is for comparison only. Offers carry both go_url (our counted redirect) andstore_url (the store's own page).
Catalog
GET /api/v1/products.json
Paginated list of add-ons. The same query engine as /addons, so a filter here and the equivalent page on the site can never disagree.
- q
- Full-text search over title, summary, developer and tags. Minimum three characters.
- category
- Category slug: aircraft, airport, livery, other, scenery, utility.
- sim
- msfs2020, msfs2024, or unknown for add-ons with no declared version.
- store
- Store slug: aerosoft, contrail, justflight, orbx, pmdg, simmarket, inibuilds.
- developer
- Developer slug, as shown on /developers.
- on_sale
- Set to 1 for discounted add-ons only.
- sort
- relevance, price_asc, price_desc, discount, newest, ending_soon, saving.
- page / per_page
- 1-based page number; up to 100 rows per page (default 50).
One add-on
GET /api/v1/products/{slug}.json
Everything we hold on a single product: every store offer with its VAT split, sale expiry and last-checked time, plus the daily price history the chart on the site is drawn from.
- {slug}
- The slug from the add-on page URL, /addons/{slug}.
Deals
GET /api/v1/deals.json
Current discounts, in the same three cuts the site publishes as pages, plus catalog-wide counters under totals.
- type
- all (default), ending-soon, or lowest-ever.
- category / sim / store
- Same slugs as the catalog endpoint.
- page / per_page
- As above.
Stores
GET /api/v1/stores.json
Every storefront we read, with how many products it carries, how many are discounted, and what our price history says about how deep its discounts usually run.
Questions people ask
- Do I need an API key?
- No. There is no authentication and no rate limit today. Responses are cached for 10 minutes and CORS is open to every origin, so you can call these endpoints straight from a browser.
- What does "discount" mean in the API?
- The current price is below the highest price we have ever recorded for that same offer at that same store. It is never derived from a store-printed list price, which is why a permanent "50% off" markdown does not appear as a deal.
- Which currency are prices in?
- Both: every money object carries the amount and currency the store actually charges, plus a converted block with EUR, USD and GBP at the latest ECB reference rate. Use the store currency when quoting a price and the converted values only for comparison.
- Can I republish this data?
- Facts — titles, prices, discounts, store and developer names, declared compatibility — can be reused and cited freely with attribution to fsaircraft.net and a link to the page the fact came from. Product images and store-written descriptions belong to their vendors and are not ours to license.
Fair use
There is no rate limit because nobody has needed one. If you are planning a full crawl, take the catalog endpoint at per_page=100 rather than fetching every product detail — and if you are building something on this data, we would like to hear about it: [email protected].