MultiSet
Developer Portal
  • MultiSet Developer Docs
  • Getting Started
    • Changelog
    • VPS SDK : Unity Guide
    • FAQ
  • Basics
    • Maps
      • Mapping Instruction
      • Mapping Planning
      • Mapping Equipment
    • MapSet : Multiple Maps
      • Merging Maps without Overlap
        • Extend a MapSet
      • Merging Maps with Overlap
      • Adjust Map Transformation
    • App Localization
    • Credentials
    • Analytics and Usage
    • Downloads
    • REST API Docs
    • WebXR Integration
    • Third Party Scans
      • Matterport
    • MapFoundry
    • Georeferencing Maps
  • Unity-SDK
    • MultiSet package import
      • Universal 3D (Core) support
    • Sample Scenes
    • On-Cloud Localization
      • Individual Map
      • MapSet (Multiple maps)
        • Hint MapCodes
      • Pose Prior : HintPosition
    • Occlusion
    • NavMesh Navigation
  • Support
  • Native Support
    • iOS Native
Powered by GitBook
On this page

Was this helpful?

  1. Basics

REST API Docs

PreviousDownloadsNextWebXR Integration

Last updated 2 months ago

Was this helpful?

You can use our REST API to fetch and query your VPS Maps to get device Pose with respect to Map local origin, the query API takes query image (encoded as base64 string) and other image metadata.

M2M Auth

GET All VPS maps for an account

VPS Query API

Query your map to get the device position with respect to Map local origin, the query API takes query image (encoded as base64 string) and other image metadata

VPS Query Form API

VPS Multi Image Query API

File download API

APIs to Get MapSet (merged maps)

Get the list of all Mapsets in an account

Get details of all maps of a specific Mapset using MapSetID

Query a VPS map with specific parameters

post
Authorizations
Body
mapCodestringOptional

Unique identifier for the VPS map

Example: MAP-X2P23E7Q35VD
isRightHandedbooleanOptional

Flag to indicate if response pose is in right-handed coordinate system

Example: false
queryImagestring · base64Required

Base64 encoded image data

Example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAIAAADQFY7jAAAgAElEQVR4AaS9+5NdR5Lfh34BjW4AxJMgOTN8zCw5OzHriV2vvFrZDjtCVki2Xt5VaKVdybLClsL+3xz23+DQr9ZPlmO16xmvh
Responses
200
Query successful
application/json
400
Bad request
application/json
401
Unauthorized
application/json
post
POST /v1/vps/map/query HTTP/1.1
Host: api.mulitset.ai
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 388

{
  "mapCode": "MAP-X2P23E7Q35VD",
  "cameraIntrinsics": {
    "fx": 664.3856201171875,
    "fy": 664.3856201171875,
    "px": 478.9782409667969,
    "py": 364.9932861328125
  },
  "isRightHanded": false,
  "resolution": {
    "width": 960,
    "height": 720
  },
  "queryImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAIAAADQFY7jAAAgAElEQVR4AaS9+5NdR5Lfh34BjW4AxJMgOTN8zCw5OzHriV2vvFrZDjtCVki2Xt5VaKVdybLClsL+3xz23+DQr9ZPlmO16xmvh"
}
{
  "poseFound": true,
  "position": {
    "x": 2.482360321597187,
    "y": 0.11936171927197065,
    "z": 8.06609995252609
  },
  "rotation": {
    "x": 0.02949315565629783,
    "y": 0.7673793569590026,
    "z": -0.01740867960782986,
    "w": 0.6402780756491143
  },
  "confidence": 0.459232334365416
}

Retrieve a pre-signed S3 URL for file download

get

Generates a temporary, pre-signed URL for downloading a file from S3

Authorizations
Query parameters
keystringRequired

Unique identifier for the file

Example: 671b454e33d6dc761ca15156/6756c20336a9794c6effce42/Mesh/TexturedMesh.glb
Responses
200
Successfully generated pre-signed URL
application/json
401
Unauthorized - Invalid or expired token
404
File not found
500
Server error
get
GET /v1/file HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Accept: */*
{
  "url": "https://amazonaws.com/671bX-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=%2Faws4_request&X-Amz-Date=20241658753a8c6380ad6d01c217e1ad978d88e2ba6a4&X-Amz-SignedHeaders=host&x-id=GetObject"
}
  • M2M Auth
  • POSTGenerate a token for an M2M client
  • GET All VPS maps for an account
  • GETGet all VPS maps
  • VPS Query API
  • POSTQuery a VPS map with specific parameters
  • VPS Query Form API
  • POSTQuery a VPS map or mapset using form-data
  • VPS Multi Image Query API
  • POSTMulti-image query for a VPS map or map set
  • File download API
  • GETRetrieve a pre-signed S3 URL for file download
  • APIs to Get MapSet (merged maps)
  • GETGet paginated list of MapSets
  • GETRetrieve a Map Set by ID

Get all VPS maps

get

Retrieves a paginated list of VPS maps using limit and page parameters

Authorizations
Query parameters
limitinteger · min: 1 · max: 100Optional

Number of items to return per page

Default: 10Example: 10
pageinteger · min: 1Optional

Page number for pagination

Default: 1Example: 1
Responses
200
VPS maps retrieved successfully
application/json
401
Unauthorized
application/json
get

Get paginated list of MapSets

get

Retrieves a paginated list of MapSets associated with the authenticated user's account

Authorizations
Query parameters
limitinteger · min: 1 · max: 100Optional

Number of items to return per page

Default: 10Example: 10
pageinteger · min: 1Optional

Page number for pagination

Default: 1Example: 1
Responses
200
MapSets retrieved successfully
application/json
400
Bad Request - Invalid parameters
application/json
401
Unauthorized
application/json
500
Internal Server Error - Something went wrong on the server
application/json
get

Retrieve a Map Set by ID

get

Fetches details of a specific map set using its unique ID.

Authorizations
Path parameters
mapSetIdstringRequired

The unique ID of the map set.

Example: 67a5c7fca18f6052c5b21653
Responses
200
Map set details retrieved successfully
application/json
400
Invalid map set ID
application/json
401
Unauthorized - Authorization header missing or invalid
application/json
404
Map set not found
application/json
500
Internal server error
application/json
get

Query a VPS map or mapset using form-data

post
Authorizations
Body
mapCodestringOptional

The map code for the map to query (required if mapSetCode is not provided)

mapSetCodestringOptional

The map set code for the map set to query (required if mapCode is not provided)

isRightHandedstring · enumOptionalExample: truePossible values:
fxstringRequiredExample: 669.535888671875
fystringRequiredExample: 669.535888671875
pxstringRequiredExample: 478.8777160644531
pystringRequiredExample: 364.9244079589844
widthstringRequiredExample: 960
heightstringRequiredExample: 720
queryImagestring · binaryRequired

Image file for multipart requests

Responses
200
Query successful
application/json
Responseobject

Successful query response (structure to be defined)

400
Bad request
application/json
401
Unauthorized
application/json
post
POST /v1/vps/map/query-form HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Content-Type: multipart/form-data
Accept: */*
Content-Length: 210

{
  "mapCode": "text",
  "mapSetCode": "text",
  "isRightHanded": "true",
  "fx": "669.535888671875",
  "fy": "669.535888671875",
  "px": "478.8777160644531",
  "py": "364.9244079589844",
  "width": "960",
  "height": "720",
  "queryImage": "binary"
}
{}
GET /v1/vps/map HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Accept: */*
{
  "data": [
    {
      "id": "66ca3f3b773b18f09e131279",
      "name": "Office Building Map",
      "description": "3D map of the main office building",
      "createdAt": "2024-01-15T10:30:00.000Z",
      "updatedAt": "2024-01-15T10:30:00.000Z",
      "status": "active"
    }
  ],
  "pagination": {
    "totalItems": 45,
    "totalPages": 5,
    "currentPage": 1,
    "itemsPerPage": 10
  }
}
GET /v1/vps/map-set HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Accept: */*
{
  "data": [
    {
      "id": "66ca3f3b773b18f09e131280",
      "name": "Office Buildings Collection",
      "description": "Collection of office building maps",
      "createdAt": "2024-01-15T10:30:00.000Z",
      "updatedAt": "2024-01-15T10:30:00.000Z",
      "status": "active",
      "mapCount": 3
    }
  ],
  "pagination": {
    "totalItems": 12,
    "totalPages": 2,
    "currentPage": 1,
    "itemsPerPage": 10
  }
}

Multi-image query for a VPS map or map set

post

Performs a query using one or more uploaded images, along with camera intrinsics and optional map or map-set identifiers. Supports up to four images in a single request.

Authorizations
Body
isRightHandedstring · enumOptional

Specifies whether the coordinate system is right-handed. Because this is form-data, it's sent as a string ("true" or "false").

Example: truePossible values:
widthstringRequired

The width (in pixels) of the input image(s).

Example: 960
heightstringRequired

The height (in pixels) of the input image(s).

Example: 720
pxstringRequired

The principal point x-coordinate.

Example: 478.838623046875
pystringRequired

The principal point y-coordinate.

Example: 365.346618652343
fxstringRequired

The focal length along x-axis.

Example: 670.4620971679688
fystringRequired

The focal length along y-axis.

Example: 670.4620971679688
mapIdstringOptional

ID of the specific map.

mapCodestringOptional

Code to identify the map.

mapSetIdstringOptional

A unique ID for the map set.

mapSetCodestringOptional

A code to identify the map set.

image1string · binaryRequired

The first image file to be uploaded.

image1_datastringOptional

JSON-encoded metadata for image1 (e.g., position and rotation).

Example: {"x":-5.1772,"y":0.2936,"z":-2.6439,"qx":-0.0185,"qy":0.9949,"qz":-0.0691,"qw":0.0703}
image2string · binaryOptional

The second image file to be uploaded.

image2_datastringOptional

JSON-encoded metadata for image2.

Example: {"x":-3.12,"y":1.01,"z":2.56,"qx":0.0,"qy":0.707,"qz":0.0,"qw":0.707}
image3string · binaryOptional

The third image file to be uploaded.

image3_datastringOptional

JSON-encoded metadata for image3.

Example: {"x":1.23,"y":-0.56,"z":5.0,"qx":-0.0185,"qy":0.9949,"qz":-0.0691,"qw":0.0703}
image4string · binaryOptional

The fourth image file to be uploaded.

image4_datastringOptional

JSON-encoded metadata for image4.

Example: {"x":10.0,"y":-2.0,"z":0.0,"qx":0.0,"qy":1.0,"qz":0.0,"qw":0.0}
Responses
200
Query successful
application/json
400
Bad request
application/json
401
Unauthorized - Missing or invalid token
application/json
404
Map/MapSet not found (if applicable)
application/json
500
Internal server error
application/json
post
POST /v1/vps/map/multi-image-query HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Content-Type: multipart/form-data
Accept: */*
Content-Length: 697

{
  "isRightHanded": "true",
  "width": "960",
  "height": "720",
  "px": "478.838623046875",
  "py": "365.346618652343",
  "fx": "670.4620971679688",
  "fy": "670.4620971679688",
  "mapId": "",
  "mapCode": "",
  "mapSetId": "",
  "mapSetCode": "",
  "image1": "binary",
  "image1_data": "{\"x\":-5.1772,\"y\":0.2936,\"z\":-2.6439,\"qx\":-0.0185,\"qy\":0.9949,\"qz\":-0.0691,\"qw\":0.0703}",
  "image2": "binary",
  "image2_data": "{\"x\":-3.12,\"y\":1.01,\"z\":2.56,\"qx\":0.0,\"qy\":0.707,\"qz\":0.0,\"qw\":0.707}",
  "image3": "binary",
  "image3_data": "{\"x\":1.23,\"y\":-0.56,\"z\":5.0,\"qx\":-0.0185,\"qy\":0.9949,\"qz\":-0.0691,\"qw\":0.0703}",
  "image4": "binary",
  "image4_data": "{\"x\":10.0,\"y\":-2.0,\"z\":0.0,\"qx\":0.0,\"qy\":1.0,\"qz\":0.0,\"qw\":0.0}"
}
{
  "success": true,
  "location": {
    "position": {
      "x": -5.1772,
      "y": 0.2936,
      "z": -2.6439
    },
    "rotation": {
      "qx": -0.0185,
      "qy": 0.9949,
      "qz": -0.0691,
      "qw": 0.0703
    }
  },
  "confidence": 0.89,
  "mapId": "66ca3f3b773b18f09e131279"
}

Generate a token for an M2M client

post

Authenticates a machine-to-machine client using Basic Authentication and returns an access token. The Basic Auth value should be constructed as: Base64(clientId:clientSecret)

Authorizations
Header parameters
UsernamestringRequired

Client ID for authentication

PasswordstringRequired

Client Secret for authentication

AuthorizationstringRequired

Basic authentication header. Format: "Basic " + Base64(clientId:clientSecret)

Example: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Body
stringOptional
Responses
200
Token generated successfully
application/json
400
Bad request
application/json
401
Unauthorized
application/json
403
Forbidden
application/json
post
POST /v1/m2m/token HTTP/1.1
Host: api.multiset.ai
Authorization: text
Username: text
Password: text
Content-Type: text/plain
Accept: */*
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cC.......",
  "expiresOn": "2024-10-22T18:40:54.908Z"
}
GET /v1/vps/map-set/{mapSetId} HTTP/1.1
Host: api.multiset.ai
Authorization: Bearer JWT
Accept: */*
{
  "mapSet": {
    "_id": "67a5c7fca18f6052c5b21653",
    "name": "purva test new 141",
    "accountId": "67192b1b65071c55d950d11f",
    "mapSetCode": "MSET_7J7SUEFVMSV1",
    "status": "active",
    "messages": [],
    "createdAt": "2025-02-07T08:44:44.607Z",
    "updatedAt": "2025-02-07T08:44:44.607Z",
    "mapSetData": [
      {
        "_id": "67a5c7fc58eda5c8bfaedc2e",
        "createdAt": "2025-02-07T08:44:44.614Z",
        "order": 0,
        "relativePose": {
          "position": {
            "x": 0,
            "y": 0,
            "z": 0
          },
          "rotation": {
            "qx": 0,
            "qy": 0,
            "qz": 0,
            "qw": 1
          }
        },
        "updatedAt": "2025-02-07T08:44:44.614Z",
        "map": {
          "_id": "67a4a02ba18f6052c5b20833",
          "accountId": "67192b1b65071c55d950d11f",
          "mapName": "141",
          "status": "active",
          "storage": 66.59728527069092,
          "mapCode": "MAP_XCQWQYKZ26U2",
          "createdAt": "2025-02-06T11:42:35.504Z",
          "updatedAt": "2025-02-07T08:44:44.620Z",
          "mapMesh": {
            "rawMesh": {
              "type": "glb",
              "meshLink": "67192b150d11f/67a4a02b5b20833/Mesh/Mesh.glb"
            },
            "texturedMesh": {
              "type": "glb",
              "meshLink": "67192b1b6d11f/67a4a02ba2c5b20833/Mesh/TexturedMesh.glb"
            }
          },
          "thumbnail": "67192b10d11f/67a4a022c833/RGB/Rgb_20250206114139457.jpg",
          "coordinates": {
            "latitude": 22.89059543609619,
            "longitude": 57.63724517822266,
            "altitude": 901.3638305664062
          }
        }
      }
    ]
  }
}