Metrics API overview

WebSocket protocol — message envelope, response framing, and the HTTP gateway alternative.

The Metrics API delivers analytics — footfall, dwell, occupancy, transactions, heatmaps, demographics. It uses a single authenticated WebSocket connection that serves many sequential queries.

Base URL: wss://ws.auravision.ai

Prefer a single HTTPS request? The HTTP gateway exposes the same data over a request/response interface — POST a body that mirrors the WebSocket message shape, receive the consolidated response. Same JWT bearer auth as the Core API. Contact your account manager for the gateway endpoint.

Looking for organisation, location, or recording lookups over the same WebSocket? See Reference data — the WS analogue of the Core REST resource endpoints.

Conventions

All metrics

Traffic

MetricRouteDescription
Entriesmetric/entriesFootfall — people entering the location
Passers-bymetric/passers-byPeople who walked past without entering
Capture ratemetric/capture-rateEntries ÷ passers-by

Occupancy & Dwell

MetricRouteDescription
Dwell timemetric/average-dwell-timeLocation-wide average dwell
Average occupancymetric/average-occupancyLocation-wide average occupancy
Max occupancymetric/max-occupancyLocation-wide peak occupancy

Lines

MetricRouteDescription
Line taxonomydetail/list (line_context)Enumerate line definitions configured on your locations
Line entriesmetric/internal/line-entriesEntries across a named zone line
Line passers-bymetric/internal/line-passers-byPass-bys at a named zone line
Line capture ratemetric/internal/capture-rateEntries ÷ passers-by at a named zone
Line entries per visitormetric/internal/line-crossings-per-location-entrantLine entries per location entrant
Location movementmetric/internal/line-crossingsWithin-location movement across a line

Areas

MetricRouteDescription
Area taxonomydetail/list (area_context)Enumerate area definitions configured on your locations
Area entriesmetric/area/dataTotal entries into a defined zone
Area total dwellmetric/area/dataTotal dwell time accumulated in a zone
Area average dwellmetric/area/dataMean dwell time per area entry
Area average occupancymetric/area/average-occupancyAverage occupancy of a defined zone
Area max occupancymetric/area/max-occupancyPeak occupancy of a defined zone
Area utilisationmetric/area/utilisation% of time the area was occupied
Area dwell per visitormetric/area/dwell-per-location-entrantArea dwell ÷ location entrants
Area entries per visitormetric/area/entries-per-location-entrantArea entries ÷ location entrants

Sales

MetricRouteDescription
Transactionsmetric/transactions/dataTransaction count
Volumemetric/transactions/dataTotal transaction value
Unitsmetric/transactions/dataTotal units sold
Average transaction valuemetric/transactions/dataMean value of each transaction
Units per transactionmetric/transactions/dataUnits sold per transaction
Conversion ratemetric/transactions/conversion-rateTransactions ÷ location entrants

Heatmaps & Thumbnails

MetricRouteDescription
Heatmapsdetail/list (heatmap)Path / linger / entry / exit / interaction heatmaps
Thumbnailsdetail/list (thumbnail)Camera thumbnails
Thumbnails with overlaysdetail/list (thumbnails-with-statelems)Thumbnails with lines/areas overlaid

Uptime

MetricRouteDescription
Historic uptimemetric/uptimeHistoric uptime over a date range
Realtime uptimestatus/uptimeReal-time device status

Exports

MetricRouteDescription
CSV generatorexternal-service/csv-generatorGenerate a CSV from one or more metric queries

Authentication

Present the JWT once at connection time as a ?token=<your_token> query parameter on the WebSocket URL — connect to wss://ws.auravision.ai?token=<your_token>. Do not include it on individual messages. See Authentication for the token flow.

Send format

{
  "action": "metric",
  "data": {
    "id": "your-client-request-id",
    "route": "entries",
    "body": { }
  }
}
FieldDescription
actionmetric | detail | status | external-service
data.idAny client-chosen string — echoed back with the response for request/response matching
data.routeThe specific metric or query type — see endpoint pages
data.bodyRoute-specific parameters (entities, dates, facets, etc.)

Receive format

{id}|{partNum}|{totalParts}|{JSON}

Each frame is a pipe-delimited string. The first three segments are the request id (echoed back), the part number, and the total part count. The remainder of the line is the JSON payload.

Large datasets

For very large responses (above ~260,000 segments), the segments field of the assembled JSON will be a signed download URL rather than inline JSON. Fetch it with a standard GET. The file is CSV: the first row contains column names; downstream rows are data, with unit-type hints encoded alongside the column values where coercion between numeric and string is needed. Refer to the column ordering you supplied in the request (or the default ordering for inline segments) to interpret the file.

Common request body fields

These apply to most metric routes. Endpoint pages document only fields specific to their routes.

FieldRequiredDescription
start / endYesISO 8601 timestamps
entitiesYesArray of location, organisation, or recording IDs (matching entityType)
entityTypeYes"location", "organisation", or "recording". Recording-level applies to detail, status, and the uptime metric route. Other metric routes accept "location" or "organisation" only.
facetsYesWhat to include — see below
aggregationPeriodYesTime granularity — see below
rolesConditionalcustomer staff customer-customer customer-staff staff-staff. Required when breakdownByDimensions includes role.
gendersConditionalmale female. Required when breakdownByDimensions includes gender.
agesConditional0_15 16_24 25_34 35_44 45_54 55_64 65_100. Required when breakdownByDimensions includes age.
breakdownByDimensionsNoSplit data by: entity taxonomy age gender role
insideRecordingTimesNotrue to restrict to opening hours only. Default is false (all hours).

facets options

FacetDescription
segmentsTime-series data points
summaryTotals and averages across the full period
aggregatesDay-of-week or hour-of-day roll-ups
thumbnailsCamera thumbnails associated with the data
thumbnails-with-statelemsThumbnails with overlaid stat-element coordinates
estimatesImputed values during camera downtime — supported only on Traffic > Entries under strict conditions

Aggregation period options

The aggregationPeriod field accepts one of these values:

PeriodBucket shape
15min15-minute buckets
hourHourly buckets
dayDaily buckets
week_isoISO weeks (Monday start)
week_usUS weeks (Sunday start)
monthCalendar months
quarterCalendar quarters
yearCalendar years
hourofdayAll data collapsed into 24 hour-of-day buckets
dayofweekAll data collapsed into 7 day-of-week buckets
dayofweek-hourofdayA 168-bucket grid combining day-of-week × hour-of-day

Querying in-progress periods

Querying an in-progress monthly, weekly, quarterly, or yearly period returns data accumulated so far — it is not empty. Each period is represented by its start date. If your query’s start date is after the beginning of the current period, that period will not appear in results.

Example: Querying 2026-03-17 to 2026-04-15 at monthly granularity returns April data only — not March. The March period starts on 2026-03-01, which falls before your query range. To include March, set the start date to 2026-03-01 or earlier.

Where to go next