Get a course's hills
ourpr_get_course_terrainThe elevation profile of one course, sampled, plus every climb and descent ourpr. named on it.
THIS IS THE TOOL FOR "what are the hills and where". Each named section carries the street it runs on, the miles it spans, its net rise or fall and its average grade.
The elevation comes from the USGS 3DEP 10 m model sampled along the measured centerline, not from a watch barometer. A barometer drifts; the model is checked against published race figures.
Args:
slug (string): From ourpr_list_courses.
points (number): Elevation samples to return, 2 to 200. Default 40. The stored profile holds up to 4,873.
response_format ('markdown' | 'json'): Default 'markdown'.
Returns: { "slug": string, "name": string, "distance_mi": number, "climb_ft": number | null, "descent_ft": number | null, "min_ft": number | null, "max_ft": number | null, "steepest_pct": number | null, "climb_ft_per_mi": number | null, "elevation_source": string, "profile_points_stored": number, "profile": [{ "mi": number, "ft": number }], "named_sections": [{ "kind": "climb" | "descent", "name": string, "from_mi": number, "to_mi": number, "net_ft": number, "grade_pct": number }], "page_url": string }
The sampled profile always keeps the first point, the last point, the highest and the lowest, so its extremes agree with min_ft and max_ft.
A course with no named sections returns an empty array. That means the seeder found no stretch that qualified, not that the course is flat: read climb_ft.
Examples:
"What are the hills on Boston?" -> slug="boston-marathon"
"Is Houston flat?" -> slug="houston-marathon", read climb_ft_per_mi
"Give me the profile in detail" -> points=200
Error handling:
Returns the slug list suggestion when the slug is unknown.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The course's slug. | |
| points | No | How many elevation samples to return. The stored profile holds up to 4,873 points, which no agent should read whole. 40 describes the shape; 200 is close to the source. | |
| response_format | No | Output format. 'markdown' reads well in a chat answer. 'json' carries every field for further computation. | markdown |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | Yes | ||
| max_ft | Yes | ||
| min_ft | Yes | ||
| profile | Yes | Sampled elevation. The highest and lowest points are kept. | |
| climb_ft | Yes | ||
| page_url | Yes | ||
| descent_ft | Yes | ||
| distance_mi | Yes | ||
| steepest_pct | Yes | ||
| named_sections | Yes | ||
| climb_ft_per_mi | Yes | ||
| elevation_source | Yes | ||
| profile_points_stored | Yes |