{
  "openapi": "3.1.0",
  "info": {
    "title": "fsaircraft.net catalog API",
    "version": "1.0.0",
    "summary": "Read-only price comparison data for Microsoft Flight Simulator add-ons.",
    "description": "Every add-on fsaircraft.net tracks, every store that sells it, the current price and the discount measured against the highest price we have ever recorded for that same offer. No authentication, no rate limit, CORS open to all origins, responses cached for 10 minutes. Facts (titles, prices, discounts, store and developer names, compatibility) may be reused and cited freely with attribution to fsaircraft.net and a link to the page the fact came from. Product images and descriptions belong to their developers and stores and are shown here for identification only — do not redistribute them.",
    "contact": {
      "name": "fsaircraft.net",
      "email": "hello@fsaircraft.net",
      "url": "https://fsaircraft.net"
    },
    "license": {
      "name": "Facts free to cite with attribution; media belongs to its vendors",
      "url": "https://fsaircraft.net/about"
    }
  },
  "servers": [
    {
      "url": "https://fsaircraft.net",
      "description": "Production"
    }
  ],
  "paths": {
    "/api/v1/products.json": {
      "get": {
        "summary": "List add-ons",
        "operationId": "listProducts",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Full-text search over title, summary, developer and tags. Minimum three characters.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category slug: aircraft, airport, scenery, utility, livery, other.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sim",
            "in": "query",
            "required": false,
            "description": "Simulator code: msfs2020, msfs2024, or `unknown` for add-ons with no declared version.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "store",
            "in": "query",
            "required": false,
            "description": "Store slug, as returned by /api/v1/stores.json.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "developer",
            "in": "query",
            "required": false,
            "description": "Developer slug, as shown on /developers.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "aircraft_type",
            "in": "query",
            "required": false,
            "description": "ICAO Doc 8643 aircraft type designator (B738, A20N, C172). Returns every add-on our classifier attaches to that type, including liveries for it. Vocabulary: /api/v1/aircraft-types.json.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "airport",
            "in": "query",
            "required": false,
            "description": "ICAO airport code (EGLL, KJFK). Returns every add-on our classifier attaches to that airport. Vocabulary: /api/v1/airports.json.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "on_sale",
            "in": "query",
            "required": false,
            "description": "Set to 1 to return only discounted add-ons.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "true"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Ordering.",
            "schema": {
              "type": "string",
              "enum": [
                "relevance",
                "price_asc",
                "price_desc",
                "discount",
                "newest",
                "ending_soon",
                "saving"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Rows per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of catalog rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "generated_at",
                    "products"
                  ],
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source": {
                      "type": "string"
                    },
                    "license": {
                      "type": "string"
                    },
                    "page": {
                      "type": "integer"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "page_count": {
                      "type": "integer"
                    },
                    "next_page": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "prev_page": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "products": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "api_url": {
                            "type": "string"
                          },
                          "summary": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "category": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "slug": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              }
                            }
                          },
                          "developer": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "image_url": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "first_seen_at": {
                            "type": "string"
                          },
                          "offer_count": {
                            "type": "integer"
                          },
                          "on_sale": {
                            "type": "boolean"
                          },
                          "discount_pct": {
                            "type": "integer"
                          },
                          "best_offer": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "offer_id": {
                                "type": "integer"
                              },
                              "store": {
                                "type": "object",
                                "properties": {
                                  "slug": {
                                    "type": "string"
                                  },
                                  "name": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                }
                              },
                              "price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "reference_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "description": "Highest price ever recorded for this offer; the discount basis."
                              },
                              "lowest_recorded_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "discount_pct": {
                                "type": "integer"
                              },
                              "sale_ends_at": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Store-published sale expiry, 'YYYY-MM-DD HH:MM:SS' UTC."
                              },
                              "go_url": {
                                "type": "string",
                                "description": "Counted redirect on fsaircraft.net. Prefer this when linking."
                              },
                              "store_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "The store's own product page."
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/products/{slug}.json": {
      "get": {
        "summary": "One add-on with every offer and its price history",
        "operationId": "getProduct",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Add-on slug, as it appears in /addons/{slug}.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The add-on.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "product": {
                      "type": "object",
                      "properties": {
                        "slug": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        },
                        "api_url": {
                          "type": "string"
                        },
                        "summary": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "category": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "properties": {
                            "slug": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            }
                          }
                        },
                        "developer": {
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "image_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "first_seen_at": {
                          "type": "string"
                        },
                        "offer_count": {
                          "type": "integer"
                        },
                        "on_sale": {
                          "type": "boolean"
                        },
                        "discount_pct": {
                          "type": "integer"
                        },
                        "best_offer": {
                          "type": [
                            "object",
                            "null"
                          ],
                          "properties": {
                            "offer_id": {
                              "type": "integer"
                            },
                            "store": {
                              "type": "object",
                              "properties": {
                                "slug": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              }
                            },
                            "price": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "properties": {
                                "amount": {
                                  "type": "number",
                                  "description": "Decimal amount in `currency`."
                                },
                                "currency": {
                                  "type": "string",
                                  "description": "ISO 4217 code the store actually charges in."
                                },
                                "converted": {
                                  "type": "object",
                                  "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                  "properties": {
                                    "EUR": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "USD": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "GBP": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    }
                                  }
                                }
                              }
                            },
                            "reference_price": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "properties": {
                                "amount": {
                                  "type": "number",
                                  "description": "Decimal amount in `currency`."
                                },
                                "currency": {
                                  "type": "string",
                                  "description": "ISO 4217 code the store actually charges in."
                                },
                                "converted": {
                                  "type": "object",
                                  "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                  "properties": {
                                    "EUR": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "USD": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "GBP": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    }
                                  }
                                }
                              },
                              "description": "Highest price ever recorded for this offer; the discount basis."
                            },
                            "lowest_recorded_price": {
                              "type": [
                                "object",
                                "null"
                              ],
                              "properties": {
                                "amount": {
                                  "type": "number",
                                  "description": "Decimal amount in `currency`."
                                },
                                "currency": {
                                  "type": "string",
                                  "description": "ISO 4217 code the store actually charges in."
                                },
                                "converted": {
                                  "type": "object",
                                  "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                  "properties": {
                                    "EUR": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "USD": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    },
                                    "GBP": {
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    }
                                  }
                                }
                              }
                            },
                            "discount_pct": {
                              "type": "integer"
                            },
                            "sale_ends_at": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Store-published sale expiry, 'YYYY-MM-DD HH:MM:SS' UTC."
                            },
                            "go_url": {
                              "type": "string",
                              "description": "Counted redirect on fsaircraft.net. Prefer this when linking."
                            },
                            "store_url": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "The store's own product page."
                            }
                          }
                        },
                        "description": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "simulators": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Simulator versions the selling store declares. Never inferred."
                        },
                        "images": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "rating": {
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "offers": {
                          "type": "array",
                          "items": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "offer_id": {
                                "type": "integer"
                              },
                              "store": {
                                "type": "object",
                                "properties": {
                                  "slug": {
                                    "type": "string"
                                  },
                                  "name": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                }
                              },
                              "price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "reference_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "description": "Highest price ever recorded for this offer; the discount basis."
                              },
                              "lowest_recorded_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "discount_pct": {
                                "type": "integer"
                              },
                              "sale_ends_at": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Store-published sale expiry, 'YYYY-MM-DD HH:MM:SS' UTC."
                              },
                              "go_url": {
                                "type": "string",
                                "description": "Counted redirect on fsaircraft.net. Prefer this when linking."
                              },
                              "store_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "The store's own product page."
                              }
                            }
                          }
                        },
                        "price_history": {
                          "type": "array",
                          "description": "Daily cheapest price across all offers, in `price_history_currency`.",
                          "items": {
                            "type": "object",
                            "properties": {
                              "date": {
                                "type": "string",
                                "format": "date"
                              },
                              "amount": {
                                "type": "number"
                              }
                            }
                          }
                        },
                        "price_history_currency": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No add-on with that slug."
          }
        }
      }
    },
    "/api/v1/deals.json": {
      "get": {
        "summary": "Current discounts",
        "operationId": "listDeals",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Which cut of the deals list to return.",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "ending-soon",
                "lowest-ever"
              ],
              "default": "all"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category slug.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sim",
            "in": "query",
            "required": false,
            "description": "Simulator code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "store",
            "in": "query",
            "required": false,
            "description": "Store slug.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Rows per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Discounted add-ons plus catalog-wide deal counters.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "type": {
                      "type": "string"
                    },
                    "html_page": {
                      "type": "string"
                    },
                    "discount_basis": {
                      "type": "string"
                    },
                    "totals": {
                      "type": "object"
                    },
                    "deals": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "api_url": {
                            "type": "string"
                          },
                          "summary": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "category": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "slug": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              }
                            }
                          },
                          "developer": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "image_url": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "first_seen_at": {
                            "type": "string"
                          },
                          "offer_count": {
                            "type": "integer"
                          },
                          "on_sale": {
                            "type": "boolean"
                          },
                          "discount_pct": {
                            "type": "integer"
                          },
                          "best_offer": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "offer_id": {
                                "type": "integer"
                              },
                              "store": {
                                "type": "object",
                                "properties": {
                                  "slug": {
                                    "type": "string"
                                  },
                                  "name": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                }
                              },
                              "price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "reference_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "description": "Highest price ever recorded for this offer; the discount basis."
                              },
                              "lowest_recorded_price": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "properties": {
                                  "amount": {
                                    "type": "number",
                                    "description": "Decimal amount in `currency`."
                                  },
                                  "currency": {
                                    "type": "string",
                                    "description": "ISO 4217 code the store actually charges in."
                                  },
                                  "converted": {
                                    "type": "object",
                                    "description": "The same amount in each display currency, at the latest ECB reference rate.",
                                    "properties": {
                                      "EUR": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "USD": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "GBP": {
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    }
                                  }
                                }
                              },
                              "discount_pct": {
                                "type": "integer"
                              },
                              "sale_ends_at": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Store-published sale expiry, 'YYYY-MM-DD HH:MM:SS' UTC."
                              },
                              "go_url": {
                                "type": "string",
                                "description": "Counted redirect on fsaircraft.net. Prefer this when linking."
                              },
                              "store_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "The store's own product page."
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Unknown `type`."
          }
        }
      }
    },
    "/api/v1/aircraft-types.json": {
      "get": {
        "summary": "Aircraft-type vocabulary with add-on counts",
        "operationId": "listAircraftTypes",
        "description": "Every ICAO Doc 8643 type designator `products.json?aircraft_type=` accepts, with the reference facts about the aeroplane (manufacturer, model, family, category, first flight, freely-licensed image) and the number of listings we carry for it. Reference fields come from ICAO Doc 8643 and Wikidata, not from us; the counts are ours.",
        "parameters": [
          {
            "name": "all",
            "in": "query",
            "required": false,
            "description": "Set to 1 to include curated sim-relevant types with no add-on yet.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "airliner, regional, business-jet, general-aviation, turboprop, military, helicopter, glider, historic, other.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "manufacturer",
            "in": "query",
            "required": false,
            "description": "Manufacturer slug, as used in /aircraft/{manufacturer} URLs.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Aircraft types, busiest first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "reference_data": {
                      "type": "object"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "aircraft_types": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "icao_designator": {
                            "type": "string"
                          },
                          "manufacturer": {
                            "type": "string"
                          },
                          "model": {
                            "type": "string"
                          },
                          "family": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "category": {
                            "type": "string"
                          },
                          "first_flight": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "wikidata_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "image_url": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "url": {
                            "type": "string"
                          },
                          "api_url": {
                            "type": "string"
                          },
                          "product_count": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/airports.json": {
      "get": {
        "summary": "Airports we carry scenery for, with add-on counts",
        "operationId": "listAirports",
        "description": "Every ICAO airport `products.json?airport=` accepts — i.e. the ones at least one tracked add-on implements, not the full 40,000-row reference table. Airport facts come from OurAirports (public domain); the counts are ours.",
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 code (GB) or the slug used in site URLs (united-kingdom).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "continent",
            "in": "query",
            "required": false,
            "description": "AF, AN, AS, EU, NA, OC or SA.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Airports, busiest first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "reference_data": {
                      "type": "object"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "airports": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "icao": {
                            "type": "string"
                          },
                          "iata": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "city": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "country_code": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "country": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "continent": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "size": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "lat": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "lon": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "url": {
                            "type": "string"
                          },
                          "api_url": {
                            "type": "string"
                          },
                          "product_count": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/stores.json": {
      "get": {
        "summary": "Storefronts tracked, with price-history summaries",
        "operationId": "listStores",
        "responses": {
          "200": {
            "description": "Every active store.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "last_price_check_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "stores": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "store_url": {
                            "type": "string"
                          },
                          "product_count": {
                            "type": "integer"
                          },
                          "on_sale_count": {
                            "type": "integer"
                          },
                          "average_discount_pct": {
                            "type": "integer"
                          },
                          "deepest_discount_pct": {
                            "type": "integer"
                          },
                          "offers_with_price_movement": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}