Mapvane.

Developers

Everything in Mapvane is automatable: create projects, run trade-area studies, import data, export branded exhibits, manage share links. One key drives both a REST API and a remote MCP server for AI assistants. Included on every plan — no usage meters.

Authentication

Create an API key under Branding → API keys · MCP in the app, then send it as a Bearer token. Keys are scoped to your workspace.

curl https://app.mapvane.com/api/v1/projects \
  -H "Authorization: Bearer mv_your_key"

REST API v1

Base URL /api/v1. The machine-readable spec lives at /api/v1/openapi.json (OpenAPI 3.1) — this page and that document are generated from the same schemas, so they can't disagree.

GET /projects

List projects

example request
curl https://app.mapvane.com/api/v1/projects \
  -H "Authorization: Bearer mv_your_key"

POST /projects

Create a project

example request
curl -X POST https://app.mapvane.com/api/v1/projects \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"name":"NEC Main & 1st — Pad A"}'
  • name body · string · requiredProject name, e.g. 'NEC Scottsdale & Shea'
  • dealType body · string
  • address body · stringSite address (optional; geocoded via the self-hosted geocoder)
  • lon body · numberSite longitude (optional)
  • lat body · numberSite latitude (optional)

POST /projects/{projectId}/site

Set the site pin

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/site \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required
  • address body · string
  • lon body · number
  • lat body · number

POST /projects/{projectId}/trade-area

Run a trade-area study

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/trade-area \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"method":"rings"}'
  • projectId path · string · required
  • method body · string · required
  • bands body · arrayOptional band values, ascending: ring radii in miles (max 25) or drive times in minutes (max 60). Up to 3.
  • donut body · booleanWhen true, each band reports only its increment (0–1, 1–3, 3–5 mi) instead of cumulative totals.

POST /projects/{projectId}/comps

Add numbered comp pins from addresses

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/comps \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"comps":[{"address":"201 N Central Ave, Phoenix, AZ"}]}'
  • projectId path · string · required
  • comps body · array · required

POST /projects/{projectId}/data

Import rows onto the data layer

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/data \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"rows":[{}]}'
  • projectId path · string · required
  • rows body · array · required

GET /projects/{projectId}/reports

List a project's studies

example request
curl https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/reports \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

GET /projects/{projectId}/reports/{reportId}

Read one study back

example request
curl https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/reports/665f1c2ab3d4e5f6a7b8c9d0 \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required
  • reportId path · string · required

GET /projects/{projectId}/reports/latest

Read the latest study

example request
curl https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/reports/latest \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

POST /projects/{projectId}/export

Export PDF/PNG/deck/PPTX

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/export \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"kind":"pdf"}'
  • projectId path · string · required
  • kind body · string · required
  • cover body · booleanDeck only: prepend a branded cover page (title, logo, date).
  • exhibitId body · stringOptional exhibit to render (defaults to the project's first exhibit)

POST /projects/{projectId}/share

Create a share link

example request
curl -X POST https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/share \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

DELETE /projects/{projectId}/share

Disable sharing

example request
curl -X DELETE https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/share \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

GET /projects/{projectId}/exhibits

List a project's exhibits

example request
curl https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/exhibits \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

DELETE /projects/{projectId}

Delete a project and everything in it

example request
curl -X DELETE https://app.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0 \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

GET /shares

List live share links

example request
curl https://app.mapvane.com/api/v1/shares \
  -H "Authorization: Bearer mv_your_key"

GET /leads

List share-page leads

example request
curl https://app.mapvane.com/api/v1/leads \
  -H "Authorization: Bearer mv_your_key"

GET /geocode

Geocode an address

example request
curl https://app.mapvane.com/api/v1/geocode?q=201%20N%20Central%20Ave%2C%20Phoenix%2C%20AZ \
  -H "Authorization: Bearer mv_your_key"
  • q query · string · requiredAddress or place, e.g. '201 N Central Ave, Phoenix, AZ'

MCP server (AI assistants)

Point Claude, or any MCP-capable assistant, at https://app.mapvane.com/mcp with the same Bearer key. 16 tools cover the full broker workflow, plus project resources and analysis prompt templates.

  • list_projects List the org's map projects (id, name, deal type, last update).
  • geocode_address Geocode an address or place name. Results marked persistable:true may be used as site coordinates; persistable:false results are for orientation only.
  • create_project Create a project for a listing/deal. Set its site by address (geocoded server-side) or by lon/lat. Returns the project id.
  • set_site Set or replace a project's site pin by address (geocoded server-side) or by lon/lat.
  • run_trade_area Run a trade-area study on a project's site: mile rings (default 1/3/5), drive/walk/bike-time minutes (default 5/10/15), or 'custom' (analyzes a site boundary polygon drawn in the app; ignores bands/donut), with demographics (population, households, income, age, tenure, home value, education) per band. Pass `bands` to customize the values.
  • list_reports List a project's recent trade-area studies (newest first): id, method, cumulative vs donut bands, band labels, and when each was run. Use get_report to read one back.
  • get_report Read a trade-area study back: per-band demographics (population, households, income, age, tenure, home value, education, daytime employment). Omit reportId for the latest study.
  • export_exhibit Render the project's branded exhibit (map + trade-area report) to PDF or PNG. Returns a download URL. Kind 'deck' renders EVERY exhibit into one combined PDF (optional branded cover via `cover`) — the full client deliverable; exhibitId is ignored for decks. Kind 'pptx' renders every exhibit as PowerPoint slides instead.
  • add_comps Add numbered comparable pins to a project from addresses (the classic comp exhibit). Geocodes via the app's own geocoder, appends to existing annotations (never replaces), and numbers continue from existing comps. Up to 50 rows; rate-limited per workspace.
  • import_data Import property/data rows onto a project's data layer (feeds the portfolio pins): each row is a flat object of columns. Location is decided PER IMPORT, not per row — if any rows carry lon+lat, the whole call uses coordinates and address-only rows are skipped (send them separately); otherwise the address column geocodes (max 50 rows). Appends (never replaces); up to 200 coordinate rows/call; shares the workspace import budget.
  • list_shares List the workspace's live share links (newest first): slug, projectId, view count, whether a password/expiry/download is set. Use disable_share to kill one.
  • disable_share Turn sharing off for a project — the /m/ link stops resolving immediately.
  • list_exhibits List a project's exhibits (ordered): id, title, method binding, orientation/paper — the ids feed export_exhibit's exhibitId.
  • delete_project Delete a project and EVERYTHING hanging off it (features, reports, exhibits, shares, exports, photos). Irreversible.
  • list_leads Read the workspace's share-page leads (newest first): who asked for details on which shared exhibit, with triage status — for CRM pulls.
  • create_share_link Create (or return the existing) public share link for a project's interactive map + report.

Limits & formats

  • — Flat plans, no usage meters; rate limits protect abuse, not bill you.
  • — Imports: CSV, XLSX, GeoJSON, KML/KMZ, zipped SHP. Exports: PDF, PNG, PPTX, KML, CSV.
  • — Geocoding is address-in, coordinates-out; results you store are yours.