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"}'namebody · string · required — Project name, e.g. 'NEC Scottsdale & Shea'dealTypebody · stringaddressbody · string — Site address (optional; geocoded via the self-hosted geocoder)lonbody · number — Site longitude (optional)latbody · number — Site 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"
projectIdpath · string · requiredaddressbody · stringlonbody · numberlatbody · 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"}'projectIdpath · string · requiredmethodbody · string · requiredbandsbody · array — Optional band values, ascending: ring radii in miles (max 25) or drive times in minutes (max 60). Up to 3.donutbody · boolean — When 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"}]}'projectIdpath · string · requiredcompsbody · 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":[{}]}'projectIdpath · string · requiredrowsbody · 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"
projectIdpath · 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"
projectIdpath · string · requiredreportIdpath · 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"
projectIdpath · 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"}'projectIdpath · string · requiredkindbody · string · requiredcoverbody · boolean — Deck only: prepend a branded cover page (title, logo, date).exhibitIdbody · string — Optional 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"
projectIdpath · 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"
projectIdpath · 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"
projectIdpath · 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"
projectIdpath · 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"
qquery · string · required — Address 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.