Spot Analytics API
The Analytics API from Spot — 3 operation(s) for analytics.
The Analytics API from Spot — 3 operation(s) for analytics.
openapi: 3.0.0
info:
title: Spot AI — Spot Connect (beta) Analytics API
version: 1.10.0
description: Spot AI Developer API
contact:
name: Spot AI
url: https://developers.spot.ai/
servers:
- url: https://dev-api.spot.ai/
tags:
- name: Analytics
paths:
/v1/cameras/{cameraId}/intelligence/{entity}/counting:
get:
operationId: Counting
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/GetCountsQueryResult'
examples:
Successful Response Example:
value:
bucket_counts:
- bucket_ms: 1687320000000
total_count: 4
idle_count: 3
left_count: 0
right_count: 0
entities:
- object_id: 1687319780950|1
first_ms: 1687320000116
last_ms: 1687322686450
idle_sum: 2686
queue_num: 1
crossed_left: null
crossed_right: null
- object_id: 1687322709401|1
first_ms: 1687322709567
last_ms: 1687322737567
idle_sum: 27
queue_num: 2
crossed_left: null
crossed_right: null
- object_id: 1687322759950|1
first_ms: 1687322760116
last_ms: 1687322760116
idle_sum: 0
queue_num: 3
crossed_left: null
crossed_right: null
- object_id: 1687322759950|2
first_ms: 1687322771783
last_ms: 1687323599783
idle_sum: 828
queue_num: 4
crossed_left: null
crossed_right: null
total_count: 4
'400':
description: Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
'422':
description: "Validation Failed. The error could be due to:\n 1) The maximum date range is 30 days. \n 2) Bucket size cannot be larger than date range"
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
examples:
Example 1:
value:
message: The maximum date range is 30 days
statusCode: 422
name: InvalidDateRangeError
description: Count events and summary for a camera
summary: Count
tags:
- Analytics
security:
- bearer_security: []
parameters:
- description: Id of the camera
in: path
name: cameraId
required: true
schema:
format: double
type: number
- description: Type of entity to filter on (people, vehicles, or forklifts)
in: path
name: entity
required: true
schema:
$ref: '#/components/schemas/IntelligenceEntities'
- description: RFC3339 date string indicating the start of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: start_date
required: true
schema:
format: date-time
type: string
- description: RFC3339 date string indicating the end of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: end_date
required: true
schema:
format: date-time
type: string
- description: Time string indicating the beginning of the time range filter (HH:mm:ss)
in: query
name: start_time
required: false
schema:
default: 00:00:00
type: string
- description: Time string indicating the end of the time range filter (HH:mm:ss)
in: query
name: end_time
required: false
schema:
default: '23:59:59'
type: string
- description: 'Minimum number of entities that must be present
in a frame for it to be considered a presence event'
in: query
name: threshold
required: false
schema:
default: 1
format: double
type: number
- description: Array of numbers indicating which days of the week to include in the results
in: query
name: days_of_week
required: false
schema:
default:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
type: array
items:
type: number
format: double
- description: Size of the time buckets to group results by
in: query
name: bucket_size
required: false
schema:
$ref: '#/components/schemas/BucketSize'
- in: query
name: presence_threshold_seconds
required: false
schema:
default: 0
format: double
type: number
- in: query
name: presence_filter_seconds
required: false
schema:
default: 0
format: double
type: number
/v1/cameras/{cameraId}/intelligence/{entity}/idle:
get:
operationId: Idle
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/GetIdleQueryResult'
examples:
Successful Response Example:
value:
bucket_counts:
- bucket_ms: 1687320000000
total_count: 4
idle_count: 3
idle_count: 3
total_count: 4
average_idle_time_seconds: 1180
average_nonzero_idle_time_seconds: 1180
entities:
- object_id: 1687319780950|1
first_ms: 1687320000116
last_ms: 1687322686450
idle_sum: 2686
queue_num: 1
- object_id: 1687322709401|1
first_ms: 1687322709567
last_ms: 1687322737567
idle_sum: 27
queue_num: 2
- object_id: 1687322759950|1
first_ms: 1687322760116
last_ms: 1687322760116
idle_sum: 0
queue_num: 3
- object_id: 1687322759950|2
first_ms: 1687322771783
last_ms: 1687323599783
idle_sum: 828
queue_num: 4
max_idle_time_seconds: 2686
'400':
description: Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
'422':
description: "Validation Failed. The error could be due to:\n 1) The maximum date range is 30 days. \n 2) Bucket size cannot be larger than date range"
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
examples:
Example 1:
value:
message: The maximum date range is 30 days
statusCode: 422
name: InvalidDateRangeError
description: Idling events and summary for a camera.
summary: Idle
tags:
- Analytics
security:
- bearer_security: []
parameters:
- description: Id of the camera
in: path
name: cameraId
required: true
schema:
format: double
type: number
- description: Type of entity to filter on (people, vehicles, or forklifts)
in: path
name: entity
required: true
schema:
$ref: '#/components/schemas/IntelligenceEntities'
- description: RFC3339 date string indicating the start of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: start_date
required: true
schema:
format: date-time
type: string
- description: RFC3339 date string indicating the end of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: end_date
required: true
schema:
format: date-time
type: string
- description: Time string indicating the beginning of the time range filter (HH:mm:ss)
in: query
name: start_time
required: false
schema:
default: 00:00:00
type: string
- description: Time string indicating the end of the time range filter (HH:mm:ss)
in: query
name: end_time
required: false
schema:
default: '23:59:59'
type: string
- description: 'Minimum number of entities that must be present
in a frame for it to be considered a presence event'
in: query
name: threshold
required: false
schema:
default: 1
format: double
type: number
- description: Array of numbers indicating which days of the week to include in the results
in: query
name: days_of_week
required: false
schema:
default:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
type: array
items:
type: number
format: double
- description: Size of the time buckets to group results by
in: query
name: bucket_size
required: false
schema:
$ref: '#/components/schemas/BucketSize'
- in: query
name: presence_threshold_seconds
required: false
schema:
default: 0
format: double
type: number
- in: query
name: presence_filter_seconds
required: false
schema:
default: 0
format: double
type: number
- in: query
name: zone_id
required: false
schema:
format: double
type: number
/v1/cameras/{cameraId}/intelligence/{entity}/presence:
get:
operationId: Presence
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/GetPresenceQueryResult'
examples:
Successful Response Example:
value:
duration: 3600000
duration_present: 3557551
longest_presence:
start: 1687320000116
end: 1687322691450
length_in_secs: 2691334
longest_absence:
start: 1687322691450
end: 1687322709567
length_in_secs: 18117
buckets:
- start_time: 1687320000000
end_time: 1687323600000
presence_sum: 3557551
events:
- start_ms: 1687322771783
end_ms: 1687323600000
- start_ms: 1687320000116
end_ms: 1687322691450
- start_ms: 1687322760116
end_ms: 1687322765116
- start_ms: 1687322709567
end_ms: 1687322742567
'400':
description: Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
'422':
description: "Validation Failed. The error could be due to:\n 1) The maximum date range is 30 days. \n 2) Bucket size cannot be larger than date range"
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponse'
examples:
Example 1:
value:
message: The maximum date range is 30 days
statusCode: 422
name: InvalidDateRangeError
description: Presence events and summary for a camera.
summary: Presence
tags:
- Analytics
security:
- bearer_security: []
parameters:
- description: Id of the camera
in: path
name: cameraId
required: true
schema:
format: int32
type: integer
- description: Type of entity to filter on (people, vehicles, or forklifts)
in: path
name: entity
required: true
schema:
$ref: '#/components/schemas/IntelligenceEntities'
- description: RFC3339 date string indicating the start of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: start_date
required: true
schema:
format: date-time
type: string
- description: RFC3339 date string indicating the end of the date range filter (see https://datatracker.ietf.org/doc/html/rfc3339#section-5.6)
in: query
name: end_date
required: true
schema:
format: date-time
type: string
- description: Time string indicating the beginning of the time range filter (HH:mm:ss)
in: query
name: start_time
required: false
schema:
default: 00:00:00
type: string
- description: Time string indicating the end of the time range filter (HH:mm:ss)
in: query
name: end_time
required: false
schema:
default: '23:59:59'
type: string
- description: 'Minimum number of entities that must be present
in a frame for it to be considered a presence event'
in: query
name: threshold
required: false
schema:
default: 1
format: double
type: number
- description: Array of numbers indicating which days of the week to include in the results
in: query
name: days_of_week
required: false
schema:
default:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
type: array
items:
type: number
format: double
- description: Size of the time buckets to group results by
in: query
name: bucket_size
required: false
schema:
$ref: '#/components/schemas/BucketSize'
- in: query
name: presence_threshold_seconds
required: false
schema:
default: 0
format: double
type: number
- in: query
name: presence_filter_seconds
required: false
schema:
default: 0
format: double
type: number
components:
schemas:
IntelligenceEntities:
enum:
- people
- vehicles
- forklifts
type: string
ValidationError:
properties:
name:
type: string
message:
type: string
details:
items:
$ref: '#/components/schemas/ValidationErrorDetails'
type: array
required:
- name
- message
- details
type: object
additionalProperties: false
IntelligenceCountBucketCount:
properties:
bucket_ms:
type: number
format: double
idle_count:
type: number
format: double
total_count:
type: number
format: double
left_count:
type: number
format: double
right_count:
type: number
format: double
required:
- bucket_ms
- idle_count
- total_count
type: object
additionalProperties: false
BaseIntelligenceIdleBucketCount:
properties:
bucket_ms:
type: number
format: double
idle_count:
type: number
format: double
total_count:
type: number
format: double
required:
- bucket_ms
- idle_count
- total_count
type: object
additionalProperties: false
ValidationErrorDetails:
properties:
field:
type: string
message:
type: string
value: {}
required:
- field
- message
type: object
additionalProperties: false
SegmentResult:
properties:
start_ms:
type: number
format: double
end_ms:
type: number
format: double
required:
- start_ms
- end_ms
type: object
additionalProperties: false
GetCountsQueryResult:
properties:
total_count:
type: number
format: double
bucket_counts:
items:
$ref: '#/components/schemas/IntelligenceCountBucketCount'
type: array
entities:
items:
$ref: '#/components/schemas/IntelligenceCountIdleEntity'
type: array
required:
- total_count
- bucket_counts
- entities
type: object
additionalProperties: false
BucketSize:
enum:
- hour
- day
- week
- month
type: string
BucketResult:
properties:
start_time:
type: number
format: double
end_time:
type: number
format: double
presence_sum:
type: number
format: double
events:
items:
$ref: '#/components/schemas/SegmentResult'
type: array
required:
- start_time
- end_time
- presence_sum
- events
type: object
additionalProperties: false
GetIdleQueryResult:
properties:
total_count:
type: number
format: double
bucket_counts:
items:
$ref: '#/components/schemas/BaseIntelligenceIdleBucketCount'
type: array
entities:
items:
$ref: '#/components/schemas/BaseIntelligenceIdleEntity'
type: array
average_idle_time_seconds:
type: number
format: double
average_nonzero_idle_time_seconds:
type: number
format: double
max_idle_time_seconds:
type: number
format: double
idle_count:
type: number
format: double
required:
- total_count
- bucket_counts
- entities
- average_idle_time_seconds
- average_nonzero_idle_time_seconds
- max_idle_time_seconds
- idle_count
type: object
additionalProperties: false
IntelligenceSegment:
properties:
length_in_secs:
type: number
format: double
start:
type: number
format: double
end:
type: number
format: double
required:
- length_in_secs
- start
- end
type: object
additionalProperties: false
BaseIntelligenceIdleEntity:
properties:
object_id:
type: string
first_ms:
type: number
format: double
last_ms:
type: number
format: double
idle_sum:
type: number
format: double
presence_duration:
type: number
format: double
queue_num:
type: number
format: double
required:
- object_id
- first_ms
- last_ms
- idle_sum
- presence_duration
- queue_num
type: object
additionalProperties: false
IntelligenceCountIdleEntity:
properties:
object_id:
type: string
first_ms:
type: number
format: double
last_ms:
type: number
format: double
idle_sum:
type: number
format: double
presence_duration:
type: number
format: double
queue_num:
type: number
format: double
crossed_left:
type: boolean
crossed_right:
type: boolean
required:
- object_id
- first_ms
- last_ms
- idle_sum
- presence_duration
- queue_num
type: object
additionalProperties: false
ApiErrorResponse:
properties:
data: {}
statusCode:
type: number
format: double
message:
type: string
name:
type: string
required:
- message
- name
type: object
GetPresenceQueryResult:
properties:
duration:
type: number
format: double
duration_present:
type: number
format: double
longest_presence:
$ref: '#/components/schemas/IntelligenceSegment'
longest_absence:
$ref: '#/components/schemas/IntelligenceSegment'
buckets:
items:
$ref: '#/components/schemas/BucketResult'
type: array
required:
- duration
- duration_present
- buckets
type: object
additionalProperties: false
securitySchemes:
bearer_security:
type: http
scheme: bearer