{"openapi":"3.1.0","info":{"title":"Mapvane REST API","version":"1","description":"Thin REST mirror of the Mapvane MCP tools. Auth: Bearer API key (Settings). Docs: docs/13-rest-api.md."},"servers":[{"url":"https://app.mapvane.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/api/v1/projects":{"get":{"operationId":"list_projects","summary":"List projects","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_project","summary":"Create a project","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name, e.g. 'NEC Scottsdale & Shea'"},"dealType":{"type":"string","enum":["retail","office","industrial","land","multifamily","other"]},"address":{"type":"string","description":"Site address (optional; geocoded via the self-hosted geocoder)"},"lon":{"type":"number","description":"Site longitude (optional)"},"lat":{"type":"number","description":"Site latitude (optional)"}},"required":["name"]}}}}}},"/api/v1/projects/{projectId}/site":{"post":{"operationId":"set_site","summary":"Set the site pin","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"lon":{"type":"number"},"lat":{"type":"number"}}}}}}}},"/api/v1/projects/{projectId}/trade-area":{"post":{"operationId":"run_trade_area","summary":"Run a trade-area study","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["rings","drivetime","walktime","biketime","custom"]},"bands":{"type":"array","items":{"type":"number"},"minItems":1,"maxItems":3,"description":"Optional band values, ascending: ring radii in miles (max 25) or drive times in minutes (max 60). Up to 3."},"donut":{"type":"boolean","description":"When true, each band reports only its increment (0–1, 1–3, 3–5 mi) instead of cumulative totals."}},"required":["method"]}}}}}},"/api/v1/projects/{projectId}/comps":{"post":{"operationId":"add_comps","summary":"Add numbered comp pins from addresses","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comps":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string","description":"Legend label; defaults to the address"}},"required":["address"],"additionalProperties":false}}},"required":["comps"]}}}}}},"/api/v1/projects/{projectId}/data":{"post":{"operationId":"import_data","summary":"Import rows onto the data layer","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","description":"Flat column map. Location: lon+lat numbers, or an address string column."}}},"required":["rows"]}}}}}},"/api/v1/projects/{projectId}/reports":{"get":{"operationId":"list_reports","summary":"List a project's studies","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{projectId}/reports/{reportId}":{"get":{"operationId":"get_report","summary":"Read one study back","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"reportId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{projectId}/reports/latest":{"get":{"operationId":"get_report_latest","summary":"Read the latest study","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{projectId}/export":{"post":{"operationId":"export_exhibit","summary":"Export PDF/PNG/deck/PPTX","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["pdf","png","deck","pptx"]},"cover":{"type":"boolean","description":"Deck only: prepend a branded cover page (title, logo, date)."},"exhibitId":{"type":"string","description":"Optional exhibit to render (defaults to the project's first exhibit)"}},"required":["kind"]}}}}}},"/api/v1/projects/{projectId}/share":{"post":{"operationId":"create_share_link","summary":"Create a share link","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}},"delete":{"operationId":"disable_share","summary":"Disable sharing","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{projectId}/exhibits":{"get":{"operationId":"list_exhibits","summary":"List a project's exhibits","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{projectId}":{"delete":{"operationId":"delete_project","summary":"Delete a project and everything in it","security":[{"bearerAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/shares":{"get":{"operationId":"list_shares","summary":"List live share links","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/leads":{"get":{"operationId":"list_leads","summary":"List share-page leads","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}},"/api/v1/geocode":{"get":{"operationId":"geocode_address","summary":"Geocode an address","security":[{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Invalid input"},"401":{"description":"Missing/invalid API key"},"429":{"description":"Rate limited"}}}}}}