La base de parcours FlyAway est lisible sans compte : ni clé d'API, ni OAuth, ni inscription. Chaque opération listée ici répond à une requête GET anonyme et renvoie du JSON. La description complète, lisible par machine, est publiée sous forme de document OpenAPI 3.1.
Trois appels couvrent l'essentiel des besoins d'une intégration : résoudre un parcours, lire sa fiche complète, ou trouver les parcours les plus proches d'une coordonnée.
# Full profile of one course
curl -s "https://api.flyawaygolf.com/v2/golfs/profile/golf-national"
# The 10 courses nearest a coordinate, with distances in metres
curl -s "https://api.flyawaygolf.com/v2/search/map/golfs?lat=48.75&long=2.07&max_distance=50000&limit=10"
# The same course as prose, for a language model
curl -s "https://flyawaygolf.com/golfs/golf-national/llm.md"
# Base URL
https://api.flyawaygolf.com/v2Ce tableau est généré à partir du document OpenAPI : les deux ne peuvent donc pas diverger. Toutes les opérations sont des GET et toute réponse réussie est encapsulée dans une clé data de premier niveau.
| Opération | Endpoint | Description |
|---|---|---|
| Courses | ||
| listGolfCourses | GET https://api.flyawaygolf.com/v2/golfs | List golf courses |
| getGolfCourseProfile | GET https://api.flyawaygolf.com/v2/golfs/profile/{slug} | Get the full profile of a golf course |
| getGolfCourseSummary | GET https://api.flyawaygolf.com/v2/seo/golfs/{identifier} | Get a compact summary of a golf course |
| resolveGolfCourseId | GET https://api.flyawaygolf.com/v2/golfs/resolve/{golf_id} | Resolve a course id to its slug |
| searchGolfCoursesByLocation | GET https://api.flyawaygolf.com/v2/search/map/golfs | Find golf courses around a coordinate |
| Directory | ||
| listContinents | GET https://api.flyawaygolf.com/v2/public/golfs/continents | List continents with course counts |
| listCountries | GET https://api.flyawaygolf.com/v2/public/golfs/countries | List countries with course counts |
| getDirectoryEntry | GET https://api.flyawaygolf.com/v2/public/golfs/{slug} | Get a continent or a country by slug |
| listCountryRegions | GET https://api.flyawaygolf.com/v2/public/golfs/{country}/regions | List the regions of a country |
| listRegionGolfCourses | GET https://api.flyawaygolf.com/v2/public/golfs/{country}/{region} | List the golf courses of a region |
| listCityGolfCourses | GET https://api.flyawaygolf.com/v2/public/golfs/{country}/{region}/{city} | List the golf courses of a city |
| Rankings | ||
| listBestGolfCoursesWorldwide | GET https://api.flyawaygolf.com/v2/public/best/world | List the highest-rated courses worldwide |
| listBestGolfCoursesByArea | GET https://api.flyawaygolf.com/v2/public/best/{slug} | List the highest-rated courses of a continent or country |
| listBestGolfCoursesByRegion | GET https://api.flyawaygolf.com/v2/public/best/{country}/{region} | List the highest-rated courses of a region |
| Metadata | ||
| getCountryMetadata | GET https://api.flyawaygolf.com/v2/seo/country/{slug} | Get breadcrumbs and counts for a country |
| getContinentMetadata | GET https://api.flyawaygolf.com/v2/seo/continent/{slug} | Get breadcrumbs and counts for a continent |
| getRegionMetadata | GET https://api.flyawaygolf.com/v2/seo/region/{country}/{region} | Get breadcrumbs and counts for a region |
| Enumeration | ||
| listSitemapContinents | GET https://api.flyawaygolf.com/v2/seo/sitemap/continents | Enumerate every continent slug |
| listSitemapCountries | GET https://api.flyawaygolf.com/v2/seo/sitemap/countries | Enumerate every country slug |
| listSitemapRegions | GET https://api.flyawaygolf.com/v2/seo/sitemap/regions | Enumerate every region slug |
| listSitemapCities | GET https://api.flyawaygolf.com/v2/seo/sitemap/cities | Enumerate every city slug |
| Agent files | ||
| getGolfCourseMarkdown | GET https://api.flyawaygolf.com/v2/golfs/{slug}/llm.md | Get a golf course as markdown |
| getLlmsTxt | GET https://api.flyawaygolf.com/v2/llms.txt | Get the llms.txt index |
| getOpenApiDocument | GET https://api.flyawaygolf.com/v2/openapi.json | Get this document |
Quatre fichiers lisibles par machine décrivent le site à un agent. Commencez par llms.txt : il indique ce que contient le jeu de données, quand FlyAway est la bonne source, et les motifs d'URL de tout le reste.
/llms.txt — What FlyAway is, what the dataset contains, when to use it, and the URL patterns for everything else. Start here./llms-full.txt — The same, at length: the product surface, the data model and the caveats in full./openapi.json — The public API as an OpenAPI 3.1 document. Also served as YAML at /openapi.yaml./golfs/{slug}/llm.md — Any course as markdown, e.g. https://flyawaygolf.com/golfs/golf-national/llm.md./sitemaps/index — The sitemap index: every indexable URL, paginated, including all 35,165 course pages.Les endpoints publics en lecture ne demandent aucune information d'authentification : envoyez la requête et lisez la réponse. Les endpoints qui touchent aux données personnelles d'un membre (parties, statistiques, messages, assistant IA) exigent un jeton de session émis par les applications FlyAway ; ils ne font pas partie de la surface publique et sont volontairement absents du document OpenAPI, puisqu'un agent ne peut pas les appeler.
Restez sous 5 requêtes par seconde depuis une même IP, et mettez en cache ce que vous lisez : les données de parcours ne changent pas d'une semaine à l'autre. FlyAway suit la convention RFC 9331 sur toute réponse portant un quota — RateLimit-Limit, RateLimit-Remaining et RateLimit-Reset, plus Retry-After sur un 429. Une réponse ne portant aucun de ces en-têtes n'a pas été décomptée d'un quota par appelant. Sur un 429, patientez le nombre de secondes indiqué par Retry-After puis réessayez une fois.
Les échecs renvoient un corps JSON contenant un objet error avec un message lisible et un code numérique stable. Un 400 signifie que l'identifiant ou un paramètre a été rejeté ; un 404 qu'aucune ressource ne correspond.
Le document OpenAPI est écrit pour être chargé directement comme manifeste de function calling : chaque opération porte un operationId unique, une description écrite pour un modèle et non pour un moteur de recherche, des paramètres typés avec leurs bornes, et un schéma de réponse. Convertissez-le avec l'utilitaire OpenAPI-vers-outils de votre framework : aucun wrapper manuel n'est nécessaire.
Il n'existe pas encore de CLI officielle ni de serveur MCP. En attendant, le document OpenAPI est le chemin d'intégration pris en charge, et les pages de parcours en markdown sont la façon prise en charge de lire un parcours sous forme de texte.
Les questions techniques que la documentation ne couvre pas sont bienvenues par e-mail. Merci d'indiquer l'URL exacte appelée et la réponse obtenue.
[email protected]