XContest APIxcontest.org ↗
Access XContest.org flight scores, pilot rankings, and contest data via API. Covers UK daily PG/HG leaderboards, pilot profiles, and world scores.
What is the XContest API?
The XContest.org API exposes 9 endpoints covering UK and global paragliding and hang-gliding competition data, including daily scored flights, pilot season rankings, detailed flight statistics, and a full list of national and regional contests worldwide. The get_uk_pilot_detail endpoint, for example, returns season rankings across all categories, personal route records, glider info, and club membership for any pilot by numeric ID.
curl -X GET 'https://api.parse.bot/scraper/6c570215-015c-4675-882e-68d090b75dc7/get_uk_daily_score_pg?date=last&limit=10&start=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace xcontest-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: XContest SDK — paragliding/hang-gliding competition data."""
from parse_apis.xcontest_api import XContest, RankingCategory, ResourceNotFound
xcontest = XContest()
# Get UK PG rankings in the open category — limit caps total items fetched.
for ranking in xcontest.rankings.list(category=RankingCategory.OPEN, limit=5):
print(ranking.rank, ranking.points, ranking.pilot.name, ranking.pilot.country_iso)
# Get today's UK paragliding flights and drill into the first one's details.
flight_summary = xcontest.flights.list_uk_pg(date="last", limit=1).first()
if flight_summary:
detail = flight_summary.details()
print(detail.ident, detail.stats.duration, detail.stats.altitude_max, detail.glider.name)
# List worldwide contests
for contest in xcontest.contests.list(limit=5):
print(contest.name, contest.category, contest.is_new)
# Fetch a pilot profile by constructing from a known id
try:
pilot = xcontest.pilot(id=26412).refresh()
print(pilot.username, pilot.name, pilot.country_iso)
except ResourceNotFound as exc:
print(f"Pilot not found: {exc}")
# Get UK rules
rules = xcontest.ruleses.get()
print(rules.rules[:100])
print("exercised: rankings.list / flights.list_uk_pg / details / contests.list / pilot.refresh / ruleses.get")
Fetches UK daily paragliding flight scores for a specific date sorted by points descending. Each flight includes pilot info, glider, takeoff location, and route scoring. Use 'last' for the most recent scoring day.
| Param | Type | Description |
|---|---|---|
| date | string | Date in YYYY-MM-DD format or 'last' for the most recent scoring day. |
| limit | integer | Maximum number of flight results to return. |
| start | integer | Zero-based start index for pagination. |
{
"type": "object",
"fields": {
"list": "object containing pagination metadata (startItemIndex, numberItemsRequested, numberItemsReturned, numberItems)",
"items": "array of flight objects with id, ident, pilot, league, glider, takeoff, and route details"
},
"sample": {
"data": {
"list": {
"numberItems": 1,
"startItemIndex": 0,
"numberItemsReturned": 1,
"numberItemsRequested": 10
},
"items": [
{
"id": 6584596,
"ident": "RobGargaro/10.06.2026/08:05",
"pilot": {
"id": 81986,
"name": "Rob Gargaro",
"username": "RobGargaro",
"countryIso": "GB"
},
"glider": {
"name": "OZONE Delta 4",
"classFAI": 3,
"nameProducer": "OZONE"
},
"takeoff": {
"id": 3070,
"name": "Butser Hill",
"countryIso": "GB"
}
}
]
},
"status": "success"
}
}About the XContest API
Daily Scores and Leaderboards
The get_uk_daily_score_pg and get_uk_daily_score_hg endpoints return UK daily flight scores for paragliders and hang-gliders respectively, sorted by points descending. Each flight object includes the pilot's identity, glider details, takeoff location, and route scoring. Pass a date parameter in YYYY-MM-DD format or use 'last' to retrieve the most recent scored day. Both endpoints support limit and start parameters for pagination. The hang-glider endpoint covers FAI class 1 (flexwing) and class 5 (rigid) aircraft. get_world_daily_score_pg mirrors this structure for global paragliding scores, returning up to 100 flights from the current season.
Rankings and Pilot Profiles
get_uk_pg_ranking returns the UK paragliding season ranking for a chosen category — open, performance, sport, or standard — with each entry showing rank, cumulative points, an inScore flag indicating whether the flight counts toward the season total, and pilot identity fields including countryIso. get_uk_pilots_list lists registered UK pilots with flight count, total points, and registration date; it accepts a search string to filter by name and paginates in increments of 50. For deeper profile data, get_uk_pilot_detail takes a numeric pilot_id and returns the full profile: league ranking, flight statistics, personal records by route type, glider information, and club membership.
Flight Detail and Contest Directory
get_uk_flight_detail accepts either a numeric flight_id or a string flight_ident (formatted as username/DD.MM.YYYY/HH:MM) and returns route turnpoints, tracklog metadata, flight statistics (duration, altitudeMax, distanceTracklog), and any joint flights. get_national_contests_list returns every national, regional, club, and event competition on XContest worldwide, with each entry's name, URL, category classification, and an is_new boolean. get_uk_rules returns the full UK competition rules as plain text, including the scoring formula, category definitions, handicaps, entry instructions, and airspace compliance requirements.
The XContest API is a managed, monitored endpoint for xcontest.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when xcontest.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official xcontest.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a live UK paragliding leaderboard showing daily top scores by pilot and glider type.
- Track a specific pilot's season progression across open, performance, and sport categories using
get_uk_pg_ranking. - Display full flight details including altitude records and tracklog distance for any flight by ID or ident.
- Aggregate world daily PG scores to compare UK pilot performance against global competition.
- List all active XContest national and club contests worldwide for a competition calendar app.
- Search UK registered pilots by name and surface their total flight counts and points history.
- Parse UK rules text to extract current handicap values or scoring formula changes for a season preview tool.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does XContest.org have an official developer API?+
What does `get_uk_flight_detail` return, and how do I identify a flight to query?+
duration, altitudeMax, and distanceTracklog. You can identify flights using the numeric flight_id or the string flight_ident (format: username/DD.MM.YYYY/HH:MM), both of which appear in the daily score endpoint results. At least one of the two identifiers is required.Does the API cover hang-glider season rankings, not just paragliding?+
get_uk_pg_ranking) covers paragliding categories only. Daily HG scores are available via get_uk_daily_score_hg, but there is no equivalent season ranking endpoint for hang-gliders. You can fork this API on Parse and revise it to add an HG season ranking endpoint.How fresh are the daily score results, and what happens if I query a date with no flights?+
'last' as the date parameter returns the most recently scored day, which is the safest way to avoid querying a date where scoring has not yet run or no flights were recorded.Does the API return tracklogs or GPS track files for individual flights?+
get_uk_flight_detail returns tracklog metadata such as distanceTracklog and altitudeMax, along with route turnpoints, but not the underlying IGC or GPX file. You can fork this API on Parse and revise it to add a tracklog file download endpoint if XContest exposes those files publicly.