Ontario Parks APIreservations.ontarioparks.ca ↗
Check group campsite availability across Ontario Parks by weekend and month. Returns park-level status, daily availability codes, and resource-level detail.
What is the Ontario Parks API?
This API exposes 3 endpoints for querying group campsite availability across Ontario Parks' reservation system. The search_group_campsite_availability endpoint sweeps all 5 regions for a given month range and returns per-park weekend counts, daily status codes, and available area names — letting you compare options across dozens of parks in a single call. The other endpoints drill into specific parks or list every park with group campsite facilities.
curl -X GET 'https://api.parse.bot/scraper/ed14e06b-a3fa-45bd-8f33-6038b5b6f21b/search_group_campsite_availability?year=2026&end_month=1&start_month=1' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace reservations-ontarioparks-ca-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Ontario Parks Group Campsite Availability — find open weekends for group camping."""
from parse_apis.ontario_parks_group_campsite_availability_api import (
OntarioParks, Month, ParkNotFound
)
client = OntarioParks()
# List all regions with group campsite parks
for region in client.regions.list(limit=5):
print(region.region, f"({len(region.parks)} parks)")
# Search for weekend availability in July
result = client.parks.search(start_month=Month.JULY, end_month=Month.JULY, year=2026)
print(f"Checked {result.weekends_checked} weekends, found {len(result.summary_by_park)} parks")
for summary in result.summary_by_park[:3]:
print(summary.park_name, f"{summary.weekends_available}/{summary.weekends_checked} weekends available")
# Drill into a specific park's availability for a date range
park = client.park(map_id=-2147483558)
try:
avail = park.availability(start_date="2026-07-10", end_date="2026-07-12")
print(avail.park_name, avail.overall_availability)
for child in avail.child_maps[:3]:
print(f" {child.name}: {[d.status for d in child.daily_availability]}")
except ParkNotFound as exc:
print(f"Park not found: {exc}")
print("exercised: regions.list / parks.search / park.availability")
Search for group campsite availability on weekends across specified months. Discovers parks with group campsites then checks each weekend's availability at the region level. Returns park-level availability summary including daily status codes and weekend counts. Queries 5 regions per weekend so a single-month range (about 4-5 weekends) completes within timeout.
| Param | Type | Description |
|---|---|---|
| year | integer | Year to search. Omitting defaults to the current year. |
| end_month | integer | End month (1-12). Must be >= start_month. |
| start_month | integer | Start month (1-12). |
{
"type": "object",
"fields": {
"year": "integer year searched",
"months": "string range like '6-8'",
"results": "array of {park_name, park_map_id, region, weekend, start_date, end_date, daily_status, has_availability, available_areas}",
"summary_by_park": "array of {park_name, region, park_map_id, weekends_available, weekends_checked}",
"weekends_checked": "integer number of weekends in the range",
"parks_with_group_campsites": "array of {name, region, map_id}"
}
}About the Ontario Parks API
What the API covers
The API covers group campsite availability across Ontario's provincial park reservation system, organized into 5 regions. list_parks returns a complete directory of parks that offer group campsite facilities, structured as regions (each with region_map_id and an array of {name, map_id} parks) plus total_parks and total_regions counts. These map_id values are the keys used by the other two endpoints.
Weekend availability search
search_group_campsite_availability accepts year, start_month, and end_month parameters and sweeps every weekend in that range across all regions. It returns a flat results array where each entry covers one park–weekend combination, including start_date, end_date, daily_status codes, has_availability (boolean), and available_areas. The summary_by_park array rolls this up to weekends_available and weekends_checked per park, giving a fast signal for which parks have the most open windows without parsing every individual result.
Per-park detail
get_park_availability takes a map_id, start_date, and end_date and returns resource-level and area-level detail. The resources array lists individual campsite resources with daily_availability entries containing code and status per day. The child_maps array breaks availability down by named sub-areas of the park. The overall_availability field gives a flat string array (e.g. Available, Unavailable) covering each day in the requested range, useful for a quick date-by-date scan without iterating individual resources.
The Ontario Parks API is a managed, monitored endpoint for reservations.ontarioparks.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when reservations.ontarioparks.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official reservations.ontarioparks.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Find which Ontario Parks have open group campsites on any given summer weekend using summary_by_park weekends_available counts
- Build a group trip planner that compares park availability across a full season by querying start_month through end_month
- Generate a weekly digest of newly available group campsites for a specific region using region filtering from list_parks
- Check whether a specific park has day-by-day availability for a multi-day group event using get_park_availability with custom date ranges
- Map group campsite parks geographically using map_id and region data from list_parks
- Alert users when a previously unavailable park shows has_availability = true for a target weekend
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.