{
  "info": {
    "name": "TrailSplits API",
    "description": "Every documented operation with a working example (registry 1.7.0). Without a key the calls use the keyless daily allowance; to use your project's credits, set the apiKey variable and enable each request's Authorization header. Reference: https://trailsplits.com/api/reference",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Tile gateway health",
      "request": {
        "method": "GET",
        "description": "Public edge observation: text ok, not JSON. Origin paths/handlers can differ; health does not establish dataset freshness.\n\nhttps://trailsplits.com/api/reference/health",
        "header": [],
        "url": {
          "raw": "https://api.trailsplits.com/healthz",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "healthz"
          ],
          "query": []
        }
      }
    },
    {
      "name": "Published artifact identities",
      "request": {
        "method": "GET",
        "description": "Resolve each artifact independently. Only the three demo-required artifact shapes are specified here; additional artifacts/metadata are retained. Missing required artifacts prevent this integration. Null/absent source dates stay unknown; retained URLs may retire.\n\nhttps://trailsplits.com/api/reference/manifest",
        "header": [],
        "url": {
          "raw": "https://api.trailsplits.com/pmtiles/current/manifest.json",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "pmtiles",
            "current",
            "manifest.json"
          ],
          "query": []
        }
      }
    },
    {
      "name": "Artifact status verdict",
      "request": {
        "method": "GET",
        "description": "artifact-status/1 producer verdict. Source-bound fresh can have a null source date; available=false is an unavailable manifest, not proof of freshness. Unknown is distinct from stale.\n\nhttps://trailsplits.com/api/reference/status",
        "header": [],
        "url": {
          "raw": "https://api.trailsplits.com/tiles/v1/status",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "tiles",
            "v1",
            "status"
          ],
          "query": []
        }
      }
    },
    {
      "name": "Terrain pixel sampling",
      "request": {
        "method": "GET",
        "description": "Pipe-separated lat,lon. Producer accepts up to 2048 points, clamps requested zoom to available backing data and returns one modelled metre height per point. null is missing, never zero. Does not densify or smooth a line. Example consumers impose smaller bounds. Unknown accuracy/source resolution is not surveyed truth.\n\nhttps://trailsplits.com/api/reference/elevation",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/tiles/v1/elevation/current/sample?points=46.5369000%2C12.1352000%7C46.5367714%2C12.1348857%7C46.5366429%2C12.1345714%7C46.5365143%2C12.1342571%7C46.5363857%2C12.1339429%7C46.5362571%2C12.1336286%7C46.5361286%2C12.1333143%7C46.5360000%2C12.1330000&z=12&encoding=mapbox",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "tiles",
            "v1",
            "elevation",
            "current",
            "sample"
          ],
          "query": [
            {
              "key": "points",
              "value": "46.5369000,12.1352000|46.5367714,12.1348857|46.5366429,12.1345714|46.5365143,12.1342571|46.5363857,12.1339429|46.5362571,12.1336286|46.5361286,12.1333143|46.5360000,12.1330000"
            },
            {
              "key": "z",
              "value": "12"
            },
            {
              "key": "encoding",
              "value": "mapbox"
            }
          ]
        }
      }
    },
    {
      "name": "Point and batch weather forecast",
      "request": {
        "method": "GET",
        "description": "Served from the main site, not the API host. Daily values per point and local date; each day names its model and issued_at is the model run (null with a reason when unknown, never the fetch time). Missing values are null, never 0; fewer days or fields than asked is state partial with reasons. Pass each point height: a model cell height can be a thousand metres off in the mountains. Attribution from provider.attribution (Open-Meteo, CC BY 4.0) is required wherever values are shown.\n\nhttps://trailsplits.com/api/reference/weather",
        "header": [],
        "url": {
          "raw": "https://trailsplits.com/api/weather/forecast?p=46.0207,7.7491,1608&d=2",
          "protocol": "https",
          "host": [
            "trailsplits",
            "com"
          ],
          "path": [
            "api",
            "weather",
            "forecast"
          ],
          "query": [
            {
              "key": "p",
              "value": "46.0207,7.7491,1608"
            },
            {
              "key": "d",
              "value": "2"
            }
          ]
        }
      }
    },
    {
      "name": "Analyse a route you already have",
      "request": {
        "method": "POST",
        "description": "Send a GPX or GeoJSON line (at most 1 MB, 5,000 points, 300 km). The answer places it on the mapped network and says on what surface it runs, which OpenStreetMap grades are tagged, how much it climbs (method named), how long a hike takes with the model scope, and every unknown. The line you send is never rewritten, and nothing is drawn across a gap. Untagged paths are unknown, never easy. No geometry is kept after the answer.\n\nhttps://trailsplits.com/api/reference/route-analysis",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/route-analysis",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "route-analysis"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"geometry\": {\n    \"type\": \"LineString\",\n    \"coordinates\": [\n      [\n        12.1352,\n        46.5369\n      ],\n      [\n        12.133,\n        46.536\n      ]\n    ]\n  },\n  \"profile\": \"hike\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Round trips from a start point",
      "request": {
        "method": "POST",
        "description": "Loops that start and end at a point, from the same engine as the TrailSplits Planner. Each loop reports its target error, the distance walked twice and the same facts as route analysis. Status complete means within 10 % of the target with at most 20 % repeated; rough is answered with a reason; when no good loop exists the answer is 422 no_loop, never an invented loop. Limits: 0.5–40 km on foot, 0.5–60 km by bike (422 too_long), up to 3 alternatives.\n\nhttps://trailsplits.com/api/reference/roundtrips",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/roundtrips",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "roundtrips"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"start\": [\n    7.7491,\n    46.0207\n  ],\n  \"distance_km\": 12,\n  \"profile\": \"hike\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Weather along a route at arrival time",
      "request": {
        "method": "POST",
        "description": "Send one line, a departure with its offset and a pace. Samples every 2 km plus the start, end and marked highs and lows each get the forecast at the hour you reach them, at their own terrain height, with the model named per hour. Missing stays missing (weather null with a reason). Sections give ranges, never a combined safety score. Hike uses the calibrated trailsplits-hike/2 time; run and bike need your own pace. Limits: one part, 5,000 points, 120 km, 1 MB; departure from six hours ago to 16 days ahead.\n\nhttps://trailsplits.com/api/reference/route-weather",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/route-weather",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "route-weather"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"geometry\": {\n    \"type\": \"LineString\",\n    \"coordinates\": [\n      [\n        12.1352,\n        46.5369\n      ],\n      [\n        12.133,\n        46.536\n      ]\n    ]\n  },\n  \"departure\": \"2026-10-03T08:00:00+02:00\",\n  \"profile\": \"hike\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Elevation profile of a line",
      "request": {
        "method": "POST",
        "description": "The series a chart draws for a GPX or GeoJSON line: distance, height, grade and position at each point, as rows under named columns, with ascent, descent, extremes and the steepest stretches read from the same series (method named). Terrain heights by default, or the file's own heights when they pass the check. Each part of a file is its own run; nothing is drawn across a gap. Limits: 5,000 points, 300 km, 1 MB.\n\nhttps://trailsplits.com/api/reference/elevation-profile",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/elevation-profile",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "elevation-profile"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"geometry\": {\n    \"type\": \"LineString\",\n    \"coordinates\": [\n      [\n        12.1352,\n        46.5369\n      ],\n      [\n        12.133,\n        46.536\n      ]\n    ]\n  },\n  \"points\": 50\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Route through waypoints",
      "request": {
        "method": "POST",
        "description": "A walking, running or cycling route through 2 to 100 waypoints, on signed trails by default. Returns the route as a GeoJSON line with its legs and the same facts as round trips and route analysis: climb, the hike time with its scope, surfaces, ways, SAC grades, fords and aided passages, turn-by-turn steps and every unknown. The same router as the Valhalla-compatible POST /route/v1, in the /v1 style: [lon, lat] waypoints, flat snake_case settings, errors as { error: { code, message } }. Credits as /route/v1: 1, plus 1 per further 10 waypoints.\n\nhttps://trailsplits.com/api/reference/waypoint-route",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/route",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "route"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"waypoints\": [\n    [\n      7.7475,\n      46.0207\n    ],\n    [\n      7.7174,\n      46.0091\n    ],\n    [\n      7.7355,\n      46.0036\n    ]\n  ]\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Pace plan for a course",
      "request": {
        "method": "POST",
        "description": "Splits every kilometre or mile for one course, from a target time or your pace on the flat: slower where it climbs or descends steeply (effort km = distance km + climb m / 100 + descent m / 300). Each split ends on its mark and names its terrain (steady climb, technical descent, …). Uses the file’s own heights, or the terrain model’s. The engine of the Pace & Split Calculator. A pacing rule, not a physiological model. 2 credits.\n\nhttps://trailsplits.com/api/reference/pace-plan",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/pace-plan",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "pace-plan"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"geometry\": {\n    \"type\": \"LineString\",\n    \"coordinates\": [\n      [\n        7.7475,\n        46.0207\n      ],\n      [\n        7.74,\n        46.018\n      ],\n      [\n        7.73,\n        46.014\n      ],\n      [\n        7.7174,\n        46.0091\n      ]\n    ]\n  },\n  \"target_time\": \"0:20:00\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Clean a GPX file",
      "request": {
        "method": "POST",
        "description": "Removes repeated points and points with broken coordinates, and optionally every time stamp and sensor extension (heart rate, cadence, power). The file comes back as the file: only what was removed is cut; names, comments, CDATA, waypoints and indentation stay byte for byte. A report says what changed. Body at most 5 MB, 50,000 points.\n\nhttps://trailsplits.com/api/reference/gpx-clean",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/gpx/clean",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "gpx",
            "clean"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"gpx\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><gpx version=\\\"1.1\\\" creator=\\\"example\\\" xmlns=\\\"http://www.topografix.com/GPX/1/1\\\"><trk><name>Example</name><trkseg><trkpt lat=\\\"46.5369\\\" lon=\\\"12.1352\\\"><ele>1183</ele></trkpt><trkpt lat=\\\"46.5369\\\" lon=\\\"12.1352\\\"><ele>1183</ele></trkpt><trkpt lat=\\\"46.5365\\\" lon=\\\"12.1341\\\"><ele>1190</ele></trkpt><trkpt lat=\\\"46.5360\\\" lon=\\\"12.1330\\\"><ele>1195</ele></trkpt></trkseg></trk></gpx>\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Simplify a GPX file or line",
      "request": {
        "method": "POST",
        "description": "Fewer points with the shape kept within a tolerance in ground metres (or a point budget), the climb protected and stops (waypoints, pauses of 10 minutes or more) kept in place. Reports the largest deviation and the distance and climb before and after. Answers equal the TrailSplits GPX Simplifier. Body at most 5 MB, 50,000 points.\n\nhttps://trailsplits.com/api/reference/gpx-simplify",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/v1/gpx/simplify",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "v1",
            "gpx",
            "simplify"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"geometry\": {\n    \"type\": \"LineString\",\n    \"coordinates\": [\n      [\n        12.1352,\n        46.5369\n      ],\n      [\n        12.13509,\n        46.536875\n      ],\n      [\n        12.13498,\n        46.53681\n      ],\n      [\n        12.13487,\n        46.536785\n      ],\n      [\n        12.13476,\n        46.53672\n      ],\n      [\n        12.13465,\n        46.536695\n      ],\n      [\n        12.13454,\n        46.53663\n      ],\n      [\n        12.13443,\n        46.536605\n      ],\n      [\n        12.13432,\n        46.53654\n      ],\n      [\n        12.13421,\n        46.536515\n      ],\n      [\n        12.1341,\n        46.53645\n      ],\n      [\n        12.13399,\n        46.536425\n      ],\n      [\n        12.13388,\n        46.53636\n      ],\n      [\n        12.13377,\n        46.536335\n      ],\n      [\n        12.13366,\n        46.53627\n      ],\n      [\n        12.13355,\n        46.536245\n      ],\n      [\n        12.13344,\n        46.53618\n      ],\n      [\n        12.13333,\n        46.536155\n      ],\n      [\n        12.13322,\n        46.53609\n      ],\n      [\n        12.13311,\n        46.536065\n      ],\n      [\n        12.133,\n        46.536\n      ]\n    ]\n  },\n  \"tolerance_m\": 10\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Place search",
      "request": {
        "method": "GET",
        "description": "Places and signed trails by name: towns, peaks, passes, lakes, huts, stations and more. A bias_bbox lifts places in the map view without excluding others. Misspellings and German ue/oe/ae spellings are found when nothing matches exactly (match: fuzzy). Coordinates are [lon, lat]. Not an address geocoder.\n\nhttps://trailsplits.com/api/reference/search",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/search/v1/forward?q=Matterhorn&limit=3&bias_bbox=7.5,45.9,7.9,46.1",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "search",
            "v1",
            "forward"
          ],
          "query": [
            {
              "key": "q",
              "value": "Matterhorn"
            },
            {
              "key": "limit",
              "value": "3"
            },
            {
              "key": "bias_bbox",
              "value": "7.5,45.9,7.9,46.1"
            }
          ]
        }
      }
    },
    {
      "name": "Places near a point",
      "request": {
        "method": "GET",
        "description": "The nearest named places to a point, nearest first, with their distance in metres. Narrow to kinds (for example peak,hut,village) and widen the radius up to 50 km.\n\nhttps://trailsplits.com/api/reference/reverse",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/search/v1/reverse?lat=46.0207&lon=7.7491&limit=3",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "search",
            "v1",
            "reverse"
          ],
          "query": [
            {
              "key": "lat",
              "value": "46.0207"
            },
            {
              "key": "lon",
              "value": "7.7491"
            },
            {
              "key": "limit",
              "value": "3"
            }
          ]
        }
      }
    },
    {
      "name": "Trail search",
      "request": {
        "method": "GET",
        "description": "Signed hiking and cycling routes (OpenStreetMap route relations) by name or reference, with network level, length and bounding box; the geometry is a representative point. Fetch a relation's full line with GET /trails/v1/relation/{osm_id}, or relations in an area with /trails/v1/bbox.\n\nhttps://trailsplits.com/api/reference/trails",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/trails/v1/search?q=Haute+Route&limit=3",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "trails",
            "v1",
            "search"
          ],
          "query": [
            {
              "key": "q",
              "value": "Haute Route"
            },
            {
              "key": "limit",
              "value": "3"
            }
          ]
        }
      }
    },
    {
      "name": "Outdoor places in an area",
      "request": {
        "method": "GET",
        "description": "Huts, shelters, water, viewpoints, passes, parking and transport stops in a small box, as flat records (lat, lon, ele and OSM tags), not GeoJSON Features. Each side of the box may be at most 2°. artifact_version names the weekly release used.\n\nhttps://trailsplits.com/api/reference/pois",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/pois/v1/bbox?min_lat=46&min_lon=7.7&max_lat=46.05&max_lon=7.8&kind=hut&limit=5",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "pois",
            "v1",
            "bbox"
          ],
          "query": [
            {
              "key": "min_lat",
              "value": "46"
            },
            {
              "key": "min_lon",
              "value": "7.7"
            },
            {
              "key": "max_lat",
              "value": "46.05"
            },
            {
              "key": "max_lon",
              "value": "7.8"
            },
            {
              "key": "kind",
              "value": "hut"
            },
            {
              "key": "limit",
              "value": "5"
            }
          ]
        }
      }
    },
    {
      "name": "Static map image",
      "request": {
        "method": "POST",
        "description": "A PNG of the outdoor map for a box, with an optional GeoJSON line or features drawn on it: for cards, emails and print. Attribution is drawn into the image; keep it visible.\n\nhttps://trailsplits.com/api/reference/static-map",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/static-map/render",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "static-map",
            "render"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"bbox\": [\n    12.13,\n    46.535,\n    12.137,\n    46.538\n  ],\n  \"width\": 320,\n  \"height\": 200\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Map matching and trace attributes",
      "request": {
        "method": "POST",
        "description": "Matches a line to the mapped network and returns each way it follows with surface (and whether the surface is mapped or a class default), use and SAC grade, plus the matched line per segment, unmatched stretches with reasons, and three lengths. Valhalla-compatible input; up to 2,000 points. Edge lengths are kilometres. For a full analysis with climb, time and unknowns use route analysis.\n\nhttps://trailsplits.com/api/reference/trace-attributes",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/valhalla/trace_attributes",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "valhalla",
            "trace_attributes"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"shape\": [\n    {\n      \"lat\": 46.5369,\n      \"lon\": 12.1352\n    },\n    {\n      \"lat\": 46.536,\n      \"lon\": 12.133\n    }\n  ],\n  \"costing\": \"pedestrian\",\n  \"shape_match\": \"map_snap\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Snow along a route",
      "request": {
        "method": "GET",
        "description": "Observed and recent snow cover at up to 512 sampled points, with 24 h and 48 h forecasts kept apart. With evidence=1 the answer carries route-snow-evidence/1: per-point class (snow, clear, unknown) and source, coverage, and a short validity. Unknown is never clear; narrow crossings between samples are not assessed. Points are lat,lon.\n\nhttps://trailsplits.com/api/reference/snow",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/tiles/v1/snow/route-forecast?points=46.0207,7.7491%7C46,7.7&evidence=1&revision=example1",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "tiles",
            "v1",
            "snow",
            "route-forecast"
          ],
          "query": [
            {
              "key": "points",
              "value": "46.0207,7.7491|46,7.7"
            },
            {
              "key": "evidence",
              "value": "1"
            },
            {
              "key": "revision",
              "value": "example1"
            }
          ]
        }
      }
    },
    {
      "name": "Outdoor point-to-point route",
      "request": {
        "method": "POST",
        "description": "Verified POST integration subset of Valhalla-compatible input; returns OSRM-shaped output with polyline6, metres and estimated seconds. Walking explicitly sets T3; running uses trailsplits.profile=run, cycling uses bicycle/hybrid. Unsupported car costing returns 400. No failure should become a straight-line route. Engine/settings and tile release are returned provenance, not immutable route replay. The Planner has a different site body/defaults; read /api/route/capabilities on trailsplits.com.\n\nhttps://trailsplits.com/api/reference/route",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{apiKey}}",
            "disabled": true,
            "description": "Enable with your key in apiKey; disabled, the call uses the keyless allowance"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "https://api.trailsplits.com/route/v1",
          "protocol": "https",
          "host": [
            "api",
            "trailsplits",
            "com"
          ],
          "path": [
            "route",
            "v1"
          ],
          "query": []
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"locations\": [\n    {\n      \"lat\": 46.5369,\n      \"lon\": 12.1352\n    },\n    {\n      \"lat\": 46.536,\n      \"lon\": 12.133\n    }\n  ],\n  \"costing\": \"pedestrian\",\n  \"costing_options\": {\n    \"pedestrian\": {\n      \"max_hiking_difficulty\": 3\n    }\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    }
  ]
}