Pemberton Digital API Documentation (v1.0)

Download OpenAPI specification:

Pemberton Digital API

The Pemberton Digital API enables programmatic access to sensor data collected by Pemberton Digital devices.

Please refer to the Terms of Service before using this service. For support, please contact your account manager.

Creating an API key

You must be a registered user to access the API, with Pemberton Digital sensors deployed in your environment. To purcase sensors or register for an account, please contact sales@pemberton.digital for more information.

Access to the API is controlled via an API key, which can be obtained from the Pemberton Digital dashboard at https://app.pemberton.digital/. Once logged in, navigate to Organisation Settings -> API Keys to create and manage your API keys.

Send the API key in the Authorization header of each request, using the Bearer auth scheme:

curl --request GET \
     --url https://api.pemberton.digital/client/URL \
     --header 'Authorization: Bearer xxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' \
     --header 'Accept: application/json'

Available Data

Return a list of available organisations and sites that this client may query.

Authorizations:
Pemberton API key

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site

Site Footfall Entries

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Footfall Entries Calendar Week

Return calendar-week footfall data for the most recently completed week.

Always returns exactly one week of data (Monday-Sunday) for the previous complete calendar week. If average > 1, returns the bucket-by-bucket average of the previous n weeks.

Authorizations:
Pemberton API key
query Parameters
bucket_interval
integer (Bucket Interval)
Default: 60

The bucket size in minutes.

average
integer (Average)
Default: 1

Number of previous weeks to average. Defaults to 1 (no averaging).

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Footfall Entries Total

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries, and the total count over the requested time range is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

precise_counts
boolean (Precise Counts)
Default: false

If false, return a pair of numbers indicating the minimum and maximum possible values based on the expected sensor error rate. This response is intended for dashboard display. If true, return the exact number of entries recorded.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
[
  • 25,
  • 30
]

Site Footfall Entries Percentchange

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries over the requested period, and the percentage change (% increase or % decrease) on the previous period is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
92.3076923076923

Site Occupancy

Return occupancy counts over time for a site. For each bucket interval, the average number of people seen over the bucket is individually calculated for each device with capability customer flow but without capability entry/exit tracking.

The per-device averages are then summed to produce a site-wide occupancy value for each bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Occupancy Scaled

Return occupancy counts over time for a site. For each bucket interval, the average number of people seen over the bucket is individually calculated for each device with capability customer flow but without capability entry/exit tracking.

The per-device averages are then summed to produce a site-wide occupancy value for each bucket.

Finally, the series is scaled so the minimum series value is equal to the 10th percentile of the trailing 5 periods, and the maximum value is equal to the 95th percentile, and the output value is normalised to a floating-point number between 0 and 100.

This endpoint is intended for use as a high-level "is it more or less busy than usual" metric; busy and quiet periods will be indicated on the chart.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Zone Occupancy

Return occupancy data grouped by zone. Each zone returns a time-series of average occupancy values across all devices configured for that zone.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Zone Path Stats

Return path statistics grouped by zone. Analyzes all tracked paths at the site and calculates how many unique paths entered each zone and the total number of path points within each zone.

This is a long-running endpoint that uses keepalive streaming for large datasets.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Site Queue Length

Return queue length data for a site. The occupancy of each device with the QUEUE capability at the site is averaged over each bucket, then summed across all devices.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Queue Time

Return average time spent in the site queue. Calculated by combining queue length data with exit counts to derive average queue time in minutes.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Wait

Return wait time data for a site. Devices with customer flow capability but without entry/exit tracking are used to calculate average wait time based on occupancy divided by entries.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Heatmap Endpoint

Return site-wide heatmap aggregated across all devices. Device heatmaps are transformed to floorplan coordinates, weighted by distance, and aggregated onto a common grid. The result is scaled to 0-100 range for visualization.

Optionally apply logarithmic scaling for better visualization of low-intensity areas.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

grid_x
required
integer (Grid X)

The number of grid squares on the x axis.

grid_y
required
integer (Grid Y)

The number of grid squares on the y axis.

scaling
number (Scaling)
Default: 1

Scaling multiplier: all values will be scaled by this amount, for consistent comparison between time ranges.

offset
number (Offset)
Default: 0

Scaling offset: all values will be offset by this amount, for consistent comparison between time ranges.

log
boolean (Log)
Default: false

Use a logarithmic scale.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "scaling": 2.5,
  • "offset": -1.2,
  • "data": [
    ]
}

Site Zones Dwell

Return total dwell intensity for each zone. Generates a site-wide heatmap on a 100x100 grid, then sums the values within each zone's boundary to calculate zone-specific dwell metrics.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": 3847.2,
  • "aquarium": 2156.8,
  • "entrance": 5234.1
}

Site Paths Sampled Endpoint

Return path tracking data for all devices at a site, transformed to floorplan coordinates. Device paths are scaled, rotated, and translated to align with the site floorplan layout.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • [
    ],
  • [
    ],
  • [
    ]
]

Site Seat Occupancy

Get average occupancy for each seat at the site, bucketed by time intervals.

Args: site: Site slug/name organisation: Organisation code since: Start timestamp (unix timestamp in seconds) until: End timestamp (unix timestamp in seconds) bucket_interval: Bucket size in minutes (default 5)

Returns: List of buckets with average occupancy per seat

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 0

The minimum number of minutes a seat must be occupied to be included in the results.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Site Total Seat Occupancy

Get time series of total occupied seats at the site, bucketed by time intervals.

Returns list of {"x": timestamp, "y": count} where timestamp is in Europe/London timezone and count is the number of unique occupied seats in that bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Total Seat Occupancy By Type

Get time series of total occupied seats at the site grouped by seat type, bucketed by time intervals.

Each seat type returns a separate time series showing the count of occupied seats of that type. Seats without a seat type are grouped under the "none" key.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "desk": [
    ],
  • "meeting_room": [
    ]
}

Site Seat Occupancy Percent

Return time series of seat occupancy as a percentage.

Uses the same hysteresis-based span calculation as average-stay-length to handle intermittent occupancy data. For each seat, computes occupied spans using min_occupied_minutes and min_unoccupied_minutes thresholds. Then for each bucket, calculates the percentage of seats that have spans overlapping that bucket.

This avoids the issue where raw 1-minute rollups showing intermittent occupancy (1/0/0/1/0/1) would incorrectly show low occupancy - hysteresis treats this as a single continuous occupied span.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 2

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Average Stay Length

Calculate average stay length for seats at a site over time.

Converts 1-minute rollup data into occupied spans using hysteresis thresholds, then calculates average span length for each bucket. Returns Europe/London timezone.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

Minimum consecutive minutes to consider a seat occupied.

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 2

Minimum consecutive minutes to consider a seat unoccupied.

min_span_length
integer (Min Span Length)
Default: 0

Minimum span length in minutes to include in calculations. Spans shorter than this are discarded. Default 0 (disabled).

include_ongoing
boolean (Include Ongoing)
Default: false

If true, include spans still ongoing at query end (truncated to query end time). If false, only completed spans are included. Default false.

debug
boolean (Debug)
Default: false

If true, include raw span data for each bucket in the response for debugging.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Site Average Group Size

Calculate average group size for occupied seats at a site over time.

For each time bucket, this endpoint calculates group statistics based on seat occupancy. A "group" is defined as:

  • For seats not in a SeatGroup: Each occupied seat is a group of size 1
  • For seats in a SeatGroup: The group size is the number of occupied seats in that SeatGroup

Returns time-series data with total number of groups and min/max/avg/median group sizes per bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Site Metrics Summary

Return all key site metrics in a single API call.

Combines total footfall, footfall percentage change, and seat occupancy metrics into a single response, reducing the number of API calls required for report generation.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 1

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 6

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
{
  • "site": "liverpool-street",
  • "total_footfall": 1234,
  • "footfall_percent_change": 12.5,
  • "seat_metrics": {
    },
  • "period": {
    }
}

Site Entries Weekday Averages

Return pre-calculated average footfall by weekday for a historical period.

Eliminates the need for the dashboard to fetch 56+ days of raw data and calculate averages client-side. Averages are calculated as: sum of all entries on that weekday divided by count of that weekday in the period.

Authorizations:
Pemberton API key
query Parameters
weeks
integer (Weeks) [ 1 .. 52 ]
Default: 8

Number of historical weeks to average (max: 52).

before
integer (Before)

Unix timestamp - calculate averages for weeks before this date. Defaults to current time.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
{
  • "weekday_averages": {
    },
  • "period": {
    },
  • "sample_counts": {
    }
}

Footfall

Site Footfall Entries

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Footfall Entries Calendar Week

Return calendar-week footfall data for the most recently completed week.

Always returns exactly one week of data (Monday-Sunday) for the previous complete calendar week. If average > 1, returns the bucket-by-bucket average of the previous n weeks.

Authorizations:
Pemberton API key
query Parameters
bucket_interval
integer (Bucket Interval)
Default: 60

The bucket size in minutes.

average
integer (Average)
Default: 1

Number of previous weeks to average. Defaults to 1 (no averaging).

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Footfall Entries Total

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries, and the total count over the requested time range is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

precise_counts
boolean (Precise Counts)
Default: false

If false, return a pair of numbers indicating the minimum and maximum possible values based on the expected sensor error rate. This response is intended for dashboard display. If true, return the exact number of entries recorded.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
[
  • 25,
  • 30
]

Site Footfall Entries Percentchange

Return footfall data for a site. All devices in the site with capability entry/exit tracking are summed for entries over the requested period, and the percentage change (% increase or % decrease) on the previous period is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
92.3076923076923

Organisation Footfall Entries

Return footfall data for an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Organisation Footfall Entries Total

Return footfall data for an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries, and the total count across all sites at the organisation over the requested time range is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

precise_counts
boolean (Precise Counts)
Default: false

If false, return a pair of numbers indicating the minimum and maximum possible values based on the expected sensor error rate. This response is intended for dashboard display. If true, return the exact number of entries recorded.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
[
  • 25,
  • 30
]

Organisation Footfall Entries Percentchange

Return footfall data across all sites at an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries over the requested period, and the percentage change (% increase or % decrease) on the previous period is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
92.3076923076923

Site Entries Weekday Averages

Return pre-calculated average footfall by weekday for a historical period.

Eliminates the need for the dashboard to fetch 56+ days of raw data and calculate averages client-side. Averages are calculated as: sum of all entries on that weekday divided by count of that weekday in the period.

Authorizations:
Pemberton API key
query Parameters
weeks
integer (Weeks) [ 1 .. 52 ]
Default: 8

Number of historical weeks to average (max: 52).

before
integer (Before)

Unix timestamp - calculate averages for weeks before this date. Defaults to current time.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
{
  • "weekday_averages": {
    },
  • "period": {
    },
  • "sample_counts": {
    }
}

Organisation

Organisation Footfall Entries

Return footfall data for an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Organisation Footfall Entries Total

Return footfall data for an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries, and the total count across all sites at the organisation over the requested time range is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

precise_counts
boolean (Precise Counts)
Default: false

If false, return a pair of numbers indicating the minimum and maximum possible values based on the expected sensor error rate. This response is intended for dashboard display. If true, return the exact number of entries recorded.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
[
  • 25,
  • 30
]

Organisation Footfall Entries Percentchange

Return footfall data across all sites at an organisation. All devices in the organisation with capability entry/exit tracking are summed for entries over the requested period, and the percentage change (% increase or % decrease) on the previous period is returned.

An entry is recorded when a tracked person crosses any configured virtual gate on a device in the positive direction.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
92.3076923076923

Organisation Occupancy

Return occupancy data for all sites in an organisation. All devices with customer flow capability across all sites are aggregated for occupancy.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Organisation Wait

Return wait time data for all sites in an organisation. Aggregates wait time across all devices with customer flow capability.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Organisation Metrics Summary

Return metrics for the entire organisation AND all individual sites in a single API call.

This is the primary endpoint for report generation, eliminating the need to call the site endpoint repeatedly. Organisation-level seat metrics are weighted averages across all sites with seats.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 1

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 6

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "organisation": {
    },
  • "sites": [
    ],
  • "period": {
    }
}

Occupancy

Site Occupancy

Return occupancy counts over time for a site. For each bucket interval, the average number of people seen over the bucket is individually calculated for each device with capability customer flow but without capability entry/exit tracking.

The per-device averages are then summed to produce a site-wide occupancy value for each bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Occupancy Scaled

Return occupancy counts over time for a site. For each bucket interval, the average number of people seen over the bucket is individually calculated for each device with capability customer flow but without capability entry/exit tracking.

The per-device averages are then summed to produce a site-wide occupancy value for each bucket.

Finally, the series is scaled so the minimum series value is equal to the 10th percentile of the trailing 5 periods, and the maximum value is equal to the 95th percentile, and the output value is normalised to a floating-point number between 0 and 100.

This endpoint is intended for use as a high-level "is it more or less busy than usual" metric; busy and quiet periods will be indicated on the chart.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Zone Occupancy

Return occupancy data grouped by zone. Each zone returns a time-series of average occupancy values across all devices configured for that zone.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Organisation Occupancy

Return occupancy data for all sites in an organisation. All devices with customer flow capability across all sites are aggregated for occupancy.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Zones

Zone Occupancy

Return occupancy data grouped by zone. Each zone returns a time-series of average occupancy values across all devices configured for that zone.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Zone Path Stats

Return path statistics grouped by zone. Analyzes all tracked paths at the site and calculates how many unique paths entered each zone and the total number of path points within each zone.

This is a long-running endpoint that uses keepalive streaming for large datasets.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Site Zones Dwell

Return total dwell intensity for each zone. Generates a site-wide heatmap on a 100x100 grid, then sums the values within each zone's boundary to calculate zone-specific dwell metrics.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": 3847.2,
  • "aquarium": 2156.8,
  • "entrance": 5234.1
}

Flows

Zone Path Stats

Return path statistics grouped by zone. Analyzes all tracked paths at the site and calculates how many unique paths entered each zone and the total number of path points within each zone.

This is a long-running endpoint that uses keepalive streaming for large datasets.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": {
    },
  • "aquarium": {
    }
}

Device Paths

Return raw path tracking data for a specific device. Each path represents the trajectory of a tracked person through the sensor's field of view.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

device
required
string (Device)
Examples: device=a2bcd

The 5-character device code, printed on the back of the device.

Responses

Response samples

Content type
application/json
[
  • [
    ],
  • [
    ],
  • [
    ]
]

Site Paths Sampled Endpoint

Return path tracking data for all devices at a site, transformed to floorplan coordinates. Device paths are scaled, rotated, and translated to align with the site floorplan layout.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • [
    ],
  • [
    ],
  • [
    ]
]

Queuing

Site Queue Length

Return queue length data for a site. The occupancy of each device with the QUEUE capability at the site is averaged over each bucket, then summed across all devices.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Queue Time

Return average time spent in the site queue. Calculated by combining queue length data with exit counts to derive average queue time in minutes.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Wait

Return wait time data for a site. Devices with customer flow capability but without entry/exit tracking are used to calculate average wait time based on occupancy divided by entries.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Organisation Wait

Return wait time data for all sites in an organisation. Aggregates wait time across all devices with customer flow capability.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Device

Device Heatmap

Return averaged heatmap for a specific device. Heatmap grid squares are averaged over the specified time interval. Values are scaled relative to all devices at the site for consistent comparison, with sensor data automatically decompressed from logarithmic scale.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

device
required
string (Device)
Examples: device=a2bcd

The 5-character device code, printed on the back of the device.

Responses

Response samples

Content type
application/json
[
  • 0,
  • 2.3,
  • 5.1,
  • 3.4,
  • 1.2,
  • 0.8,
  • 1.5,
  • 8.2,
  • 12.4,
  • 9.3,
  • 4.1,
  • 2,
  • 0.3,
  • 3.7,
  • 7.8,
  • 6.5,
  • 2.9,
  • 1.1,
  • 0.1,
  • 1.4,
  • 4.2,
  • 3.8,
  • 1.7,
  • 0.6,
  • 0,
  • 0.9,
  • 2.1,
  • 1.9,
  • 0.8,
  • 0.3,
  • 0,
  • 0.2,
  • 0.5,
  • 0.4,
  • 0.2,
  • 0.1
]

Device Paths

Return raw path tracking data for a specific device. Each path represents the trajectory of a tracked person through the sensor's field of view.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

device
required
string (Device)
Examples: device=a2bcd

The 5-character device code, printed on the back of the device.

Responses

Response samples

Content type
application/json
[
  • [
    ],
  • [
    ],
  • [
    ]
]

Dwell

Device Heatmap

Return averaged heatmap for a specific device. Heatmap grid squares are averaged over the specified time interval. Values are scaled relative to all devices at the site for consistent comparison, with sensor data automatically decompressed from logarithmic scale.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

device
required
string (Device)
Examples: device=a2bcd

The 5-character device code, printed on the back of the device.

Responses

Response samples

Content type
application/json
[
  • 0,
  • 2.3,
  • 5.1,
  • 3.4,
  • 1.2,
  • 0.8,
  • 1.5,
  • 8.2,
  • 12.4,
  • 9.3,
  • 4.1,
  • 2,
  • 0.3,
  • 3.7,
  • 7.8,
  • 6.5,
  • 2.9,
  • 1.1,
  • 0.1,
  • 1.4,
  • 4.2,
  • 3.8,
  • 1.7,
  • 0.6,
  • 0,
  • 0.9,
  • 2.1,
  • 1.9,
  • 0.8,
  • 0.3,
  • 0,
  • 0.2,
  • 0.5,
  • 0.4,
  • 0.2,
  • 0.1
]

Site Heatmap Endpoint

Return site-wide heatmap aggregated across all devices. Device heatmaps are transformed to floorplan coordinates, weighted by distance, and aggregated onto a common grid. The result is scaled to 0-100 range for visualization.

Optionally apply logarithmic scaling for better visualization of low-intensity areas.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

grid_x
required
integer (Grid X)

The number of grid squares on the x axis.

grid_y
required
integer (Grid Y)

The number of grid squares on the y axis.

scaling
number (Scaling)
Default: 1

Scaling multiplier: all values will be scaled by this amount, for consistent comparison between time ranges.

offset
number (Offset)
Default: 0

Scaling offset: all values will be offset by this amount, for consistent comparison between time ranges.

log
boolean (Log)
Default: false

Use a logarithmic scale.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "scaling": 2.5,
  • "offset": -1.2,
  • "data": [
    ]
}

Site Zones Dwell

Return total dwell intensity for each zone. Generates a site-wide heatmap on a 100x100 grid, then sums the values within each zone's boundary to calculate zone-specific dwell metrics.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

floorplan_width
required
integer (Floorplan Width)

The display width of the floorplan image in pixels.

floorplan_height
required
integer (Floorplan Height)

The display height of the floorplan image in pixels.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "birds_and_reptile": 3847.2,
  • "aquarium": 2156.8,
  • "entrance": 5234.1
}

Seating

Site Seat Occupancy

Get average occupancy for each seat at the site, bucketed by time intervals.

Args: site: Site slug/name organisation: Organisation code since: Start timestamp (unix timestamp in seconds) until: End timestamp (unix timestamp in seconds) bucket_interval: Bucket size in minutes (default 5)

Returns: List of buckets with average occupancy per seat

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 0

The minimum number of minutes a seat must be occupied to be included in the results.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Site Total Seat Occupancy

Get time series of total occupied seats at the site, bucketed by time intervals.

Returns list of {"x": timestamp, "y": count} where timestamp is in Europe/London timezone and count is the number of unique occupied seats in that bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Total Seat Occupancy By Type

Get time series of total occupied seats at the site grouped by seat type, bucketed by time intervals.

Each seat type returns a separate time series showing the count of occupied seats of that type. Seats without a seat type are grouped under the "none" key.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
{
  • "desk": [
    ],
  • "meeting_room": [
    ]
}

Site Seat Occupancy Percent

Return time series of seat occupancy as a percentage.

Uses the same hysteresis-based span calculation as average-stay-length to handle intermittent occupancy data. For each seat, computes occupied spans using min_occupied_minutes and min_unoccupied_minutes thresholds. Then for each bucket, calculates the percentage of seats that have spans overlapping that bucket.

This avoids the issue where raw 1-minute rollups showing intermittent occupancy (1/0/0/1/0/1) would incorrectly show low occupancy - hysteresis treats this as a single continuous occupied span.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 2

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

count_groups_as_single
boolean (Count Groups As Single)
Default: false

If true, all seats in a group are counted as occupied if any seat in the group is occupied. If false, only physically occupied seats are counted.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Site Average Stay Length

Calculate average stay length for seats at a site over time.

Converts 1-minute rollup data into occupied spans using hysteresis thresholds, then calculates average span length for each bucket. Returns Europe/London timezone.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

Minimum consecutive minutes to consider a seat occupied.

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 2

Minimum consecutive minutes to consider a seat unoccupied.

min_span_length
integer (Min Span Length)
Default: 0

Minimum span length in minutes to include in calculations. Spans shorter than this are discarded. Default 0 (disabled).

include_ongoing
boolean (Include Ongoing)
Default: false

If true, include spans still ongoing at query end (truncated to query end time). If false, only completed spans are included. Default false.

debug
boolean (Debug)
Default: false

If true, include raw span data for each bucket in the response for debugging.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Site Average Group Size

Calculate average group size for occupied seats at a site over time.

For each time bucket, this endpoint calculates group statistics based on seat occupancy. A "group" is defined as:

  • For seats not in a SeatGroup: Each occupied seat is a group of size 1
  • For seats in a SeatGroup: The group size is the number of occupied seats in that SeatGroup

Returns time-series data with total number of groups and min/max/avg/median group sizes per bucket.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

bucket_interval
integer (Bucket Interval)
Default: 5

The bucket size in minutes.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 2

The minimum number of minutes a seat must be occupied to be included in the results.

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Summary

Site Metrics Summary

Return all key site metrics in a single API call.

Combines total footfall, footfall percentage change, and seat occupancy metrics into a single response, reducing the number of API calls required for report generation.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 1

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 6

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

site
required
string (Site)
Examples: site=liverpool site=main-office

The site identifier (from the Site Settings page).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
Example
{
  • "site": "liverpool-street",
  • "total_footfall": 1234,
  • "footfall_percent_change": 12.5,
  • "seat_metrics": {
    },
  • "period": {
    }
}

Organisation Metrics Summary

Return metrics for the entire organisation AND all individual sites in a single API call.

This is the primary endpoint for report generation, eliminating the need to call the site endpoint repeatedly. Organisation-level seat metrics are weighted averages across all sites with seats.

Authorizations:
Pemberton API key
query Parameters
since
required
integer (Since)

A unix timestamp indicating the query start, in UTC seconds.

until
required
integer (Until)

A unix timestamp indicating the query end, in UTC seconds.

min_occupied_minutes
integer (Min Occupied Minutes)
Default: 1

Minimum consecutive minutes of occupancy required to transition to occupied state (hysteresis threshold).

min_unoccupied_minutes
integer (Min Unoccupied Minutes)
Default: 6

Minimum consecutive minutes of non-occupancy required to transition to unoccupied state (hysteresis threshold).

organisation
required
string (Organisation)
Examples: organisation=a2bcd

The 5-character organisation code.

Responses

Response samples

Content type
application/json
{
  • "organisation": {
    },
  • "sites": [
    ],
  • "period": {
    }
}