IndoorAtlas Data REST API allows to access user's positioning data:


Conditions for Usage / Data Storage Opt-In


You can only get data of those positioning sessions from the Data API that have been created using an Apikey that has opt-in for storing data. Please see more in Creating Applications and API Keys.


Usage

  1. Fetch a list of users daily positioning session identifiers (sdkSetupId) and the related metadata. 
  2. Using the sdkSetupIds, make requests to get session summaries and geolocation data.
  3. Metadata includes venue identities (venueIds), i.e., the venues user has visited during the positioning session. See more about accessing Venue metadata from Venue REST API.


API Keys

You need to create an API key with Data API scope enabled.  Use that as the key query string parameter in all requests to Data API. See details in Creating Applications and API Keys


Rate Limit
The default Data API rate limit is 10000 requests per hour. If you think this is not enough for your application, please contact our support. 


Mapping TraceId from SDK to SDK Setup ID


In your app you can request a TraceId which identifies the user positioning session (from initializing the SDK to tearing down the SDK). You can map the TraceID to SDKSetupId, by taking the UUID part of the TraceID.


Example:

TraceID : a74d626e-4c50-11ec-908a-516c56d128a2.1637666982962.206
--> SDKSetupID: a74d626e-4c50-11ec-908a-516c56d128a2





Examples


List of Positioning Sessions for a day


Requesting a list of daily sdk setup identities (sdkSetupId) and related metadata of sessions for given day (year/month/day) and apikey ($APIKEY).


curl "https://data-api.indooratlas.com/public/v1/sdk-sessions/2018/9/1?key=$APIKEY"


Response


[
    {
        "apikeyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "bundleId": "com.example.app",
        "idaUuid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "sdkSetupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "venueIds": [
            "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
        ]
    },
    {
        "apikeyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "bundleId": "com.example.app",
        "idaUuid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "sdkSetupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "venueIds": [
            "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
        ]
    }
]


Fetching Session Summary with SdkSetupId


Session summary is a very useful tool to filter the amount of data you need to download for your use case. 


For example, consider a simple case where you have 

  • Multiple venues
  • Multiple apps
  • Android and iOS users


on your IndoorAtlas account.  If you'd want to analyze only iOS user data of App "NN" who where positioned on the 2nd floor of building "A", the session summary would help you to filter and select only the interesting sessions for full data download. 


curl "https://data-api.indooratlas.com/public/v1/sdk-sessions/{sdkSetupId}/summary?key={Data API key}"


Response


Note that the response contains a list of issues which should be empty. If you see some items in the issue list, it's likely that the positioning performance was not the best possible in this session.


You can find more information about all the issues in this Guide.


{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
  "start": "2025-01-11T11:39:13.824Z",
  "end": "2025-01-11T13:16:20.081Z",
  "client": {
    "sdk": {
      "version": "3.4.0"
    },
    "bundle": {
      "id": "com.indooratlas.android.apps.jaywalker",
      "version": "2.3.996-GA"
    },
    "platform": {
      "os": "ANDROID",
      "osVersion": "12",
      "manufacturer": "Xiaomi",
      "device": "picasso",
      "product": "picasso",
      "model": "Redmi K30 5G"
    }
  },
  "contexts": {
    "floorPlan": [
      "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
    ],
    "venue": [
      "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
    ]
  },
  "analysis": {
    "issues": [
      {
        "name": "oldSdkVersion"
      },
      {
        "name": "missingBeaconInputs"
      }
    ]
  }
}



Fetching Data of Session with SdkSetupId


Requesting session event data for given sdk setup id ($SDK_SETUP_ID) and user's apikey ($APIKEY). An optional query parameter (newerThan) can be given to request only events newer than given time (epoch time in seconds). This is useful for e.g. dashboards that only require the latest data for each device.


curl "https://data-api.indooratlas.com/public/v1/sdk-sessions/$SDK_SETUP_ID/events?key=$APIKEY"



curl "https://data-api.indooratlas.com/public/v1/sdk-sessions/$SDK_SETUP_ID/events?key=$APIKEY&newerThan=1587038568"


Response


[
    {
        "content": {
            "context": {
                "indooratlas": {
                    "floorPlan": {
                        "id": null
                    },
                    "venue": {
                        "id": null
                    }
                }
            },
            "location": {
                "accuracy": 34,
                "altitude": 0,
                "bearing": 0,
                "coordinates": {
                    "lat": 65.0607161,
                    "lon": 25.4407358
                },
                "floorCertainty": 0.3333333432674408,
                "floorNumber": 0
            }
        },
        "ts": "2018-09-01T06:27:53.226Z",
        "type": "OUTPUT"
    },
    {
        "content": {
            "context": {
                "indooratlas": {
                    "floorPlan": {
                        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
                    },
                    "venue": {
                        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
                    }
                }
            },
            "location": {
                "accuracy": 24,
                "altitude": 12,
                "bearing": 200.9311065673828,
                "coordinates": {
                    "lat": 65.06072753049021,
                    "lon": 25.440664564774256
                },
                "floorCertainty": 0.9601538181304932,
                "floorNumber": 3
            }
        },
        "ts": "2018-09-01T06:27:53.240Z",
        "type": "OUTPUT"
    },
    {
        "content": {
            "location": {
                "accuracy": 16,
                "altitude": 12,
                "bearing": 146.44210815429688,
                "coordinates": {
                    "lat": 65.0607469870066,
                    "lon": 25.440710648741646
                },
                "floorCertainty": 0.9996431469917297,
                "floorNumber": 3
            }
        },
        "ts": "2018-09-01T06:27:54.072Z",
        "type": "OUTPUT"
    },
]