{"openapi":"3.1.0","info":{"title":"EV Backroads Trail Commons API","version":"1.0.0","description":"Schema-first public access to moderated community trails and campsites. Browser users and AI agents use the same strict submission contract and private human editorial queue. Contributor contact data is write-only and never appears in public responses."},"externalDocs":{"description":"Trail Commons agent skill","url":"https://www.evbackroads.com/skills/trail-commons/SKILL.md"},"servers":[{"url":"https://www.evbackroads.com"}],"paths":{"/api/v1/community/places":{"get":{"operationId":"listPlaces","summary":"List published places","parameters":[{"name":"kind","in":"query","schema":{"$ref":"#/components/schemas/PlaceKind"}},{"name":"country","in":"query","description":"Two-letter country code","schema":{"type":"string","minLength":2,"maxLength":2,"example":"US"}},{"name":"state","in":"query","description":"State, province, territory, or its short code","schema":{"type":"string","maxLength":120,"example":"Utah"}},{"name":"area","in":"query","description":"Travel area or region","schema":{"type":"string","maxLength":160,"example":"Dinosaur National Monument"}},{"name":"bbox","in":"query","description":"west,south,east,north","schema":{"type":"string","example":"-114,36,-108,42"}},{"name":"cursor","in":"query","schema":{"type":"string","maxLength":512}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":24}}],"responses":{"200":{"description":"Published place page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceListResponse"}}}},"400":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"submitPlace","summary":"Submit a place for human review","description":"Accepts browser or server-to-server submissions. An agent must show the final payload to the user and obtain explicit approval of both attestations before calling this operation. A 202 response means pending human review, not publication.","security":[],"x-human-approval-required":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceSubmission"},"examples":{"campsite":{"summary":"Campsite with no photo","value":{"kind":"campsite","name":"Pine Bench dispersed site","summary":"A quiet vehicle campsite beside a maintained forest road.","description":"A level gravel pullout with room for one vehicle and a small tent. Pack out all waste and confirm current fire rules.","latitude":45.1234,"longitude":-113.4567,"locationPrecision":"approximate","accessNotes":"Use the signed forest road. Do not block the gate.","difficulty":"Easy — paved or graded","season":"June through October","landManager":"U.S. Forest Service","sourceUrl":"","routeSource":"new","routeSourceUrl":"","externalSource":"","externalSourceUrl":"","campsiteDetails":{"campsiteType":"dispersed","siteType":"vehicle","electricHookup":false,"electricAmps":[],"electricPlugTypes":[],"electricNotes":""},"route":null,"waypoints":[],"photoIds":[],"contributorName":"","contributorEmail":"traveler@example.com","attestPublicAccess":true,"attestNoSensitiveLocation":true,"website":""}},"trail":{"summary":"Trail with ordered route and stops","value":{"kind":"trail","name":"Sample ridge backroad","summary":"A scenic gravel climb with two useful turnaround points.","description":"The route follows a maintained ridge road. The final mile is narrow and has limited passing space. Turn back before wet conditions.","latitude":39.1,"longitude":-108.2,"locationPrecision":"trailhead","accessNotes":"Confirm the seasonal gate with the land manager.","difficulty":"Difficult — high clearance","season":"Late May through October","landManager":"Bureau of Land Management","sourceUrl":"","routeSource":"new","routeSourceUrl":"","externalSource":"","externalSourceUrl":"","campsiteDetails":null,"route":{"type":"LineString","coordinates":[[-108.2,39.1],[-108.24,39.13],[-108.28,39.16]]},"waypoints":[{"id":"trailhead","name":"Trailhead","latitude":39.1,"longitude":-108.2,"capturedAtStart":"","capturedAtEnd":"","summary":"Start at the signed public road.","tags":["trailhead"],"photoIds":[],"campsiteDetails":null},{"id":"turnaround","name":"Turnaround","latitude":39.16,"longitude":-108.28,"capturedAtStart":"","capturedAtEnd":"","summary":"Wide gravel turnaround before the rough spur.","tags":["turnaround"],"photoIds":[],"campsiteDetails":null}],"photoIds":[],"contributorName":"","contributorEmail":"traveler@example.com","attestPublicAccess":true,"attestNoSensitiveLocation":true,"website":""}}}}}},"responses":{"202":{"description":"Submission accepted into the private review queue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionAccepted"}}}},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/community/places/{id}":{"get":{"operationId":"getPlace","summary":"Get one published place","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Published place","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceResponse"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/api/v1/community/places/{id}/photos/{photoId}":{"get":{"operationId":"getPublishedPhoto","summary":"Get one photo from a published place","description":"Photos stay private until the associated place is published by an editor.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"photoId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Published place photo","content":{"image/jpeg":{},"image/png":{},"image/webp":{}}},"404":{"$ref":"#/components/responses/Error"}}}},"/api/v1/community/uploads":{"post":{"operationId":"uploadPhoto","summary":"Upload one private review photo","description":"Send the raw image body with Content-Type and X-File-Name headers. Images stay private until an editor reviews the associated submission.","requestBody":{"required":true,"content":{"image/jpeg":{},"image/png":{},"image/webp":{},"image/heic":{},"image/heif":{}}},"responses":{"201":{"description":"Private photo accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadAccepted"}}}},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}}},"components":{"schemas":{"PlaceKind":{"type":"string","enum":["trail","campsite"]},"PlaceSubmission":{"type":"object","properties":{"kind":{"type":"string","enum":["trail","campsite"]},"name":{"type":"string","minLength":3,"maxLength":100},"summary":{"type":"string","minLength":20,"maxLength":240},"description":{"type":"string","minLength":40,"maxLength":4000},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"locationPrecision":{"default":"approximate","type":"string","enum":["approximate","trailhead","exact"]},"stateCode":{"default":"","anyOf":[{"type":"string","pattern":"^[A-Z0-9-]{2,6}$"},{"type":"string","const":""}]},"countryCode":{"default":"","anyOf":[{"type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$"},{"type":"string","const":""}]},"stateProvince":{"default":"","type":"string","maxLength":120},"areaName":{"default":"","type":"string","maxLength":160},"accessNotes":{"default":"","type":"string","maxLength":1200},"difficulty":{"default":"","type":"string","maxLength":80},"season":{"default":"","type":"string","maxLength":160},"landManager":{"default":"","type":"string","maxLength":100},"sourceUrl":{"default":"","anyOf":[{"type":"string","format":"uri"},{"type":"string","const":""}]},"routeSource":{"default":"new","type":"string","enum":["onx","atlas","new"]},"routeSourceUrl":{"default":"","anyOf":[{"type":"string","format":"uri"},{"type":"string","const":""}]},"externalSource":{"default":"","anyOf":[{"type":"string","enum":["onx","trailsoffroad"]},{"type":"string","const":""}]},"externalSourceUrl":{"default":"","anyOf":[{"type":"string","format":"uri"},{"type":"string","const":""}]},"trailDetails":{"anyOf":[{"type":"object","properties":{"distanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"estimatedDriveMinutes":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":10080},{"type":"null"}]},"highestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"lowestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"elevationGainFeet":{"anyOf":[{"type":"integer","minimum":0,"maximum":50000},{"type":"null"}]},"technicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"trailShape":{"anyOf":[{"type":"string","enum":["loop","out-and-back","point-to-point","network","other"]},{"type":"null"}]},"recommendedDirection":{"anyOf":[{"type":"string","enum":["either","clockwise","counterclockwise","northbound","southbound","eastbound","westbound"]},{"type":"null"}]},"surfaceTypes":{"maxItems":10,"type":"array","items":{"type":"string","enum":["paved","graded-dirt","gravel","sand","rock","mud","snow","water-crossing","mixed","other"]}},"minimumVehicle":{"anyOf":[{"type":"string","enum":["any-ev","awd","high-clearance-awd","high-clearance-4wd","modified-4wd","other"]},{"type":"null"}]},"officialRouteName":{"type":"string","maxLength":160},"nearestTown":{"type":"string","maxLength":120},"nearestServices":{"type":"string","maxLength":240},"typicalOpen":{"type":"string","maxLength":160},"permitRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"feeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"cellCoverage":{"anyOf":[{"type":"string","enum":["none","spotty","partial","reliable","unknown"]},{"type":"null"}]},"campingAvailability":{"anyOf":[{"type":"string","enum":["on-route","nearby","not-allowed","unknown"]},{"type":"null"}]},"chargingNotes":{"type":"string","maxLength":1000},"turnaroundNotes":{"type":"string","maxLength":1000},"distanceMethod":{"type":"string","enum":["gpx-track","route-line","waypoint-polyline","source-reported","direct-distance","unknown"]},"optionalTechnicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"category":{"type":"string","maxLength":80},"agencyDistrict":{"type":"string","maxLength":160},"county":{"type":"string","maxLength":120},"concerns":{"maxItems":14,"type":"array","items":{"type":"string","enum":["width","narrow-shelf-road","off-camber","mud","impassable-when-wet","pinstriping","body-damage","short-wheelbase","deep-sand","high-water","washout","livestock","blind-corners","other"]}},"status":{"anyOf":[{"type":"string","enum":["open","closed","restricted","unknown"]},{"type":"null"}]},"statusReportedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceUpdatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]},"sourceReviewCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]}},"required":["distanceMiles","estimatedDriveMinutes","highestElevationFeet","lowestElevationFeet","elevationGainFeet","technicalRating","trailShape","recommendedDirection","surfaceTypes","minimumVehicle","officialRouteName","nearestTown","nearestServices","typicalOpen","permitRequired","feeRequired","cellCoverage","campingAvailability","chargingNotes","turnaroundNotes"],"additionalProperties":false},{"type":"null"}]},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"route":{"default":null,"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"LineString"},"coordinates":{"minItems":2,"maxItems":500,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"null"}]},"waypoints":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"distanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"capturedAtStart":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"capturedAtEnd":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"summary":{"default":"","type":"string","maxLength":1000},"tags":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","enum":["trailhead","directional","point-of-interest","historic-site","rock-art","viewpoint","obstacle","campsite","water","charging","closure","recovery","turnaround","other"]}},"photoIds":{"default":[],"maxItems":24,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]}},"required":["id","name","latitude","longitude"],"additionalProperties":false}},"photoIds":{"default":[],"maxItems":24,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"contributorName":{"default":"","type":"string","maxLength":100},"contributorEmail":{"type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"attestPublicAccess":{"type":"boolean","const":true},"attestNoSensitiveLocation":{"type":"boolean","const":true},"startedAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"website":{"default":"","type":"string","maxLength":200}},"required":["kind","name","summary","description","latitude","longitude","contributorEmail","attestPublicAccess","attestNoSensitiveLocation"],"additionalProperties":false},"PublicPlace":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["trail","campsite"]},"name":{"type":"string","minLength":3,"maxLength":100},"summary":{"type":"string","minLength":20,"maxLength":240},"description":{"type":"string","minLength":40,"maxLength":4000},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"locationPrecision":{"type":"string","enum":["approximate","trailhead","exact"]},"stateCode":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9-]{2,6}$"},{"type":"null"}]},"countryCode":{"anyOf":[{"type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$"},{"type":"null"}]},"stateProvince":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"areaName":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"accessNotes":{"anyOf":[{"type":"string","maxLength":1200},{"type":"null"}]},"difficulty":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"season":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"landManager":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"routeSource":{"anyOf":[{"type":"string","enum":["onx","atlas","new"]},{"type":"null"}]},"routeSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"externalSource":{"anyOf":[{"type":"string","enum":["onx","trailsoffroad"]},{"type":"null"}]},"externalSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"trailDetails":{"anyOf":[{"type":"object","properties":{"distanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"estimatedDriveMinutes":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":10080},{"type":"null"}]},"highestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"lowestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"elevationGainFeet":{"anyOf":[{"type":"integer","minimum":0,"maximum":50000},{"type":"null"}]},"technicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"trailShape":{"anyOf":[{"type":"string","enum":["loop","out-and-back","point-to-point","network","other"]},{"type":"null"}]},"recommendedDirection":{"anyOf":[{"type":"string","enum":["either","clockwise","counterclockwise","northbound","southbound","eastbound","westbound"]},{"type":"null"}]},"surfaceTypes":{"maxItems":10,"type":"array","items":{"type":"string","enum":["paved","graded-dirt","gravel","sand","rock","mud","snow","water-crossing","mixed","other"]}},"minimumVehicle":{"anyOf":[{"type":"string","enum":["any-ev","awd","high-clearance-awd","high-clearance-4wd","modified-4wd","other"]},{"type":"null"}]},"officialRouteName":{"type":"string","maxLength":160},"nearestTown":{"type":"string","maxLength":120},"nearestServices":{"type":"string","maxLength":240},"typicalOpen":{"type":"string","maxLength":160},"permitRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"feeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"cellCoverage":{"anyOf":[{"type":"string","enum":["none","spotty","partial","reliable","unknown"]},{"type":"null"}]},"campingAvailability":{"anyOf":[{"type":"string","enum":["on-route","nearby","not-allowed","unknown"]},{"type":"null"}]},"chargingNotes":{"type":"string","maxLength":1000},"turnaroundNotes":{"type":"string","maxLength":1000},"distanceMethod":{"type":"string","enum":["gpx-track","route-line","waypoint-polyline","source-reported","direct-distance","unknown"]},"optionalTechnicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"category":{"type":"string","maxLength":80},"agencyDistrict":{"type":"string","maxLength":160},"county":{"type":"string","maxLength":120},"concerns":{"maxItems":14,"type":"array","items":{"type":"string","enum":["width","narrow-shelf-road","off-camber","mud","impassable-when-wet","pinstriping","body-damage","short-wheelbase","deep-sand","high-water","washout","livestock","blind-corners","other"]}},"status":{"anyOf":[{"type":"string","enum":["open","closed","restricted","unknown"]},{"type":"null"}]},"statusReportedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceUpdatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]},"sourceReviewCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]}},"required":["distanceMiles","estimatedDriveMinutes","highestElevationFeet","lowestElevationFeet","elevationGainFeet","technicalRating","trailShape","recommendedDirection","surfaceTypes","minimumVehicle","officialRouteName","nearestTown","nearestServices","typicalOpen","permitRequired","feeRequired","cellCoverage","campingAvailability","chargingNotes","turnaroundNotes"],"additionalProperties":false},{"type":"null"}]},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"route":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"LineString"},"coordinates":{"minItems":2,"maxItems":500,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"null"}]},"waypoints":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"distanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"capturedAtStart":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"capturedAtEnd":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"summary":{"default":"","type":"string","maxLength":1000},"tags":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","enum":["trailhead","directional","point-of-interest","historic-site","rock-art","viewpoint","obstacle","campsite","water","charging","closure","recovery","turnaround","other"]}},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"photoCount":{"type":"integer","minimum":0,"maximum":24}},"required":["id","name","latitude","longitude","photoCount"],"additionalProperties":false}},"photoCount":{"type":"integer","minimum":0,"maximum":80},"heroPhotoId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"previewPhotoIds":{"maxItems":2,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"previewPhotoMetadata":{"maxItems":2,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"altText":{"type":"string","maxLength":300},"caption":{"type":"string","maxLength":800},"tags":{"maxItems":12,"type":"array","items":{"type":"string","enum":["featured","trailhead","directional","point-of-interest","scenery","overlook","road-condition","road-sign","historic-site","rock-art","camping","vehicle","wildlife","other"]}},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceCredit":{"type":"string","maxLength":160},"transformation":{"type":"string","enum":["source","gpt-image-2"]},"transformationNotes":{"type":"string","maxLength":500}},"required":["id","altText","caption","tags","sourceUrl","sourceCredit","transformation","transformationNotes"],"additionalProperties":false}},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","kind","name","summary","description","latitude","longitude","locationPrecision","stateCode","countryCode","stateProvince","areaName","accessNotes","difficulty","season","landManager","sourceUrl","routeSource","routeSourceUrl","externalSource","externalSourceUrl","trailDetails","campsiteDetails","route","waypoints","photoCount","heroPhotoId","previewPhotoIds","previewPhotoMetadata","publishedAt","updatedAt"],"additionalProperties":false},"PlaceListResponse":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"places":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["trail","campsite"]},"name":{"type":"string","minLength":3,"maxLength":100},"summary":{"type":"string","minLength":20,"maxLength":240},"description":{"type":"string","minLength":40,"maxLength":4000},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"locationPrecision":{"type":"string","enum":["approximate","trailhead","exact"]},"stateCode":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9-]{2,6}$"},{"type":"null"}]},"countryCode":{"anyOf":[{"type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$"},{"type":"null"}]},"stateProvince":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"areaName":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"accessNotes":{"anyOf":[{"type":"string","maxLength":1200},{"type":"null"}]},"difficulty":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"season":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"landManager":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"routeSource":{"anyOf":[{"type":"string","enum":["onx","atlas","new"]},{"type":"null"}]},"routeSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"externalSource":{"anyOf":[{"type":"string","enum":["onx","trailsoffroad"]},{"type":"null"}]},"externalSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"trailDetails":{"anyOf":[{"type":"object","properties":{"distanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"estimatedDriveMinutes":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":10080},{"type":"null"}]},"highestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"lowestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"elevationGainFeet":{"anyOf":[{"type":"integer","minimum":0,"maximum":50000},{"type":"null"}]},"technicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"trailShape":{"anyOf":[{"type":"string","enum":["loop","out-and-back","point-to-point","network","other"]},{"type":"null"}]},"recommendedDirection":{"anyOf":[{"type":"string","enum":["either","clockwise","counterclockwise","northbound","southbound","eastbound","westbound"]},{"type":"null"}]},"surfaceTypes":{"maxItems":10,"type":"array","items":{"type":"string","enum":["paved","graded-dirt","gravel","sand","rock","mud","snow","water-crossing","mixed","other"]}},"minimumVehicle":{"anyOf":[{"type":"string","enum":["any-ev","awd","high-clearance-awd","high-clearance-4wd","modified-4wd","other"]},{"type":"null"}]},"officialRouteName":{"type":"string","maxLength":160},"nearestTown":{"type":"string","maxLength":120},"nearestServices":{"type":"string","maxLength":240},"typicalOpen":{"type":"string","maxLength":160},"permitRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"feeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"cellCoverage":{"anyOf":[{"type":"string","enum":["none","spotty","partial","reliable","unknown"]},{"type":"null"}]},"campingAvailability":{"anyOf":[{"type":"string","enum":["on-route","nearby","not-allowed","unknown"]},{"type":"null"}]},"chargingNotes":{"type":"string","maxLength":1000},"turnaroundNotes":{"type":"string","maxLength":1000},"distanceMethod":{"type":"string","enum":["gpx-track","route-line","waypoint-polyline","source-reported","direct-distance","unknown"]},"optionalTechnicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"category":{"type":"string","maxLength":80},"agencyDistrict":{"type":"string","maxLength":160},"county":{"type":"string","maxLength":120},"concerns":{"maxItems":14,"type":"array","items":{"type":"string","enum":["width","narrow-shelf-road","off-camber","mud","impassable-when-wet","pinstriping","body-damage","short-wheelbase","deep-sand","high-water","washout","livestock","blind-corners","other"]}},"status":{"anyOf":[{"type":"string","enum":["open","closed","restricted","unknown"]},{"type":"null"}]},"statusReportedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceUpdatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]},"sourceReviewCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]}},"required":["distanceMiles","estimatedDriveMinutes","highestElevationFeet","lowestElevationFeet","elevationGainFeet","technicalRating","trailShape","recommendedDirection","surfaceTypes","minimumVehicle","officialRouteName","nearestTown","nearestServices","typicalOpen","permitRequired","feeRequired","cellCoverage","campingAvailability","chargingNotes","turnaroundNotes"],"additionalProperties":false},{"type":"null"}]},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"route":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"LineString"},"coordinates":{"minItems":2,"maxItems":500,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"null"}]},"waypoints":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"distanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"capturedAtStart":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"capturedAtEnd":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"summary":{"default":"","type":"string","maxLength":1000},"tags":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","enum":["trailhead","directional","point-of-interest","historic-site","rock-art","viewpoint","obstacle","campsite","water","charging","closure","recovery","turnaround","other"]}},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"photoCount":{"type":"integer","minimum":0,"maximum":24}},"required":["id","name","latitude","longitude","photoCount"],"additionalProperties":false}},"photoCount":{"type":"integer","minimum":0,"maximum":80},"heroPhotoId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"previewPhotoIds":{"maxItems":2,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"previewPhotoMetadata":{"maxItems":2,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"altText":{"type":"string","maxLength":300},"caption":{"type":"string","maxLength":800},"tags":{"maxItems":12,"type":"array","items":{"type":"string","enum":["featured","trailhead","directional","point-of-interest","scenery","overlook","road-condition","road-sign","historic-site","rock-art","camping","vehicle","wildlife","other"]}},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceCredit":{"type":"string","maxLength":160},"transformation":{"type":"string","enum":["source","gpt-image-2"]},"transformationNotes":{"type":"string","maxLength":500}},"required":["id","altText","caption","tags","sourceUrl","sourceCredit","transformation","transformationNotes"],"additionalProperties":false}},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","kind","name","summary","description","latitude","longitude","locationPrecision","stateCode","countryCode","stateProvince","areaName","accessNotes","difficulty","season","landManager","sourceUrl","routeSource","routeSourceUrl","externalSource","externalSourceUrl","trailDetails","campsiteDetails","route","waypoints","photoCount","heroPhotoId","previewPhotoIds","previewPhotoMetadata","publishedAt","updatedAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}]}},"required":["schemaVersion","places","nextCursor"],"additionalProperties":false},"PlaceResponse":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"place":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["trail","campsite"]},"name":{"type":"string","minLength":3,"maxLength":100},"summary":{"type":"string","minLength":20,"maxLength":240},"description":{"type":"string","minLength":40,"maxLength":4000},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"locationPrecision":{"type":"string","enum":["approximate","trailhead","exact"]},"stateCode":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9-]{2,6}$"},{"type":"null"}]},"countryCode":{"anyOf":[{"type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Z]{2}$"},{"type":"null"}]},"stateProvince":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"areaName":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"accessNotes":{"anyOf":[{"type":"string","maxLength":1200},{"type":"null"}]},"difficulty":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"season":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"landManager":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"routeSource":{"anyOf":[{"type":"string","enum":["onx","atlas","new"]},{"type":"null"}]},"routeSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"externalSource":{"anyOf":[{"type":"string","enum":["onx","trailsoffroad"]},{"type":"null"}]},"externalSourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"trailDetails":{"anyOf":[{"type":"object","properties":{"distanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"estimatedDriveMinutes":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":10080},{"type":"null"}]},"highestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"lowestElevationFeet":{"anyOf":[{"type":"integer","minimum":-1500,"maximum":30000},{"type":"null"}]},"elevationGainFeet":{"anyOf":[{"type":"integer","minimum":0,"maximum":50000},{"type":"null"}]},"technicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"trailShape":{"anyOf":[{"type":"string","enum":["loop","out-and-back","point-to-point","network","other"]},{"type":"null"}]},"recommendedDirection":{"anyOf":[{"type":"string","enum":["either","clockwise","counterclockwise","northbound","southbound","eastbound","westbound"]},{"type":"null"}]},"surfaceTypes":{"maxItems":10,"type":"array","items":{"type":"string","enum":["paved","graded-dirt","gravel","sand","rock","mud","snow","water-crossing","mixed","other"]}},"minimumVehicle":{"anyOf":[{"type":"string","enum":["any-ev","awd","high-clearance-awd","high-clearance-4wd","modified-4wd","other"]},{"type":"null"}]},"officialRouteName":{"type":"string","maxLength":160},"nearestTown":{"type":"string","maxLength":120},"nearestServices":{"type":"string","maxLength":240},"typicalOpen":{"type":"string","maxLength":160},"permitRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"feeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"cellCoverage":{"anyOf":[{"type":"string","enum":["none","spotty","partial","reliable","unknown"]},{"type":"null"}]},"campingAvailability":{"anyOf":[{"type":"string","enum":["on-route","nearby","not-allowed","unknown"]},{"type":"null"}]},"chargingNotes":{"type":"string","maxLength":1000},"turnaroundNotes":{"type":"string","maxLength":1000},"distanceMethod":{"type":"string","enum":["gpx-track","route-line","waypoint-polyline","source-reported","direct-distance","unknown"]},"optionalTechnicalRating":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"category":{"type":"string","maxLength":80},"agencyDistrict":{"type":"string","maxLength":160},"county":{"type":"string","maxLength":120},"concerns":{"maxItems":14,"type":"array","items":{"type":"string","enum":["width","narrow-shelf-road","off-camber","mud","impassable-when-wet","pinstriping","body-damage","short-wheelbase","deep-sand","high-water","washout","livestock","blind-corners","other"]}},"status":{"anyOf":[{"type":"string","enum":["open","closed","restricted","unknown"]},{"type":"null"}]},"statusReportedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceUpdatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"sourceRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]},"sourceReviewCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":1000000},{"type":"null"}]}},"required":["distanceMiles","estimatedDriveMinutes","highestElevationFeet","lowestElevationFeet","elevationGainFeet","technicalRating","trailShape","recommendedDirection","surfaceTypes","minimumVehicle","officialRouteName","nearestTown","nearestServices","typicalOpen","permitRequired","feeRequired","cellCoverage","campingAvailability","chargingNotes","turnaroundNotes"],"additionalProperties":false},{"type":"null"}]},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"route":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"LineString"},"coordinates":{"minItems":2,"maxItems":500,"type":"array","items":{"type":"array","prefixItems":[{"type":"number","minimum":-180,"maximum":180},{"type":"number","minimum":-90,"maximum":90}]}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"null"}]},"photoCount":{"type":"integer","minimum":0,"maximum":80},"heroPhotoId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"previewPhotoIds":{"maxItems":2,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"previewPhotoMetadata":{"maxItems":2,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"altText":{"type":"string","maxLength":300},"caption":{"type":"string","maxLength":800},"tags":{"maxItems":12,"type":"array","items":{"type":"string","enum":["featured","trailhead","directional","point-of-interest","scenery","overlook","road-condition","road-sign","historic-site","rock-art","camping","vehicle","wildlife","other"]}},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceCredit":{"type":"string","maxLength":160},"transformation":{"type":"string","enum":["source","gpt-image-2"]},"transformationNotes":{"type":"string","maxLength":500}},"required":["id","altText","caption","tags","sourceUrl","sourceCredit","transformation","transformationNotes"],"additionalProperties":false}},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"photoIds":{"maxItems":80,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"photoMetadata":{"maxItems":80,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"altText":{"type":"string","maxLength":300},"caption":{"type":"string","maxLength":800},"tags":{"maxItems":12,"type":"array","items":{"type":"string","enum":["featured","trailhead","directional","point-of-interest","scenery","overlook","road-condition","road-sign","historic-site","rock-art","camping","vehicle","wildlife","other"]}},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceCredit":{"type":"string","maxLength":160},"transformation":{"type":"string","enum":["source","gpt-image-2"]},"transformationNotes":{"type":"string","maxLength":500}},"required":["id","altText","caption","tags","sourceUrl","sourceCredit","transformation","transformationNotes"],"additionalProperties":false}},"waypoints":{"maxItems":40,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"distanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"sourceDistanceMiles":{"default":null,"anyOf":[{"type":"number","minimum":0,"maximum":1000},{"type":"null"}]},"capturedAtStart":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"capturedAtEnd":{"default":"","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"string","const":""}]},"summary":{"default":"","type":"string","maxLength":1000},"tags":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","enum":["trailhead","directional","point-of-interest","historic-site","rock-art","viewpoint","obstacle","campsite","water","charging","closure","recovery","turnaround","other"]}},"campsiteDetails":{"anyOf":[{"type":"object","properties":{"campsiteType":{"type":"string","enum":["dispersed","developed-campground","rv-park","backcountry","overnight-parking","other"]},"siteType":{"type":"string","enum":["tent","vehicle","rv","mixed","group","other"]},"electricHookup":{"type":"boolean"},"electricAmps":{"default":[],"maxItems":4,"type":"array","items":{"anyOf":[{"type":"number","const":15},{"type":"number","const":20},{"type":"number","const":30},{"type":"number","const":50}]}},"electricPlugTypes":{"default":[],"maxItems":8,"type":"array","items":{"type":"string","enum":["nema-5-15","nema-5-20","tt-30","nema-14-50","nema-6-50","j1772","nacs","other"]}},"electricNotes":{"default":"","type":"string","maxLength":500}},"required":["campsiteType","siteType","electricHookup"],"additionalProperties":false},{"type":"null"}]},"photoCount":{"type":"integer","minimum":0,"maximum":24},"photoIds":{"maxItems":24,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["id","name","latitude","longitude","photoCount","photoIds"],"additionalProperties":false}},"nearestChargers":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"chargerSnapshotId":{"type":"string","minLength":1,"maxLength":128},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"origin":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false},"status":{"type":"string","enum":["complete","partial","no-route"]},"chargers":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":300},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"addressText":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"countryCode":{"type":"string","maxLength":8},"stateCode":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}]},"networks":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"connectorTypes":{"maxItems":16,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"stallCount":{"anyOf":[{"type":"number","minimum":0,"maximum":10000},{"type":"null"}]},"powerKilowatt":{"anyOf":[{"type":"number","minimum":0,"maximum":2000},{"type":"null"}]},"detailsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"mapsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"roadDistanceMiles":{"type":"number","minimum":0,"maximum":20000},"driveTimeMinutes":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":100000},{"type":"null"}]}},"required":["id","name","latitude","longitude","addressText","countryCode","stateCode","networks","connectorTypes","stallCount","powerKilowatt","detailsUrl","mapsUrl","roadDistanceMiles","driveTimeMinutes"],"additionalProperties":false}}},"required":["schemaVersion","chargerSnapshotId","computedAt","origin","status","chargers"],"additionalProperties":false},{"type":"null"}]},"nearbyLevel2Chargers":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"chargerSnapshotId":{"type":"string","minLength":1,"maxLength":128},"computedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"origin":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false},"chargers":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":300},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"addressText":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"countryCode":{"type":"string","maxLength":8},"stateCode":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}]},"networks":{"maxItems":12,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"connectorTypes":{"maxItems":16,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"stallCount":{"anyOf":[{"type":"number","minimum":0,"maximum":10000},{"type":"null"}]},"powerKilowatt":{"anyOf":[{"type":"number","minimum":0,"maximum":2000},{"type":"null"}]},"detailsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"mapsUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"directDistanceMiles":{"type":"number","minimum":0,"maximum":20000}},"required":["id","name","latitude","longitude","addressText","countryCode","stateCode","networks","connectorTypes","stallCount","powerKilowatt","detailsUrl","mapsUrl","directDistanceMiles"],"additionalProperties":false}}},"required":["schemaVersion","chargerSnapshotId","computedAt","origin","chargers"],"additionalProperties":false},{"type":"null"}]}},"required":["id","kind","name","summary","description","latitude","longitude","locationPrecision","stateCode","countryCode","stateProvince","areaName","accessNotes","difficulty","season","landManager","sourceUrl","routeSource","routeSourceUrl","externalSource","externalSourceUrl","trailDetails","campsiteDetails","route","photoCount","heroPhotoId","previewPhotoIds","previewPhotoMetadata","publishedAt","updatedAt","photoIds","photoMetadata","waypoints","nearestChargers","nearbyLevel2Chargers"],"additionalProperties":false}},"required":["schemaVersion","place"],"additionalProperties":false},"SubmissionAccepted":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","const":"pending"},"message":{"type":"string"}},"required":["schemaVersion","id","status","message"],"additionalProperties":false},"UploadAccepted":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","const":"uploaded"},"message":{"type":"string"}},"required":["schemaVersion","id","status","message"],"additionalProperties":false},"ErrorResponse":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}}},"required":["code","message"],"additionalProperties":false}},"required":["schemaVersion","error"],"additionalProperties":false}},"responses":{"Error":{"description":"Structured service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}