Kontakt.io Location & Occupancy API

REST and streaming API for Kio Cloud location intelligence — campuses, buildings, floors, rooms, footfall spaces, location images, room/seat/footfall/sensor occupancy, telemetry, device positions and presences, colocations, gateways, and Streams subscriptions and channels for telemetry, position and occupancy events.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kontaktio-location-occupancy-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kontaktio-location-occupancy-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Location & Occupancy
  version: '1.0'
  description: 'Real-time and historical Kio Cloud apps data including location tracking, occupancy, and telemetry.'
  contact:
    name: Kontakt.io Support
    url: 'https://support.kontakt.io'
    email: support@kontakt.io
  termsOfService: 'https://kontakt.io/terms-of-service'
  summary: 'Real-time and historical Kio Cloud apps data including location tracking, occupancy, and telemetry.'
servers:
  - url: 'https://apps.cloud.us.kontakt.io'
    description: 'Kio Cloud US '
  - url: 'https://apps.cloud.uk.kontakt.io'
    description: Kio Cloud UK
paths:
  /v2/locations/campuses:
    get:
      summary: List all campuses
      operationId: get-locations-campuses
      description: |
        Returns a list of all campuses. Resource supports pagination through request parameters.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - schema:
            type: integer
          in: query
          name: id
          description: Filter by campus ID
        - schema:
            type: string
          in: query
          name: name
          description: Filter by name
        - schema:
            type: string
          in: query
          name: description
          description: Filter by description
        - schema:
            type: string
          in: query
          name: buildingName
          description: Filter by the building name
        - $ref: '#/components/parameters/floorName'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campus-List'
              examples:
                All campuses:
                  value:
                    links:
                      - rel: self
                        href: 'http://apps.cloud.us.kontakt.io/v2/locations/campuses?page=0&size=20'
                    content:
                      - id: 93915
                        name: K.io_Lab_fixed
                        address: '3, Stoczniowców, Podgórze, Krakow, 30-709, Poland'
                        description: Krakow Lab
                        lat: 50.0500646
                        lng: 19.9816184
                        buildings:
                          - id: 94194
                            name: Lab
                            address: '3, Stoczniowców, Podgórze, Krakow, 30-709, Poland'
                            description: Krakow Lab
                            floors:
                              - id: 94215
                                name: Lab_floor_prod1
                                height: 17.8
                                width: 14.6
                                properties:
                                  gridWidth: 4
                                  gridBounds:
                                    boundsLat:
                                      north: 22.2
                                      south: -4.3
                                    boundsLng:
                                      east: 23
                                      west: -8.4
                                  gridDensity: 1
                                  outlineCreated: true
                                level: 0
                                xyGeojson:
                                  type: Feature
                                  geometry:
                                    type: Polygon
                                    coordinates:
                                      - - - 0
                                          - 17.8
                                        - - 14.6
                                          - 17.8
                                        - - 14.6
                                          - 0
                                        - - 0
                                          - 0
                                        - - 0
                                          - 17.8
                                  properties: {}
                                imageXyGeojson:
                                  type: Feature
                                  geometry:
                                    type: Polygon
                                    coordinates:
                                      - - - -0.4
                                          - 18.2
                                        - - 14.9
                                          - 18.2
                                        - - 14.9
                                          - -0.3
                                        - - -0.4
                                          - -0.3
                                        - - -0.4
                                          - 18.2
                            lat: 50.050278
                            lng: 19.9820425
                    page:
                      size: 20
                      totalElements: 1
                      totalPages: 1
                      number: 0
      tags:
        - Campuses
      security:
        - api_key: []
    parameters: []
  '/v2/locations/campuses/{id}':
    get:
      summary: Retrieve a campus
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campus'
              examples: {}
          headers: {}
      operationId: get-locations-campuses
      description: |
        Retrieves the details of a single campus by its ID. 

        Supply the unique Campus ID and its corresponding information returned includes the campus buildings, building floors, and each floor's gateway and sensor devices.
      parameters: []
      x-internal: false
      tags:
        - Campuses
      security:
        - api_key: []
    parameters:
      - schema:
          type: string
          example: '93915'
        name: id
        in: path
        required: true
        description: ID of the campus.
  /v2/locations/buildings:
    get:
      summary: List all buildings
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
              examples:
                All Buildings:
                  value:
                    links:
                      - rel: self
                        href: 'http://apps.cloud.us.kontakt.io/v2/locations?page=0&size=20'
                    content:
                      - id: 94194
                        name: Lab
                        address: '3, Stoczniowców, Podgórze, Krakow, 30-709, Poland'
                        description: Krakow Lab
                        floors:
                          - id: 94215
                            name: Lab_floor_prod1
                            height: 17.8
                            width: 14.6
                            properties:
                              gridWidth: 4
                              gridBounds:
                                boundsLat:
                                  north: 22.2
                                  south: -4.3
                                boundsLng:
                                  east: 23
                                  west: -8.4
                              gridDensity: 1
                              outlineCreated: true
                            level: 0
                            xyGeojson:
                              type: Feature
                              geometry:
                                type: Polygon
                                coordinates:
                                  - - - 0
                                      - 17.8
                                    - - 14.6
                                      - 17.8
                                    - - 14.6
                                      - 0
                                    - - 0
                                      - 0
                                    - - 0
                                      - 17.8
                              properties: {}
                            imageXyGeojson:
                              type: Feature
                              geometry:
                                type: Polygon
                                coordinates:
                                  - - - -0.4
                                      - 18.2
                                    - - 14.9
                                      - 18.2
                                    - - 14.9
                                      - -0.3
                                    - - -0.4
                                      - -0.3
                                    - - -0.4
                                      - 18.2
                        campus:
                          id: 93915
                          name: K.io_Lab_fixed
                        lat: 50.050278
                        lng: 19.9820425
                    page:
                      size: 20
                      totalElements: 1
                      totalPages: 1
                      number: 0
      operationId: get-locations-buildings
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/floorName'
        - schema:
            type: string
          in: query
          name: buildingId
          description: Filter by building IDs
        - $ref: '#/components/parameters/name'
        - $ref: '#/components/parameters/description'
      description: |-
        Returns a list of all buildings. 
        Resource supports pagination through request parameters.
      tags:
        - Buildings
      security:
        - api_key: []
    parameters: []
  '/v2/locations/buildings/{id}':
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
        description: ID of the building.
    get:
      summary: Retrieve a building
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
              examples: {}
      operationId: get-v2-locations-buildings-id
      description: Retrieve a single building by ID.
      parameters: []
      tags:
        - Buildings
      security:
        - api_key: []
  /v2/locations/rooms:
    get:
      summary: List all rooms
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rooms'
      operationId: get-locations-rooms
      description: Returns a list of rooms. Resource supports pagination through request parameters.
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/name'
        - schema:
            type: string
          in: query
          name: campusName
          description: Filter by the campus name or one of multiple names
        - schema:
            type: string
          in: query
          description: Filter by room id or one of multiple roomIds
          name: id
        - schema:
            type: string
          in: query
          name: buildingName
          description: Filter by the building name or one of multiple names
      x-extension-2: null
      tags:
        - Rooms
      security:
        - api_key: []
    parameters: []
  /v2/locations/floors:
    get:
      summary: List all floors
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Floors'
      operationId: get-locations-floors
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - schema:
            type: string
          in: query
          name: id
          description: Filter by one or more floor IDs
        - schema:
            type: string
          in: query
          name: name
          description: Filter by one or more floor names
        - schema:
            type: string
          in: query
          name: locationId
          description: Filter by one or more floor location IDs
        - schema:
            type: string
          in: query
          name: locationName
          description: Filter by one or more floor names
        - schema:
            type: string
          in: query
          name: exceptId
          description: Filter out one or more floor IDs
        - schema:
            type: string
          in: query
          name: sourceId
          description: Filter by one or more sourceIds of attached gateways
      description: Retrieve a floor list. Resource supports pagination through request parameters.
      tags:
        - Floors
      security:
        - api_key: []
    parameters: []
  '/v3/locations/images/{type}/{id}':
    get:
      summary: Retrieve location image
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    topologyType:
                      type: string
                    id:
                      type: integer
                    presignedUrl:
                      type: string
                x-examples:
                  example-1:
                    - topologyType: CAMPUS
                      id: 27857
                      presignedUrl: 'http://localhost/images/campus/test1234test/27857'
                    - topologyType: CAMPUS
                      id: 27858
                      presignedUrl: 'http://localhost/images/campus/test1234test/27858'
              examples:
                example-1:
                  value:
                    - topologyType: CAMPUS
                      id: 27857
                      presignedUrl: 'http://localhost/images/campus/test1234test/27857'
                    - topologyType: CAMPUS
                      id: 27858
                      presignedUrl: 'http://localhost/images/campus/test1234test/27858'
      operationId: get-v3-locations-images
      description: |-
        Returns a target URL to download the images of the ids requested by topology type (Smart Location campus, building, floor). Floor type results in the floor plan image.

        URL is valid for 24 hours.

        Whenever possible, request multiple ids to limit the number of calls and decrease your latency.
      security:
        - api_key: []
      parameters: []
      tags:
        - Location Images
    parameters:
      - schema:
          type: string
          enum:
            - CAMPUS
            - BUILDING
            - FLOOR
        name: type
        in: path
        description: Type of topology item.
        required: true
      - schema:
          type: integer
          example: '177214, 187564'
        name: id
        in: path
        required: true
        description: Comma-separated list of each topology identifier (id).
  /v2/locations/room-sensors:
    get:
      summary: List all room sensors
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Room-Sensors'
              examples:
                example-1:
                  value:
                    “links”:
                      - “rel”: “first”
                        “href”: '“https://apps-api.test.kontakt.io/v2/locations/room-sensors?page=0&size=20”'
                      - “rel”: “self”
                        “href”: '“https://apps-api.test.kontakt.io/v2/locations/room-sensors?page=0&size=20”'
                      - “rel”: “next”
                        “href”: '“https://apps-api.test.kontakt.io/v2/locations/room-sensors?page=1&size=20”'
                      - “rel”: “last”
                        “href”: '“https://apps-api.test.kontakt.io/v2/locations/room-sensors?page=1&size=20”'
                    “content”:
                      - “id”: 2542804
                        “x”: 2.25
                        “y”: 1.65625
                        “name”: “XXX”
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2542666
                        “status”: “Unassigned”
                      - “id”: 2542800
                        “x”: 2.90625
                        “y”: 12.171875
                        “name”: “XXXX”
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2541937
                        “status”: “Unassigned”
                      - “id”: 2448055
                        “x”: 11.4375
                        “y”: 11.375
                        “trackingId”: '“ef:d1:f5:e3:fb:cf”'
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Static”
                        “room”:
                          “id”: 2448035
                        “status”: “Assigned”
                      - “id”: 2542797
                        “x”: 6.34375
                        “y”: 1.046875
                        “name”: “Test XXX1"
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2447764
                        “status”: “Unassigned”
                      - “id”: 2447779
                        “x”: 2.600747
                        “y”: 9.630371
                        “trackingId”: '“f1:cf:09:22:dd:1f”'
                        “type”: “Static”
                        “room”:
                          “id”: 2447763
                        “status”: “Assigned”
                      - “id”: 2542796
                        “x”: 3.4217899999999997
                        “y”: 5.67749
                        “trackingId”: '“f6:02:58:91:04:ab”'
                        “name”: “Test 3"
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2446879
                        “status”: “Assigned”
                      - “id”: 2542795
                        “x”: 2.8748800495754185
                        “y”: 5.75
                        “name”: “TEST1 EMPTY BEAM”
                        “inbounds”: []
                        “outbounds”: []
                        “room”:
                          “id”: 2446879
                        “status”: “Unassigned”
                      - “id”: 2542775
                        “x”: 4.099009622190768
                        “y”: 5.949553771661555
                        “name”: “Test”
                        “inbounds”: []
                        “outbounds”: []
                        “room”:
                          “id”: 2446879
                        “status”: “Unassigned”
                      - “id”: 2542794
                        “name”: “Test”
                        “inbounds”: []
                        “outbounds”: []
                        “room”:
                          “id”: 2446879
                        “status”: “Unassigned”
                      - “id”: 2542774
                        “name”: “Test”
                        “inbounds”: []
                        “outbounds”: []
                        “room”:
                          “id”: 2446878
                        “status”: “Unassigned”
                      - “id”: 2447186
                        “x”: 10.125
                        “y”: 8.58374
                        “trackingId”: '“fd:5b:1e:06:70:14”'
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Static”
                        “room”:
                          “id”: 2446878
                        “status”: “Assigned”
                      - “id”: 2542801
                        “x”: 9.46875
                        “y”: 2.067871
                        “name”: “RRRR 123"
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2446875
                        “status”: “Unassigned”
                      - “id”: 2542799
                        “x”: 10.375
                        “y”: 1.21875
                        “name”: “Test 4444 XXX”
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2446875
                        “status”: “Unassigned”
                      - “id”: 2542798
                        “x”: 6.1764405
                        “y”: 17.031886
                        “name”: “XXX 123123 sadf asdf “
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Traffic”
                        “room”:
                          “id”: 2441277
                        “status”: “Unassigned”
                      - “id”: 2447155
                        “x”: 8.40625
                        “y”: 15.125071803066383
                        “trackingId”: '“be:a2:80:01:02:03”'
                        “type”: “Static”
                        “room”:
                          “id”: 2441276
                        “status”: “Assigned”
                      - “id”: 2540974
                        “x”: 9.982244
                        “y”: 16.8439795
                        “trackingId”: '“cc:b4:5d:db:51:49"'
                        “type”: “Static”
                        “room”:
                          “id”: 2441276
                        “status”: “Assigned”
                      - “id”: 2446559
                        “x”: 11.688361592803698
                        “y”: 18.875
                        “trackingId”: '“c5:0d:7f:1b:97:27”'
                        “type”: “Static”
                        “room”:
                          “id”: 2441276
                        “status”: “Assigned”
                      - “id”: 2447175
                        “x”: 8.8125
                        “y”: 18.90625
                        “trackingId”: '“f0:1b:f7:e0:d3:e9"'
                        “type”: “Static”
                        “room”:
                          “id”: 2441276
                        “status”: “Assigned”
                      - “id”: 2542776
                        “x”: 3.9375
                        “y”: 18.65625
                        “type”: “Traffic”
                        “room”:
                          “id”: 2441275
                        “status”: “Unassigned”
                      - “id”: 2436974
                        “x”: 19.4
                        “y”: 27.1
                        “trackingId”: '“cb:68:7b:d9:b3:c7"'
                        “inbounds”: []
                        “outbounds”: []
                        “type”: “Static”
                        “room”:
                          “id”: 2436755
                        “status”: “Assigned”
                    “page”:
                      “size”: 20
                      “totalElements”: 32
                      “totalPages”: 2
                      “number”: 0
      operationId: get-v2-locations-room-sensors
      description: Returns a list of sensors located in all rooms.
      tags:
        - Rooms
      security:
        - api_key: []
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
  /v3/presences:
    get:
      summary: Retrieve devices present in a location
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Presence-Device'
      operationId: get-presences
      description: 'Returns the devices currently present in a location (campus, building, floor, or room).'
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/floorId'
        - $ref: '#/components/parameters/buildingId'
        - $ref: '#/components/parameters/trackingId'
        - schema:
            type: number
          in: query
          name: roomId
          description: Filter by one or more Room Ids (separated by comma).
        - $ref: '#/components/parameters/campusId'
      tags:
        - Presences
      security:
        - api_key: []
    parameters: []
  /v3/presences/history:
    get:
      summary: Retrieve device presence history for a location
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Presence-History-Devices'
        '429':
          $ref: '#/components/responses/error-429'
      operationId: get-presences-history
      description: 'Returns the history of devices present in a location. '
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/floorId'
        - $ref: '#/components/parameters/buildingId'
        - $ref: '#/components/parameters/startTime'
        - $ref: '#/components/parameters/endTime'
        - schema:
            type: string
          in: query
          name: roomId
          description: Filter by room ID(s).
        - schema:
            type: string
            example: 'd6:3c:5d:b2:7c:a9'
          in: query
          name: trackingId
          description: 'Filter by one or more tracking IDs (device MAC address) <br> alpha characters: lowercase required'
          required: true
      tags:
        - Presences
      security:
        - api_key: []
    parameters: []
  /v2/positions:
    get:
      summary: Retrieve device last position
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Position-Device'
      operationId: get-positions
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - schema:
            type: number
            example: 94215
          in: query
          name: floorId
          description: Filter by one or multiple floor ID(s).
        - schema:
            type: number
            example: 94194
          in: query
          name: buildingId
          description: 'Filter by one or multiple building ID(s). '
        - schema:
            type: number
            example: 93915
          in: query
          name: campusId
          description: Filter by one or multiple campus ID(s).
        - schema:
            type: string
            example: 'dd:24:d0:82:3d:7c'
          in: query
          name: trackingId
          description: 'Filter by one or multiple tracking IDs (MAC address) of a device; alpha characters: lowercase required'
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
              - 'null'
          in: query
          name: lost
          description: Filter by lost flag.
      description: |
        Returns the last postion of a Kontakt.io Tag device (BLE beacon) by trackingId (MAC address) or multiple trackingIds.
      tags:
        - Positions
      security:
        - api_key: []
    parameters: []
  /v2/positions/history:
    get:
      summary: Retrieve device position history
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Position-Device-History'
        '429':
          $ref: '#/components/responses/error-429'
      operationId: get-positions-history
      description: |-
        Returns the location history for a device; by trackingId (MAC address). 

        > **IMPORTANT**
        > <br> - **trackingID** must be in **all lower case** (example: d6:3c:5d:b2:7c:a9) <br>
        > <br> - If **startTime** is empty, automatically sets startTime to **current time -15 minutes** <br>
        > <br> - **endTime** is not required, but can used it to limit the displayed data <br>
        > <br> - Difference between **startTime** to **endTime** cannot exceed **7 days** <br>
        > <br> - **Size** parameter specifies how many records will be displayed (20 by default). If there are records that haven't been displayed because of the size limit, the response will be paginated - it will contain links array, with a link to the next page, and page.hasNext value will be True.<br>
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/floorId'
        - schema:
            type: string
            example: '2020-11-27T08:00:00.000000Z'
          in: query
          name: startTime
          description: ISO 8601 Timestamp - if not provided defaults to time at 15 minutes ago
        - schema:
            type: string
            example: ' 2020-11-27T08:45:00.000000Z'
          in: query
          name: endTime
          description: Historical positions end time (ISO 8601 Timestamp) - difference between startTime and endTime cannot exceed 7 days
        - $ref: '#/components/parameters/lost'
        - schema:
            type: string
            example: 'd6:3c:5d:b2:7c:a9'
          in: query
          name: trackingId
          description: 'Filter by one or more tracking IDs (device MAC address) <br> alpha characters: lowercase required'
          required: true
      tags:
        - Positions
      security:
        - api_key: []
    parameters: []
  /v3/telemetry:
    get:
      summary: Retrieve telemetry by Tracking ID
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Telemetry'
              examples:
                Portal Beam:
                  value:
                    content:
                      - trackingId: 'fd:45:0a:68:25:7d'
                        timestamp: '2022-03-20T23:39:00Z'
                        batteryLevel: 99
                        channel: 38
                        humidity: 18
                        lightIntensity: 0
                        rssi: -62
                        sourceId: 12Bh000T
                        temperature: 19.226562
                        airQuality: 125
                        roomNumber: 220
                        numberOfPeopleDetected: 0
                        secondsSincePeopleDetection: 13
    

# --- truncated at 32 KB (327 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kontaktio/refs/heads/main/openapi/kontaktio-location-occupancy-openapi.yml