<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>TrailSplits API changelog</title>
  <id>https://trailsplits.com/api/changelog</id>
  <link href="https://trailsplits.com/api/changelog"/>
  <link rel="self" href="https://trailsplits.com/api/changelog.xml"/>
  <updated>2026-10-02T12:00:00Z</updated>
  <author><name>TrailSplits</name></author>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-pace-plan</id>
    <title>Pace plans for a course</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-pace-plan"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/pace-plan gives splits every kilometre or mile for one GPX or GeoJSON line, from a target time or a pace on the flat, slower where the course climbs or descends steeply. Each split ends on its mark and names its terrain. 2 credits. POST /v1/route now allows legs up to 60 km and counts waypoints and legs from 0.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-route-v1</id>
    <title>Route through waypoints in the /v1 style</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-route-v1"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/route takes 2 to 100 [lon, lat] waypoints and flat settings and answers with a GeoJSON line, its legs, climb, hike time, surfaces, SAC grades, hazards and turn-by-turn steps; errors as { error: { code, message } }. Same router and credits as POST /route/v1, which stays.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-browser-keys</id>
    <title>Browser keys, and a daily ceiling for area lookups</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-browser-keys"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">The console can issue browser keys (ts_pub_…) that work only from the web origins you list, at 2 requests a second per visitor; elsewhere they get 403 origin_not_allowed. Area lookups (outdoor places and trails in a box) now have a daily ceiling per project of three times the plan's daily average credits (3,000 on Free), then 429 bbox_daily_ceiling.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-gpx</id>
    <title>GPX clean and simplify</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-gpx"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/gpx/clean removes repeated and broken points (and, if asked, times and sensor data) and returns the file as the file: everything else stays byte for byte. POST /v1/gpx/simplify keeps the shape within a tolerance in metres or a point budget, protects the climb and keeps stops. 1 credit each; files up to 5 MB.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-elevation-profile</id>
    <title>Elevation profile of a line</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-elevation-profile"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/elevation-profile returns the series a chart draws (distance, height, grade and position at each point) with ascent, descent, extremes and steepest stretches read from the same series. 2 credits.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-concurrency</id>
    <title>Heavy requests: a limit on how many run at once</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-concurrency"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="changed"/>
    <content type="text">Round trips, route analysis and route weather now also have a per-project concurrency limit: 1 on Free and without a key (per address), 2 on Starter, 4 on Pro, 8 on Business. A request over it gets 429 concurrency_limit with Retry-After: 2. The per-second rates are unchanged.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-reference</id>
    <title>A reference page for every operation, with Try it on a map</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-reference"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">Sixteen operations now have their own page with curl, JavaScript and Python examples, parameters, response fields, errors and the full contract, and a Try it panel that sends the request and draws the answer on a map. The OpenAPI file covers all of them, now including search, reverse search, trails, outdoor places, static maps, map matching and snow.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-search-fuzzy</id>
    <title>Search finds misspellings</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-search-fuzzy"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="changed"/>
    <content type="text">When nothing matches exactly, place search now finds near misses and German ue/oe/ae spellings of umlauts ("Matterhon", "Mittagguepfi"). Such results carry "match": "fuzzy". Exact matches are unchanged.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-free-plan</id>
    <title>Free plan with commercial use, keys and usage</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-free-plan"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">Free keys from the API console: 30,000 credits a month, commercial use with attribution. Calls without a key keep working with 500 credits a day per address. Keyed answers carry X-TrailSplits-Credits-Remaining, and GET /v1/usage returns your usage per operation.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-route-weather</id>
    <title>Weather along a route at arrival time</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-route-weather"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/route-weather gives the forecast at the hour you reach each part of a line, each place at its own height, with the model named per hour.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-hazards</id>
    <title>Hazards on the line</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-hazards"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">Route analysis and round trips list hazards[]: each ford, aided passage and via ferrata, placed in metres along the line.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-weather-hourly</id>
    <title>Hourly weather values</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-weather-hourly"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">h=1 on the weather forecast adds hourly temperature, precipitation, rain probability, wind, gusts, wind direction and weather code per point, each hour with its model.</content>
  </entry>
  <entry>
    <id>https://trailsplits.com/api/changelog#2026-10-02-analysis-roundtrips</id>
    <title>Route analysis and round trips</title>
    <link href="https://trailsplits.com/api/changelog#2026-10-02-analysis-roundtrips"/>
    <updated>2026-10-02T12:00:00Z</updated>
    <category term="added"/>
    <content type="text">POST /v1/route-analysis analyses a GPX or GeoJSON line you already have (matched path, surfaces, tagged grades, climb, hike time, unknowns). POST /v1/roundtrips returns loops from a start point from the same engine as the TrailSplits Planner, with an honest refusal when no good loop exists.</content>
  </entry>
</feed>
