{"openapi":"3.1.0","info":{"title":"Remote Vegas API","version":"1.0.0","summary":"Where to work remotely in Las Vegas: cafés, lobbies, lounges and libraries with Wi-Fi, outlets, noise and hours.","description":"Read endpoints are public, CORS-open and CDN-cached. Data is Remote Vegas's own (curated notes, work attributes, hours, hot zones, approved community check-ins and credited community media) and contains no Yelp or Google content; Yelp/Google/Instagram appear only as links. Credit \"remote.vegas\" with a link to the spot's canonical URL when you reuse or quote this data. Writes need a bearer token (agents) except check-ins and suggestions, which anyone can submit for moderation.","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"contact":{"name":"Remote Vegas","url":"https://remote.vegas"}},"servers":[{"url":"https://remote.vegas/api/v1"}],"externalDocs":{"url":"https://remote.vegas/llms.txt","description":"llms.txt"},"components":{"securitySchemes":{"agentToken":{"type":"http","scheme":"bearer","description":"Remote Vegas agent token (ask hello@remote.vegas)."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code"]}}},"Attr":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":["string","null"]},"evidence":{"type":"array","items":{"type":"object","properties":{"quote":{"type":"string"},"source":{"type":"string"}}}}}},"Media":{"type":"object","description":"Approved community media. Rights stay with the creator; not covered by the data license.","properties":{"id":{"type":"string"},"type":{"enum":["image","video","embed"]},"label":{"enum":["workArea","otherInterior"]},"rights_basis":{"enum":["uploadedByCreator","officialEmbed","creatorPermission"]},"credit":{"type":"object","properties":{"name":{"type":["string","null"]},"handle":{"type":["string","null"]},"platform":{"type":["string","null"]},"source_url":{"type":["string","null"]}}},"embed":{"type":"object","properties":{"platform":{"type":"string"},"url":{"type":"string"}}},"image":{"type":"object"},"video":{"type":"object"}}},"Spot":{"type":"object","required":["id","slug","name","url"],"properties":{"id":{"type":"string","description":"Stable id, rv:spot:<slug>"},"slug":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"area":{"type":["string","null"]},"url":{"type":"string","description":"Canonical page","format":"uri"},"api_url":{"type":"string","format":"uri"},"address":{"type":["string","null"]},"geo":{"type":["object","null"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"}}},"hours":{"type":["string","null"],"description":"Our hours text, Las Vegas local time"},"hours_structured":{"type":["array","null"]},"open_late":{"$ref":"#/components/schemas/Attr"},"cost":{"type":["string","null"]},"best_time":{"type":["string","null"]},"notes":{"type":["string","null"]},"access_tips":{"type":["string","null"]},"work":{"type":"object","description":"wifi yes|spotty|no, outlets yes|limited|no, noise quiet|mixed|loud, calls yes|limited|no, laptop","additionalProperties":{"$ref":"#/components/schemas/Attr"}},"zones":{"type":"object"},"links":{"type":"object","description":"Links out only (website, google_maps, yelp, instagram)"},"community":{"type":"object","properties":{"checkins":{"type":"integer"},"workability":{"type":["object","null"]},"fields":{"type":"object"},"media":{"type":"array","items":{"$ref":"#/components/schemas/Media"}}}},"gavins_pick":{"type":"boolean"},"last_verified":{"type":["string","null"],"format":"date"},"distance_km":{"type":"number"}}},"Envelope":{"type":"object","properties":{"data":{},"meta":{"type":"object","properties":{"license":{"type":"object"},"attribution":{"type":"string"},"generated_at":{"type":"string"},"total":{"type":"integer"}}}}},"Queued":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"status":{"enum":["pending"]},"message":{"type":"string"}}}}}}},"paths":{"/spots":{"get":{"operationId":"searchSpots","summary":"Search and filter work spots","parameters":[{"name":"q","in":"query","required":false,"description":"Free text (name, area, notes)","schema":{"type":"string"}},{"name":"zone","in":"query","required":false,"description":"Zone slug or alias, e.g. arts-district, summerlin, \"the strip\"","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"e.g. Coffee, Library, Hotel lobby","schema":{"type":"string"}},{"name":"wifi","in":"query","required":false,"description":"Only good Wi-Fi","schema":{"type":"boolean"}},{"name":"outlets","in":"query","required":false,"description":"Only spots with outlets","schema":{"type":"boolean"}},{"name":"quiet","in":"query","required":false,"description":"Only quiet spots","schema":{"type":"boolean"}},{"name":"calls","in":"query","required":false,"description":"Only call-friendly","schema":{"type":"boolean"}},{"name":"open_now","in":"query","required":false,"description":"Open right now (Las Vegas time)","schema":{"type":"boolean"}},{"name":"open_at","in":"query","required":false,"description":"ISO datetime (no offset = Vegas local) or \"sat 14:00\"","schema":{"type":"string"}},{"name":"near","in":"query","required":false,"description":"lat,lng","schema":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$"}},{"name":"radius","in":"query","required":false,"description":"km around near (max 50)","schema":{"type":"number","default":5}},{"name":"limit","in":"query","required":false,"description":"","schema":{"type":"integer","default":20,"maximum":100}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/spots/{slug}":{"get":{"operationId":"getSpot","summary":"One spot with community data and schema.org JSON-LD","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateSpotFacts","summary":"Update spot facts (agent token). Trusted tokens apply immediately; all edits are audited.","security":[{"agentToken":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hours":{"type":"string"},"wifi":{"enum":["yes","spotty","no"]},"outlets":{"enum":["yes","limited","no"]},"noise":{"enum":["quiet","mixed","loud"]},"calls":{"enum":["yes","limited","no"]},"best_time":{"type":"string"},"notes":{"type":"string"},"access_tips":{"type":"string"},"reason":{"type":"string"},"source_url":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Queued for review","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/zones":{"get":{"operationId":"listZones","summary":"Hot zones (quadrants, areas, waypoints)","parameters":[{"name":"kind","in":"query","required":false,"description":"","schema":{"enum":["quadrant","area","waypoint"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/zones/{slug}":{"get":{"operationId":"getZone","summary":"One zone with its spots and an ItemList JSON-LD","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/recommend":{"get":{"operationId":"recommendSpot","summary":"Deterministic recommendation for a stated need (no AI, no third-party data)","parameters":[{"name":"need","in":"query","required":true,"description":"e.g. \"quiet spot with outlets for calls near summerlin, open late\"","schema":{"type":"string"}},{"name":"zone","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"near","in":"query","required":false,"description":"lat,lng","schema":{"type":"string"}},{"name":"open_at","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"","schema":{"type":"integer","default":5,"maximum":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/ask":{"get":{"operationId":"ask","summary":"NLWeb-style natural language query; returns schema.org items","parameters":[{"name":"query","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"top_k","in":"query","required":false,"description":"","schema":{"type":"integer"}},{"name":"mode","in":"query","required":false,"description":"","schema":{"enum":["list","summarize"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"operationId":"askPost","summary":"NLWeb v0.55 request body","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"object","properties":{"text":{"type":"string"}}},"prefer":{"type":"object"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/checkins":{"post":{"operationId":"checkIn","summary":"Submit a check-in (moderated). Token optional; without a token consent:true is required.","security":[{},{"agentToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug","workability"],"properties":{"slug":{"type":"string"},"workability":{"type":"integer","minimum":1,"maximum":5},"wifi":{"enum":["works","slow","none"]},"outlets":{"enum":["plenty","some","none"]},"noise":{"enum":["quiet","moderate","loud"]},"seating":{"enum":["comfy","ok","hard"]},"light":{"enum":["bright","ok","dim"]},"calls":{"enum":["yes","limited","no"]},"crowd":{"enum":["empty","some","packed"]},"speed_mbps":{"type":"number"},"note":{"type":"string","maxLength":280},"consent":{"type":"boolean"}}}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Queued"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/suggestions":{"post":{"operationId":"suggestSpot","summary":"Suggest a new spot (moderated)","security":[{},{"agentToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","why"],"properties":{"name":{"type":"string"},"why":{"type":"string"},"address":{"type":"string"},"pin":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}}},"consent":{"type":"boolean"}}}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Queued"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/media-links":{"post":{"operationId":"addMediaLink","summary":"Link a public Instagram/TikTok/YouTube Short/X/Threads post of a spot's work area, credited to its creator (moderated; embed only, never rehosted)","security":[{},{"agentToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug","url"],"properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"credit":{"type":"string","description":"@handle of the creator"},"credit_name":{"type":"string"},"consent":{"type":"boolean"}}}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Queued"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}