Measure MapAPI

Introduction

What the Measure Map Online API does, who can use it, and the conventions every endpoint follows.

The Measure Map Online API connects your own software to your Measure Map Online account. With it you can:

  • read and change projects: create a project for a job, read every area, line and spot measured in it, export it as a .mmp file, file it in folders;
  • keep your product catalogue in sync with your own price list, so estimates in the app use your current prices;
  • manage your organisation on Enterprise: create members, change their roles, and open their accounts from your own tools;
  • put projects on your website, as a live map in an <iframe>, and on Open Guest start a project for each visitor who wants to measure;
  • hear about what happens through webhooks: new projects, comments, guest leads, budget alerts.

Base URL#

Every request goes to one address, for live and sandbox alike:

text
https://api.measuremaponline.com/api/v1

The key you send decides whether a request works with your real data or your sandbox.

Authentication#

Send your API key, exactly as it is, in the Authorization header:

Shell
curl https://api.measuremaponline.com/api/v1/users/YOUR_ACCOUNT_ID/projects/all \
  -H "Authorization: $MMO_API_KEY"

Create keys on the Developer page of the app. Each key carries the access you chose for it, such as reading projects or changing products. See Authentication.

Conventions#

  • JSON in, JSON out. Send bodies as application/json. Every answer is JSON, except the .mmp export, which is XML.
  • Success is 200. A failed request answers with a 4xx or 5xx status and a body with an errorCode: see Errors.
  • IDs are strings. Keep them as you receive them.
  • Times are numbers: milliseconds since 1 January 1970 (UTC), as in JavaScript's Date.now().
  • Measurements are metric: areas in square metres, lengths in metres, coordinates in degrees (WGS 84). Convert for display as you need.
  • Field names follow the objects they describe. Answers use camelCase (creatorUid, totalArea); a few request fields keep the names the app stores (access_level, comments_enabled, parentId). The reference shows each one exactly.
  • Additions are not breaking. New fields can appear in answers and new endpoints can be added at any time; write your code to ignore fields it does not know.

Every endpoint#

EndpointWhat it doesKey access
GET/Check the API—
POST/auth/tokenCreate an access tokenauth
POST/auth/iframe/tokenCreate an embed tokenauth
POST/auth/{uid}/loginSign in as a memberusers:write
POST/projects/newCreate a projectprojects:write
POST/users/{uid}/projects/newCreate a project for a personprojects:write
GET/users/{uid}/projects/allList all of a person's projectsprojects:read
GET/users/{uid}/projectsList a person's projects page by pageprojects:read
GET/projects/{pid}Get a projectprojects:read
PUT/projects/{pid}Update a projectprojects:write
DELETE/projects/{pid}Delete a projectprojects:write
GET/projects/{pid}/dataGet a project's measurementsprojects:read
GET/projects/{pid}/commentsList a project's commentsprojects:read
GET/projects/{pid}/mmpExport a project as .mmpprojects:read
POST/users/{uid}/folders/newCreate a folderprojects:write
GET/users/{uid}/folders/allList a person's foldersprojects:read
GET/folders/{fid}Get a folderprojects:read
PUT/folders/{fid}Update a folderprojects:write
DELETE/folders/{fid}Delete a folderprojects:write
GET/usersList membersusers:read
POST/users/newCreate a memberusers:write
GET/users/{uid}Get a memberusers:read
PUT/users/{uid}Update a memberusers:write
DELETE/users/{uid}Delete a memberusers:write
GET/productsList productsproducts:read
POST/productsCreate a productproducts:write
GET/products/{id}Get a productproducts:read
PUT/products/{id}Update a productproducts:write
DELETE/products/{id}Archive a productproducts:write

Where to go next#