REST API Docs

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

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
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 All VPS maps for an account

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
get
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
  }
}

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

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
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
}

VPS Query Form API

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)

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"
}
{}

VPS Multi Image Query API

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
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"
}

File download API

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
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"
}

APIs to Get MapSet (merged maps)

Get the list of all Mapsets in an account

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
get
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
  }
}

Get details of all maps of a specific Mapset using MapSetID

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
get
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
          }
        }
      }
    ]
  }
}

Last updated

Was this helpful?