{"openapi": "3.0.0", "info": {"title": "American Adventurer", "version": "1.0", "description": "Free-camping and backcountry resupply data. All distances in miles. Null means unrecorded -- never infer a value. Human map for any point: /map?lat=&lon=&z=1-40 (or &mi=<radius in straight-line miles>).", "x-publisher": {"name": "American Adventurer", "what": "Free public-land camping data for the United States: 19,179 campsites with legal status, a three-state cost verdict (free, fee, or unpriced), season windows, water, toilets, resupply, and the nearest open DC fast charger. Every record links to a page you can verify. Open, keyless JSON API at https://davelalande.com/api/", "url": "https://davelalande.com", "api": "https://davelalande.com/api/", "cite": "American Adventurer (davelalande.com), data built 2026-09-24T06:19:08Z", "license": "Free to use, no key required; credit 'American Adventurer / davelalande.com'. POI layers derive from OpenStreetMap (ODbL, credit OpenStreetMap contributors). Terms: https://davelalande.com/llms.txt", "also_by": {"momatio.com": "Dave Lalande's digital studio. Town research and simulators: 29 towns with cited research packs, a robotaxi fleet ladder, a fast-charger sim and a coin-laundromat sim, plus a library of menu-driven prompts with an API. https://momatio.com", "tinycorp.ai": "TinyCorp Signal. A free paper-trading sandbox for prediction markets: build a bot from a library of plain-English signals, backtest it, watch an AI try to improve it, and read the Graveyard of what failed. No real money. https://tinycorp.ai", "223hampshire.com": "223 Hampshire. A commercial building for sale in Quincy, Illinois, listed with Century 21 -- the site is the listing, with a buyer's calculator. https://223hampshire.com"}}}, "servers": [{"url": "https://davelalande.com"}], "paths": {"/api/camps": {"get": {"summary": "Search campsites", "parameters": [{"name": "q", "in": "query", "required": false, "schema": {"type": "string"}, "description": "name or slug fragment"}, {"name": "state", "in": "query", "required": false, "schema": {"type": "string"}, "description": "2-letter state"}, {"name": "fee", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "0 = known free, 1 = charges a fee"}, {"name": "cost", "in": "query", "required": false, "schema": {"type": "string"}, "description": "free | fee | unpriced -- the three-state verdict; unpriced is a developed campground no source has priced"}, {"name": "water", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = has a recorded water source"}, {"name": "rules", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = has recorded closures / fire ban / stay limit"}, {"name": "field_verified", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = somebody stood there"}, {"name": "access", "in": "query", "required": false, "schema": {"type": "string"}, "description": "4x4 (land record says OHV, or a visitor needed clearance) | 4x4-verified (a person drove it) | drive"}, {"name": "forest", "in": "query", "required": false, "schema": {"type": "string"}, "description": "forest orgcode"}, {"name": "trailer", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = the source record says trailers / RVs fit (from site_details; absence means unrecorded)"}, {"name": "campfire", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = the source record says campfires are allowed (a record, not today's fire restriction)"}, {"name": "site_details", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = the record carries any listed site detail"}, {"name": "open", "in": "query", "required": false, "schema": {"type": "string"}, "description": "today | YYYY-MM-DD: only camps whose agency season window reads OPEN on that day (same rules as /season.js); camps with no season record are not listed"}, {"name": "dcfc_within", "in": "query", "required": false, "schema": {"type": "number"}, "description": "within this many STRAIGHT-LINE miles of a public, open, unrestricted DC fast charger (US DOE AFDC snapshot; 1-150). Roads run longer."}, {"name": "connector", "in": "query", "required": false, "schema": {"type": "string"}, "description": "CCS | NACS | CHAdeMO -- with dcfc_within, count only stations that LIST that plug; alone, camps with one within 150 mi"}, {"name": "charge_desert", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "1 = more than 50 straight-line miles from any counted DC fast charger, or none within 150"}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "max 100"}, {"name": "offset", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "pagination offset"}], "responses": {"200": {"description": "OK"}}}}, "/api/camps/{slug}": {"get": {"summary": "One campsite in full, incl. `ev` (nearest DC fast / Level 2 with the AFDC evidence and snapshot date)", "parameters": [{"name": "slug", "in": "path", "required": true, "schema": {"type": "string"}, "description": "campsite slug"}, {"name": "date", "in": "query", "required": false, "schema": {"type": "string"}, "description": "YYYY-MM-DD (default: today, UTC) -- the day `season.state` is evaluated for; `season.state_on` names it; `state_at_build` is the build-day verdict"}], "responses": {"200": {"description": "OK"}}}}, "/api/forests": {"get": {"summary": "Search forests and grasslands", "parameters": [{"name": "q", "in": "query", "required": false, "schema": {"type": "string"}, "description": "name fragment"}, {"name": "state", "in": "query", "required": false, "schema": {"type": "string"}, "description": "2-letter state"}, {"name": "region", "in": "query", "required": false, "schema": {"type": "string"}, "description": "USFS region code"}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "max 100"}, {"name": "offset", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "pagination offset"}], "responses": {"200": {"description": "OK"}}}}, "/api/forests/{slug}": {"get": {"summary": "One forest, with camp coverage counts", "parameters": [{"name": "slug", "in": "path", "required": true, "schema": {"type": "string"}, "description": "forest slug or orgcode"}], "responses": {"200": {"description": "OK"}}}}, "/api/lands": {"get": {"summary": "Search NAMED PUBLIC LANDS that are not national forests -- Wild Forests, state forests, public reserved lands, wildlife management areas", "parameters": [{"name": "q", "in": "query", "required": false, "schema": {"type": "string"}, "description": "name fragment"}, {"name": "state", "in": "query", "required": false, "schema": {"type": "string"}, "description": "2-letter state"}, {"name": "kind", "in": "query", "required": false, "schema": {"type": "string"}, "description": "the managing agency's own word: Wild Forest, Wilderness, State Forest, Public Land, Wildlife Management Area, Camping Area, Canoe Area, Primitive Area, Community Forest -- or an abbreviation we could not expand from any source (WHMA, PFHA, WMU)"}, {"name": "agency", "in": "query", "required": false, "schema": {"type": "string"}, "description": "managing agency name fragment"}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "max 100"}, {"name": "offset", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "pagination offset"}], "responses": {"200": {"description": "OK"}}}}, "/api/lands/{slug}": {"get": {"summary": "One named public land, with camp coverage counts and a sample. `boundary` is always null: we hold no polygon for these units and do not publish one", "parameters": [{"name": "slug", "in": "path", "required": true, "schema": {"type": "string"}, "description": "land unit slug"}], "responses": {"200": {"description": "OK"}}}}, "/api/near": {"get": {"summary": "Camps, toilets, mapped resupply points or charging stations within a radius", "parameters": [{"name": "lat", "in": "query", "required": false, "schema": {"type": "number"}, "description": "required"}, {"name": "lon", "in": "query", "required": false, "schema": {"type": "number"}, "description": "required"}, {"name": "radius", "in": "query", "required": false, "schema": {"type": "number"}, "description": "miles, default 25, max 200 (`mi` is accepted as an alias); type=poi is capped at 50"}, {"name": "type", "in": "query", "required": false, "schema": {"type": "string"}, "description": "camps | toilets | poi | chargers (anything else reads as camps)"}, {"name": "cat", "in": "query", "required": false, "schema": {"type": "string"}, "description": "REQUIRED with type=poi: laundry, grocery, fuel, potable_water, shower, propane, dump_station, pharmacy, urgent_care, mechanic, hardware, mail, outfitter, air. Omit it and the error lists them with their row counts. OpenStreetMap, ODbL -- the response carries the harvest date per state and a note saying the count is a floor, not a survey"}, {"name": "dcfc", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "type=chargers: 1 = only stations with DC fast"}, {"name": "open_public", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "type=chargers: 1 = only status E, public, unrestricted -- the same eligibility the per-camp `ev` field counts"}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "max 100"}], "responses": {"200": {"description": "OK"}}}}}}