Recreation.gov API: Search campgrounds and recreation experiences
Finds campgrounds, cabins, permits, tours, timed entries and day-use experiences near a place or within a park or forest on Recreation.gov. Distances and nightly prices are included when listed; prices are not availability quotes.
Unofficial. Not affiliated with or endorsed by Recreation.gov.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Type optional
type Experience category, for example campgrounds.
campgrounds (default)
One of
campgrounds,permits,tours_and_tickets,day_use,all.- Location, required
location Place, park or forest to search near, for example Grand Canyon or Asheville, NC.
Grand Canyon
- Max Results optional
max_results Maximum number of listings, for example 20 (up to 50).
20 (default)
Whole number from 1 to 50.
- Radius (miles) optional
radius_miles Search radius in miles around the place, for example 50.
50 (default)
Number 0 or more.
Input as JSON
{ "location": "Grand Canyon"}Output
{ "results": [ { "link": "https://www.recreation.gov/camping/campgrounds/232490" , "name": "MATHER CAMPGROUND", "type": "Campground", "state": "Arizona", "latitude": 36.0497222, "longitude": -112.1204694, "facility_id": "232490", "distance_miles": 2, "park_or_forest": "Grand Canyon National Park", "price_currency": "USD", "number_of_sites": 288, "reservable_online": true, "short_description": "Due to high demand, Mather Campground recommends reservations during peak season: March 1- November 30. You may book reservations up to 6 months in advance. Mather Campground is on the South Rim of Grand Canyon National Park in Arizona. Grand Canyon is one of…", "nightly_price_max_usd": 50, "nightly_price_min_usd": 6 }, { "link": "https://www.recreation.gov/camping/campgrounds/234488" , "name": "Tusayan - Montane", "type": "Campground", "state": "Arizona", "latitude": 35.9369444, "longitude": -112.1230556, "facility_id": "234488", "distance_miles": 13.14, "park_or_forest": "Kaibab National Forest", "price_currency": "USD", "number_of_sites": 160, "reservable_online": true, "short_description": "Perhaps the biggest draw to Tusayan-Montane Campground in northern Arizona is its proximity to the South Rim of Grand Canyon National Park. Located just 4 miles south of the park entrance in beautiful Kaibab National Forest, Tusayan-Montane is a quiet, peaceful…", "nightly_price_max_usd": 20, "nightly_price_min_usd": 10 }, { "link": "https://www.recreation.gov/camping/campgrounds/232489" , "name": "North Rim Campground (AZ)", "type": "Campground", "state": "Arizona", "latitude": 36.2102778, "longitude": -112.0605556, "facility_id": "232489", "distance_miles": 18.84, "park_or_forest": "Grand Canyon National Park", "price_currency": null, "number_of_sites": 87, "reservable_online": true, "short_description": "The North Rim Campground is located on the remote and rustic North Rim of Grand Canyon National Park in northern Arizona, approximately 210 miles (338 km) from Grand Canyon Village, AZ on the South Rim. It is nestled in a thick ponderosa and aspen forest just on the…", "nightly_price_max_usd": null, "nightly_price_min_usd": null } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"recreation.gov/search_campgrounds","input":{"location":"Grand Canyon"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "recreation.gov/search_campgrounds" , "input": { "location": "Grand Canyon" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "recreation.gov/search_campgrounds" , "input": { "location": "Grand Canyon" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run recreation.gov/search_campgrounds# with {"location":"Grand Canyon"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "location" ], "properties": { "type": { "enum": [ "campgrounds", "permits", "tours_and_tickets", "day_use", "all" ], "type": "string", "default": "campgrounds", "description": "Experience category, for example campgrounds." }, "location": { "type": "string", "minLength": 1, "description": "Place, park or forest to search near, for example Grand Canyon or Asheville, NC." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Maximum number of listings, for example 20 (up to 50)." }, "radius_miles": { "type": "number", "default": 50, "minimum": 0, "description": "Search radius in miles around the place, for example 50." } }}Output schema
{ "type": "object", "required": [ "results" ], "properties": { "results": { "type": "array", "items": { "type": "object", "required": [ "name", "type", "park_or_forest", "state", "short_description", "distance_miles", "nightly_price_min_usd", "nightly_price_max_usd", "price_currency", "number_of_sites", "reservable_online", "link", "facility_id", "latitude", "longitude" ], "properties": { "link": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" }, "state": { "type": [ "string", "null" ] }, "latitude": { "type": [ "number", "null" ] }, "longitude": { "type": [ "number", "null" ] }, "facility_id": { "type": [ "string", "null" ] }, "distance_miles": { "type": [ "number", "null" ] }, "park_or_forest": { "type": [ "string", "null" ] }, "price_currency": { "type": [ "string", "null" ] }, "number_of_sites": { "type": [ "integer", "null" ] }, "reservable_online": { "type": "boolean" }, "short_description": { "type": [ "string", "null" ] }, "nightly_price_max_usd": { "type": [ "number", "null" ] }, "nightly_price_min_usd": { "type": [ "number", "null" ] } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
recreation.gov/search_campgrounds- Returns
- name, type, park or forest, state, description, distance, nightly prices, sites, reservable flag, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method recreation.gov/search_campgrounds with the inputs above.
Ask your agent
- Find campgrounds within 30 miles of Yosemite Valley with nightly prices listed
- Show me timed entry tickets for Arches National Park this spring
- Any cabins near Asheville, NC under a 25 mile radius?
- List day-use areas inside Pisgah National Forest with descriptions and links
- What permits and guided tours are available around Zion, sorted by distance, up to 15 results?
See more
All Recreation.gov methodsFinds Recreation.gov campsites free for every night of a stay at a campground, with site details. Nightly prices are shown only when a campground lists a single nightly rate. Availability can change before booking.
recreation.gov/check_campsite_availabilityFinds a National Park Service site by name in the NPS state directories and returns its fees, hours, visitor centers, contacts, directions and entry booking guidance.
nps.gov/get_parkFinds GetYourGuide tours, tickets and activities in a city, optionally matching words, available on a day, sorted by popularity, price or rating, with prices, ratings and booking features.
getyourguide.com/search_activitiesSearches public Airbnb homes for a destination and travel dates. Each stay comes with its price, rating, room details and listing link. Prices are the displayed trip totals, including fees.
airbnb.com/search_staysLists current alerts for a named National Park Service park from its Current Conditions page, in the order shown on the page.
nps.gov/list_park_alertsFinds tours and experiences in a city on Viator, with optional keywords, date, currency and sorting. Prices are starting prices.
viator.com/search_toursFinds public PlugShare charging stations near an address, city or ZIP code, nearest first, with driver PlugScores and charging details. Cost and opening hours appear when listed.
plugshare.com/search_chargersFinds Expedia hotels in a destination for given dates, with public USD prices, reviews, property class, refund status and links. Nightly prices are per room; totals include all requested rooms, taxes and fees.
expedia.com/search_hotels