Build custom integrations with real-time BC backcountry conditions.
The Scoutloop REST API provides real-time BC backcountry conditions — weather, avalanche, wildfire, air quality, park advisories — from 8 official government sources. Structured JSON with source attribution and timestamps.
API Endpoint
https://scoutloop-zwi9.onrender.com/v1/conditionsCreate an API key in Settings to get started.
1. Get an API key
Go to Settings and create an API key.
2. Make a request
curl -s "https://scoutloop-zwi9.onrender.com/v1/conditions?lat=49.93&lon=-122.98" \ -H "X-API-Key: sk_scout_YOUR_KEY_HERE"
Use curl -s for clean JSON output.
3. Parse the response
The response includes conditions from all 8 data sources with full metadata.
Pass your API key in the X-API-Key header:
X-API-Key: sk_scout_YOUR_KEY_HERE
| Tier | Limit | Notes |
|---|---|---|
| Free | 20 req/day | Default tier for new keys |
| Pro | 500 req/day | Coming soon |
| Internal | Unlimited | Scoutloop tooling |
Limits reset at midnight UTC and are tracked per API key.
Endpoint
GET https://scoutloop-zwi9.onrender.com/v1/conditions
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| lat | number | yes | Latitude (e.g., 49.93) |
| lon | number | yes | Longitude (e.g., -122.98) |
| date | string | no | today, tomorrow, or YYYY-MM-DD. Weather + tides fetched for that day; avalanche danger listed per day. |
Response format
{
"lat": 49.93,
"lon": -122.98,
"date": "2026-09-25",
"as_of": "2026-09-17T10:30:00Z",
"weather": {
"source": "Environment Canada / Open-Meteo",
"current_temp_c": 15,
"wind_kmh": 12,
"precip_type": "rain",
"snowfall_24h_cm": 0,
"freezing_level_m": 2200,
"alerts": []
},
"forecast_3day": [
{
"date": "2026-09-17",
"temp_max_c": 18,
"temp_min_c": 9,
"precip_mm": 2.1,
"snow_cm": 0,
"condition": "Light rain"
}
],
"hazards": [
{ "source": "BC Wildfire Service", "type": "wildfire",
"severity": "high", "name": "...", "distance_km": 5.2 },
{ "source": "Avalanche Canada", "type": "avalanche",
"danger_rating": 3, "danger_days": [
{ "date": "2026-09-17", "alpine": 3, "treeline": 2, "below_treeline": 1 }
], "summary": "..." },
{ "source": "Environment Canada AQHI", "type": "air_quality",
"aqhi": 4, "level": "Moderate" }
],
"access": {
"source": "BC Parks / DriveBC",
"park_advisories": [...],
"road_events": [...],
"trailhead": { "name": "...", "requires_day_pass": true }
},
"disclaimer": "Data is aggregated from official BC government sources..."
}weather — Current conditions and alerts from Environment Canada / Open-Meteo.
hazards — Wildfire, avalanche, and air quality hazards with severity ratings.
access — Park advisories, road events, and trailhead info from BC Parks / DriveBC.
For AI assistants like Claude Desktop, Claude Code, or custom LLM toolchains:
Exposes three tools: get_conditions(lat, lon, date?) for live conditions (same response as REST), create_trip(...) to plan a trip conversationally, and create_share_link(trip_id) to mint a shareable link. All parameters are optional to support natural-language planning.
{
"mcpServers": {
"scoutloop": {
"type": "streamable-http",
"url": "https://scoutloop-zwi9.onrender.com/mcp",
"headers": {
"X-API-Key": "sk_scout_YOUR_KEY_HERE"
}
}
}
}Setup prompt for your AI agent
Add the Scoutloop MCP server to your config: - Type: streamable-http - URL: https://scoutloop-zwi9.onrender.com/mcp - Header: X-API-Key = your API key Then ask me to check BC backcountry conditions, or plan a trip.
Paste this into Claude Desktop, Claude Code, or similar after getting your API key. The agent will configure the server and start using Scoutloop tools.
Use MCP when your client supports it — it provides structured tool calls and automatic session management. Use REST for simple HTTP integrations.
Beyond get_conditions, the MCP server exposes two write tools so your agent can plan trips and create shareable links entirely in conversation. All parameters are optional: supply what the user told you, and the tool reports what is still needed.
create_tripwritePlan a new trip. Missing required inputs (destination, start date) are surfaced as a conversational prompt rather than an error — your agent can read the actionable field and ask the user directly.
| Param | Type | Required | Description |
|---|---|---|---|
| destination_query | string | no | Place name to geocode (trail, park, peak). If omitted, falls back to destination_coords. |
| destination_coords | object | no | Fallback destination as {lat, lon}. |
| start_date | string | yes | YYYY-MM-DD. |
| end_date | string | no | YYYY-MM-DD. If omitted, equals start_date. |
| description | string | no | Trip description (markdown-friendly). |
| origin_name | string | no | Origin place name to geocode. Falls back to profile default then Vancouver. |
| origin_coords | object | no | Origin as {lat, lon}. Overrides origin_name. |
| group_size | integer | no | Number of people (used for risk context). |
| activity_type | string | no | Activity tags, e.g. hiking, ski-touring. |
When inputs are missing, returns a needs_input response with an actionable message your agent can surface to the user.
create_share_linkwriteMint a shareable link for a trip you just created (or an existing one you own). Generating a new link revokes the previous one.
| Param | Type | Required | Description |
|---|---|---|---|
| trip_id | string | yes | UUID of the trip (from create_trip). |
Returns { "status": "ok", "share_url": "https://scoutloop.me/t/<token>" }
Location names not supported — supply exact coordinates.
Road events require a start point and aren't included.
Each request hits live data sources — no caching.
Each condition includes the original source and timestamp.
Daily rate limits are tracked per API key and reset at midnight UTC. Exceeding your limit returns HTTP 429.