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://www.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://www.mapvane.com/api/v1/projects \
  -H "Authorization: Bearer mv_your_key"

POST /projects

Create a project

example request
curl -X POST https://www.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://www.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://www.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://www.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://www.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}/data

Export GeoJSON, KML, or report CSV

example request
curl https://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/data \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required
  • format query · stringgeojson (default) | kml — drawn layers. csv | report-geojson | report-kml — the latest study (report-* = band polygons + demographics; all require a prior study).

GET /projects/{projectId}/reports

List a project's studies

example request
curl https://www.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://www.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://www.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://www.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://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/share \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required
  • password body · stringOptional viewer password; omit to leave unchanged, empty string to clear
  • expiresAt body · stringOptional ISO-8601 expiry (end of access). Pass null-as-absent; empty string clears.
  • allowDownload body · booleanLet viewers download the PDF from the share page
  • exhibitId body · stringOptional exhibit to surface on the share (default: first ordered). Clear with empty string.

DELETE /projects/{projectId}/share

Disable sharing

example request
curl -X DELETE https://www.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://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/exhibits \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required

POST /projects/{projectId}/exhibits

Create an exhibit

example request
curl -X POST https://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/exhibits \
  -H "Authorization: Bearer mv_your_key"
  • projectId path · string · required
  • title body · stringExhibit title (optional)

PATCH /projects/{projectId}/exhibits/{exhibitId}

Update an exhibit

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

DELETE /projects/{projectId}/exhibits/{exhibitId}

Delete an exhibit (not a project's last one)

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

POST /projects/{projectId}/exhibits/{exhibitId}/duplicate

Duplicate an exhibit (keeps its framing)

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

POST /projects/{projectId}/exhibits/{exhibitId}/reorder

Move an exhibit to a new position

example request
curl -X POST https://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0/exhibits/665f1c2ab3d4e5f6a7b8c9d0/reorder \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"toIndex":3}'
  • projectId path · string · required
  • exhibitId path · string · required
  • toIndex body · integer · requiredZero-based target position; clamped to the valid range.

POST /projects/{projectId}/duplicate

Duplicate a project (layers + photos)

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

PATCH /projects/{projectId}

Update project meta (address, deal type)

example request
curl -X PATCH https://www.mapvane.com/api/v1/projects/665f1c2ab3d4e5f6a7b8c9d0 \
  -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://www.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://www.mapvane.com/api/v1/shares \
  -H "Authorization: Bearer mv_your_key"

GET /leads

List share-page leads

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

PATCH /leads/{leadId}

Set a lead's triage status

example request
curl -X PATCH https://www.mapvane.com/api/v1/leads/665f1c2ab3d4e5f6a7b8c9d0 \
  -H "Authorization: Bearer mv_your_key"
  • leadId path · string · required

GET /geocode

Geocode an address

example request
curl https://www.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://www.mapvane.com/mcp with the same Bearer key. 25 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.
  • update_project Update a project's meta: name, address label, and/or deal type (e.g. sync from a CRM). Pass address:"" to clear it. Does NOT move the site pin or geocode — use set_site for that.
  • 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. Returns the saved study's `id` and per-band demographics in the SAME shape as get_report, so you can chain straight to get_report/export_data.
  • 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, and optional exhibitId pin. 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.
  • create_exhibit Create a new exhibit on a project (page setup from org defaults). Returns the exhibit projection.
  • update_exhibit Update an exhibit's title, method binding, overlay, basemap, or report-row whitelist. Same fields as the editor panel.
  • delete_exhibit Delete an exhibit from a project. Refuses to remove a project's only exhibit (every project keeps at least one).
  • duplicate_exhibit Duplicate an exhibit within a project, keeping its page setup, study method, overlay, and band labels (report-row curation is not copied). Refuses when the project is at its exhibit limit.
  • reorder_exhibit Move an exhibit to a new zero-based position within its project. Order drives deck assembly and the exhibit switcher.
  • duplicate_project Duplicate a project: copies its name, deal type, address, drawn layers, and site photos into a new project. Returns the new projectId. Studies, exports, exhibits, and shares are NOT copied.
  • 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.
  • update_lead Set a share-page lead's triage status (new | contacted | closed) — the write-back side of list_leads for a two-way CRM sync.
  • export_data Export a project's open formats: drawn layers as GeoJSON (default) or KML; the latest trade-area study as CSV, or as ENRICHED GeoJSON/KML ('report-geojson' / 'report-kml') where each band polygon carries its demographics as feature attributes — pull the whole study, numbers attached, into desktop mapping tools. Mirrors the editor download links.
  • create_share_link Create (or return the existing) public share link for a project's interactive map + report. Optional password, expiry (ISO date), and allowDownload match the editor share panel.

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.