A public, read-only API for overland trip planning. Plan a route, scan it for wildfire, air quality and weather, and search campsites. Every response carries an evidence envelope — where each fact came from, when it was observed, and how fresh it is.
https://www.mytrailsync.com/api/v1/routesplan_routePlan a driving route between two points, with optional vias.
originrequired— Place name ("Bishop, CA") or [lng, lat].destinationrequired— Place name or [lng, lat].vias— Up to 10 intermediate points.dates— { start, end } (YYYY-MM-DD).rig— Accepted; does not yet alter routing.curl -X POST https://www.mytrailsync.com/api/v1/routes \
-H "Content-Type: application/json" \
-d '{"origin":"Bishop, CA","destination":"Lee Vining, CA"}'{
"request_id": "req_...",
"generated_at": "2026-09-21T18:00:00Z",
"expires_at": null,
"data": {
"distance_mi": 57.4,
"duration_min": 71,
"geometry": { "type": "LineString", "coordinates": [ ... ] }
},
"sources": [{ "name": "Mapbox Directions" }],
"warnings": [],
"next_actions": ["scan_route_risks", "search_campsites"]
}/risk-scanscan_route_risksScan a route corridor for wildfire, air quality, and weather. A missing reading is reported as unknown, never as safe.
route / route_id / from + torequired— Supply one: a [lng,lat][] line, a route_id from plan_route, or from + to place names.corridor_mi— Scan width, 5 to 100 (default 30).departure_window— { start, end } (ISO date-time).curl -X POST https://www.mytrailsync.com/api/v1/risk-scan \
-H "Content-Type: application/json" \
-d '{"from":"Bishop, CA","to":"Lee Vining, CA"}'{
"request_id": "req_...",
"generated_at": "2026-09-21T18:00:00Z",
"data": {
"wildfire": { "status": "active", "nearest_mi": 33, "name": "DOME" },
"air": { "status": "moderate", "aqi": 74, "source": "Open-Meteo (incl. smoke)" },
"weather": { "temp_f": 61, "conditions": "clear" }
},
"sources": [ ... ],
"warnings": [],
"next_actions": []
}/campsitessearch_campsitesSearch campsites near a point or along a planned route. Each result is tagged with source, confirmation status, and confidence.
lat, lng— Point mode: search around a coordinate.from, to— Route mode: origin and destination place names.radius_km— Point mode radius, 5 to 250 (default 80).source— all | osm | community (default all).min_rig_length_ft— Filter to sites that fit a rig of this length.limit— 1 to 200 (default 100).curl "https://www.mytrailsync.com/api/v1/campsites?lat=37.94&lng=-119.03&radius_km=30&min_rig_length_ft=38"{
"request_id": "req_...",
"generated_at": "2026-09-21T18:00:00Z",
"data": {
"campsites": [
{
"name": "Oh Ridge Campground",
"coordinates": [-119.061, 37.794],
"source": "osm",
"confirmation": "osm_mapped",
"confidence": "medium"
}
]
},
"sources": [{ "name": "OpenStreetMap" }, { "name": "TrailSync community" }],
"warnings": [],
"next_actions": []
}Every successful response is wrapped in the same shape, so an agent can cite and age-check any fact it uses:
request_id — trace id for support.generated_at — when the response was built.expires_at — when volatile results go stale; null if stable.data — the endpoint payload.sources — name, url, and observed_at for each fact.warnings — degraded sources or partial results.next_actions — suggested follow-up calls.| Code | HTTP | Meaning |
|---|---|---|
| VALIDATION_ERROR | 400 | A required field is missing or malformed. |
| SOURCE_UNAVAILABLE | 503 | An upstream data source could not be read. |
| RATE_LIMITED | 429 | Over 30 requests/minute from one IP. |
| NOT_FOUND | 404 | A route_id was not in the cache. |
| METHOD_NOT_ALLOWED | 405 | Wrong HTTP method for the endpoint. |
| UPSTREAM_ERROR | 502 | A provider returned an unexpected error. |
A missing risk reading is always reported as unknown, never as safe. Treat every campsite as a starting point and verify current conditions, fees and legality with the land manager before you go.
This is the public read-only surface. Account-linked features — rig telemetry, saving a trip, and Pro checkout — arrive in later releases behind OAuth. Questions: rr@roamresilient.com.