Skip to main content

Data products

Alongside the tools, FastGIS publishes curated datasets you can search, filter and take offline. Each one declares its licence and attribution through the API, because several are share-alike and what you may do with the output depends on which source a feature came from.

Licence buckets​

Every dataset endpoint has a sources companion — GET /mtb/sources, GET /friluft/sources — returning per-source licence metadata rather than a single blanket statement:

FieldWhat it tells you
bucketA_verified for authoritative open data, C_share_alike for sources whose licence propagates
license, license_sourceThe licence and where to read it
attributionThe string you must display
share_alikeWhether reusing this feature obliges you to share alike
feature_countHow many features that source contributes

Check the bucket before redistributing anything you derive.

MTB trails​

A European mountain-bike catalogue built from OpenStreetMap cycling and MTB data — 1,266,642 features across 30-plus countries, ODbL 1.0, attributed to OpenStreetMap contributors.

Browse the catalogueGET /mtb/catalog
Query features in viewGET /mtb/features
One trailGET /mtb/trail/{trail_id}
One route relationGET /mtb/route/{rel_id}
Licence and coverageGET /mtb/sources

These endpoints are readable without an API key.

Friluftsliv​

Norwegian outdoor-recreation points — 43,048 features from four sources with genuinely different terms:

SourceBucketLicenceFeatures
Friluftslivsområder, kartlagte og verdsatteA_verifiedNLOD 2.08,097
Statlig sikra friluftslivsområderA_verifiedNLOD 2.0391
TurrutebasenA_verifiedOpen data, no named licence21,102
OpenStreetMap friluftC_share_alikeODbL 1.013,458

GET /friluft/features queries them; GET /friluft/sources returns the table above with bounding boxes and endpoints. Note the third row: open, but without a named licence, which is not the same as public domain.

Beaches​

Beach discovery with rider-contributed verdicts.

Beaches in a regionGET /grass/beaches/review/{region}
Default regionGET /grass/beaches/review
Read verdictsGET /grass/beaches/review/verdicts
Add a verdictPOST /grass/beaches/review/verdicts
ExportGET /grass/beaches/review/export

The export is scoped to the caller: admins receive the full attributed report, everyone else only their own verdicts (community totals per beach come from the verdicts endpoint). The region assumed when a request omits one is set by BEACH_REVIEW_DEFAULT_REGION.

Curvy roads​

Roads scored for how interesting they are to ride, by one of three algorithms — accumulated turning, turning per kilometre, or corner tightness. The rider app exposes this as Find Curvy Roads; see the rider app guide.

The scores cover 44 regions: the 36 European ones and, since 10 October 2026, Morocco, Tunisia, Egypt, Mauritania, Senegal and the Gambia, Algeria, Libya and the Gulf states. That is about 1.07 million road sections, computed from OpenStreetMap. The curvature map layer and the offline tiles cover the same regions.

Search near a pointGET /grass/curvature/nearby
Score a drawn areaPOST /grass/curvature/analyze
Score against the prebuilt databasePOST /grass/curvature/analyze-precomputed
Road classes availableGET /grass/curvature/road-classes
Database freshnessGET /grass/curvature/db-status

Practice grounds​

Places to practise riding: motocross tracks, trial and enduro areas, supermoto and speedway tracks, karting and other motor-sport circuits, built from OpenStreetMap (ODbL 1.0) for every region the POI import covers and refreshed monthly. A ground is either a mapped outline (a sports centre, a track, a pitch) or, where only the racing lines are mapped, one ground per cluster of lines within 1 km of each other.

Each ground says what OpenStreetMap knows about it: its kinds, size, surface, fee, opening hours, website, operator, and how you may use it:

legalityMeaning
openOpen to the public
membersMembers or customers only
in_doubtAccess not stated in OpenStreetMap: check before you go

A ground that OpenStreetMap marks private, or that lies inside a military zone, is never published: not on the map, not in search, not in the catalogue, not in the offline packs. A ground inside a protected area (a national or regional park, a nature reserve, a Natura 2000 site) stays published and says so: protected lists the classes it lies in.

Search near a pointGET /grass/routing/nearby?category=practice_ground (alias practice, up to 250 km)
One ground, with the upcoming public events held within 500 mGET /grass/routing/practice-grounds/{osm_id}

Holding an event at a ground. An organiser saves the ground to their library and adds it as their event's Start stop (POST /events/{id}/stops with kind: "start"; the Briefing stop counts while there is no Start stop). The server then places the event there itself — an event's meeting place is always derived from that stop, never typed in — and the ground's answer above lists the event once it is published and listed. Remove the stop and the event leaves the ground again. The event's own answer carries start_place and start_stop, so a client can say Meets at Eboli crossodromo.

The grounds also travel in each region's offline POI pack. Riders meet them as the Practice grounds seeker and map layer on the phone (card, legality line, website, events, Route to it, Add stop, Save; offline from the region's pack) and as the Practice grounds tool, layer and card on the desktop.

Grounds riders add. A rider can report a ground the dataset lacks (a rider signal of kind practice_ground). It is private until the rider shares it, and other riders see it only once two riders have reported it independently, never inside a private area or a military zone, and never beside a ground the dataset already has. The grounds search returns these as rider_grounds beside the dataset's grounds, labelled "reported by riders, not confirmed". They are not in the offline packs or the catalogue.

Dirt passages​

Every unpaved passage FastGIS knows, from OpenStreetMap, as a dataset you can download and query: the line of each passage and the facts the builder measured along it (length, unpaved share, surface and track grades, access for a motorcycle and for a car, gates, grades and climb), the joins to the road network, the groups the rider's gap ladder makes, and the baked vertical profile of every passage a plan may ride. Signed-in riders only, under the Open Database License (ODbL) 1.0.

Each region is one GeoPackage, rebuilt after the region's monthly build, and one Europe-wide file holds every published region (North Africa and Arabia included). Each file has eight layers:

LayerWhat it holds
passagesOne line per passage, its facts, region and osm_base
paved_joinsThe tarmac a passage's joins ride, one line per road edge
gap_joinsEach hop from a dead end to the network (at most 250 m): its length, height step, steepest grade, water or wetland crossed, and the shorter alternative junction (alt_*)
gap_groupsPassages the gap ladder (25–250 m) joins into one ride, in riding order
paved_viewsPassages joined over tarmac up to 2, 5 or 10 km
barriersThe barrier nodes on the published passages
profilesThe vertical profile of each passage a plan may ride: elevation (m) and road grade (%) every 25 m along the line a client draws, as JSON arrays, with the stretches' surface (surface_runs) and the elevation model they came from (src)
region_metaThe build: OSM base, builder and schema versions, counts, grade source

What is left out, as everywhere FastGIS publishes passages: a passage with a closed or doubtful gate, or one closed to motor traffic, and with it its joins, its barriers and any group it belongs to. No rider data is in the dataset: not your lifted gaps, not tagged or confirmed join candidates.

Regions built before the gap work (schema 4) have no gap_joins, gap_groups or paved_joins rows yet, and those built before the profiles (schema 10) no profiles rows; region_meta says which schema a file has.

A profile's samples sit at 0, spacing_m, 2 × spacing_m … and the last one at the end of the last stretch in surface_runs, so the two arrays go straight onto a distance axis. The elevations come from the same ladder as the grades — the national 10 m model where it answers, Copernicus GLO-30 elsewhere — and src names the one most of a passage's samples came from. The passage card answers the same profile live at GET /dirt/passages/{key}?profile=1.

The files: sizes, sha256, licence, creditsGET /dirt/datasets
One region's GeoPackage (europe for all)GET /dirt/datasets/{region} — Range honoured, so a download can resume
The passages as OGC API FeaturesGET /ogc/collections/{collection_id}/items with collection_id = dirt-passages, and bbox, region, limit (≤ 1000), offset
One passageGET /ogc/collections/{collection_id}/items/{feature_id}, the id <region>:<passage_key>

The collection reads the same files, so it answers exactly what the download holds. In QGIS, add https://api.fastgis.eu/ogc as an OGC API Features connection with your API key as the X-API-Key header, or open the downloaded GeoPackage directly: the licence and credits are in its metadata.

From the desktop planner you need no key at all: the Library's published catalogue has a Datasets chip, and a dataset's panel downloads the GeoPackage, opens the collection and copies the address for QGIS — see the desktop client's Library.

Credit it as: © OpenStreetMap contributors, © Copernicus DEM GLO-30 (DLR/ESA), © Kartverket, © Lantmäteriet. Grades come from the national 10 m terrain models in Norway (Kartverket) and Sweden (Lantmäteriet) and from Copernicus GLO-30 elsewhere. Because the passages derive from OpenStreetMap, ODbL's share-alike applies to a database you build from them.

Taking data offline​

Offline is tile-based. Tiles are 1°×1° SQLite files, one per cell, named after the cell's south-west corner.

What the server has builtGET /grass/tiles/catalog
Curvature tileGET /grass/tiles/curvature/{tile_id}?algorithm=total|bearing|radius
POI tileGET /grass/tiles/poi/{tile_id}
MTB tileGET /grass/tiles/mtb/{tile_id}

Routing goes offline separately, as regional packs: GET /grass/offline/catalog lists them and GET /grass/offline/manifest describes what a client should download. The rider app wraps all of this — see Offline data.

Imagery​

GET /tiles/ortho/{z}/{x}/{y} serves orthophoto and satellite basemap tiles. Coverage is per-country and configured server-side; a cell with no coverage answers 404, which is the client's signal to fall back to another basemap.

Everything else​

The API reference lists these datasets in full, with parameters and response shapes, under the mtb, friluft, beaches, curvature, dirt, tiles, offline and ortho tags of the API reference.

The sources endpoints above need no key and no subscription — licence terms should never sit behind a paywall.

These endpoints cover the datasets we publish. For everything FastGIS consumes — the OpenStreetMap extracts behind routing and the basemap, the elevation models behind every profile, the national traffic feeds, and who has to be credited for each — see Data sources and credits, which is generated from the code that does the fetching.