NPS API: Get National Park Service site visiting details
Finds 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.
Unofficial. Not affiliated with or endorsed by NPS.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Park Name, required
park_name Name of the park or NPS site, for example Yellowstone or Statue of Liberty.
Yellowstone
Input as JSON
{ "park_name": "Yellowstone"}Output
{ "url": "https://www.nps.gov/yell/index.htm" , "email": null, "states": [ "Idaho", "Montana", "Wyoming" ], "park_code": "YELL", "park_name": "Yellowstone National Park", "description": "On March 1, 1872, Yellowstone became the first national park for all to enjoy the unique hydrothermal wonders. Today, millions of people come here each year to camp, hike, and enjoy the majesty of the park.", "designation": "National Park", "phone_number": "307-344-7381", "entrance_fees": [ { "price": 35, "currency": "USD", "pass_name": "Private Vehicle" }, { "price": 30, "currency": "USD", "pass_name": "Motorcycle" }, { "price": 30, "currency": "USD", "pass_name": "Snowmobile" } ], "visitor_centers": [ { "url": "https://www.nps.gov/yell/planyourvisit/albright-visitor-center.htm" , "name": "Albright Visitor Center", "address": null }, { "url": "https://www.nps.gov/yell/planyourvisit/canyonvc.htm" , "name": "Canyon Visitor Education Center", "address": null }, { "url": "https://www.nps.gov/yell/planyourvisit/fishing-bridge-visitor-center.htm" , "name": "Fishing Bridge Visitor Center", "address": null } ], "reservation_note": "No reservation or timed-entry permit is required for general park entry; activity-specific bookings may still apply.", "directions_summary": "GPS May Not Be Up-To-Date GPS or internet-based mapping services may not reflect the most current road status. When planning your drive to Yellowstone, always check the park roads page before leaving for your trip. Directions Yellowstone National Park covers nearly 3,500 square miles in the northwes…", "opening_hours_and_seasons": "Yellowstone is open 24 hours per day, 365 days per year When seasonally open, park entrances are not gated at night and visitors may enter and exit the park 24 hours a day, seven days a week. Road statuses can change quickly due to weather conditions and certain restrictions may apply, so check the …", "reservations_or_timed_entry_required": false}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"nps.gov/get_park","input":{"park_name":"Yellowstone"}}' # 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": "nps.gov/get_park" , "input": { "park_name": "Yellowstone" }})# 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": "nps.gov/get_park" , "input": { "park_name": "Yellowstone" } }), 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 nps.gov/get_park# with {"park_name":"Yellowstone"}"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": [ "park_name" ], "properties": { "park_name": { "type": "string", "description": "Name of the park or NPS site, for example Yellowstone or Statue of Liberty." } }}Output schema
{ "type": "object", "required": [ "park_name", "designation", "states", "description", "entrance_fees", "opening_hours_and_seasons", "visitor_centers", "phone_number", "email", "directions_summary", "reservations_or_timed_entry_required", "reservation_note", "url", "park_code" ], "properties": { "url": { "type": "string" }, "email": { "type": [ "string", "null" ] }, "states": { "type": "array", "items": { "type": "string" } }, "park_code": { "type": "string", "x-fous-developer": true }, "park_name": { "type": "string", "description": "Official park or site name." }, "description": { "type": [ "string", "null" ] }, "designation": { "type": "string" }, "phone_number": { "type": [ "string", "null" ] }, "entrance_fees": { "type": "array", "items": { "type": "object", "required": [ "pass_name", "price", "currency" ], "properties": { "price": { "type": "number" }, "currency": { "type": "string" }, "pass_name": { "type": "string" } }, "additionalProperties": false } }, "visitor_centers": { "type": "array", "items": { "type": "object", "required": [ "name", "address", "url" ], "properties": { "url": { "type": "string", "description": "NPS page for this visitor center." }, "name": { "type": "string" }, "address": { "type": [ "string", "null" ] } }, "additionalProperties": false } }, "reservation_note": { "type": "string" }, "directions_summary": { "type": [ "string", "null" ] }, "opening_hours_and_seasons": { "type": [ "string", "null" ] }, "reservations_or_timed_entry_required": { "type": "boolean" } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
nps.gov/get_park- Returns
- official name, designation, states, description, entrance fees, hours, visitor centers, phone, email, directions, reservation requirement, park URL and code
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 nps.gov/get_park with the inputs above.
Ask your agent
- What are the entrance fees and opening hours for Zion National Park?
- Do I need a reservation to enter Rocky Mountain National Park, and what's the phone number for the visitor center?
- Look up the NPS page for Gettysburg and give me directions, contact email, and the park code.
- I'm planning a trip to Acadia — what visitor centers are there and how much does it cost to get in?
- Using nps.gov, pull the official details for Mesa Verde: designation, which states it's in, hours, fees, and whether timed entry is required.
See more
All NPS methodsLists 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 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.
recreation.gov/search_campgroundsFinds 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_availabilityLooks up the National Weather Service seven-day day and night forecast for a U.S. city, address, or ZIP code. Forecast availability depends on NWS land-grid coverage.
weather.gov/get_forecastLooks up a provider in the NPI Registry by 10-digit NPI number and returns the public name, specialties, addresses, contact details and registry dates.
npiregistry.cms.hhs.gov/get_providerGets the latest reported status and dated update for a named InciWeb wildfire, including evacuation and closure notices. Past notices may no longer apply; older fires not in InciWeb's index may not be found.
inciweb.wildfire.gov/get_wildfireLooks up a public Google Maps place by name and location and returns its profile: address, rating, hours, phone, website and photos.
google.com/get_placeSearches public National Archives Catalog records by keywords, year range, material type and online availability, in catalog relevance order.
catalog.archives.gov/search_records