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
- Fetch a list of users daily positioning session identifiers (sdkSetupId) and the related metadata.
- Using the sdkSetupIds, make requests to get session summaries and geolocation data.
- 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" }, ]