OpenApi¶
View spec in html.
openapi: 3.0.0
info:
version: 'v.1.1.18'
title: 'LUNA Streams API'
description: |
VisionLabs LUNA Streams API. The API version is 1.
Service is intended for creation and management streams. "Stream" is an user logical entity.
Default port: 5160.
OpenAPI specification is the only valid document providing up-to-date information about the service LUNA Streams.
The specification can be used:
- By documentation generation tools to visualize the API.
- By code generation tools.
All the documents and code generated using this specification can include inaccuracies and should be carefully checked.
OpenAPI specification can be received using the [/docs/spec](#operation/getSpec) resource. The "Accept" header should be set to "application/x-yaml".
components:
headers:
application_json:
schema:
type: string
enum:
- application/json
required: true
description: Content type of the response body.
luna_request_id:
schema:
type: string
format: timestamp,uuid
example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
pattern: ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
description: |
Request ID. Helps to uniquely identify messages in system logs that correspond to particular requests.
If it was not set, the system will set it to the default format ("timestamp, UUID"). It will be returned with the response.
required: true
docs_content_type:
schema:
type: string
enum:
- application/x-yaml
- text/html
required: true
description: Content type of the response body.
config_accept_content_type:
schema:
type: string
enum:
- application/json
- text/plain
required: false
description: Content type of the response body.
text_html:
schema:
type: string
enum:
- text/html
required: true
description: Content type of the response body.
parameters:
page:
in: query
name: page
schema:
type: integer
minimum: 1
default: 1
description: Page number.
page_size:
in: query
name: page_size
schema:
type: integer
minimum: 1
maximum: 1000
default: 10
description: Number of items on page.
luna_request_id:
in: header
schema:
type: string
format: timestamp,uuid
example: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a
pattern: ^[0-9]{10},[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$
description: |
External request ID. Helps to uniquely identify messages in system logs that correspond to particular requests.
If it was not set, the system will set it to the default format ("timestamp, UUID"). It will be returned with the response.
name: Luna-Request-Id
accept_docs_handler:
in: header
name: Accept
schema:
$ref: '#/components/schemas/accept_docs_handler'
required: true
description: Acceptable type of receiving data.
accept_config_handler:
in: header
name: Accept
schema:
type: string
enum:
- application/json
- text/plain
description: One of application/json, text/plain
required: false
description: Acceptable type of receiving data.
applicationJsonContent:
in: header
name: Content-Type
schema:
type: string
enum:
- application/json
description: Content type is `application/json`.
Accept:
in: header
name: Accept
schema:
type: string
enum:
- application/json
- application/msgpack
description: Preferred response content type.
limit:
in: query
name: limit
schema:
type: integer
minimum: 1
description: Maximum number of the objects in the response.
required: true
stream_ids:
in: query
name: stream_ids
schema:
type: array
items:
$ref: '#/components/schemas/stream_id'
explode: false
description: Stream ID filter. Only streams with the specified ids will be returned in the response.
example: 'ae09126e-70a6-49c7-923f-df2320f08639,68b363eb-600a-4e72-afb3-8c4196e385ce'
stream_names:
in: query
name: names
schema:
type: array
items:
$ref: '#/components/schemas/stream_name'
explode: false
description: Stream name filter. Only streams with the specified names will be returned in the response.
example: 'name1,name2'
stream_reference:
in: query
name: reference
schema:
$ref: '#/components/schemas/stream_reference'
description: Stream reference filter. Only streams with the specified reference will be returned in the response.
stream_statuses:
in: query
name: statuses
schema:
type: array
items:
$ref: '#/components/schemas/stream_status'
explode: false
description: Stream status filter - comma-separated list of status values. Only streams with the specified statuses will be returned in the response.
example: 'pending,pause'
stream_create_time__lt:
in: query
name: create_time__lt
schema:
$ref: '#/components/schemas/time'
description: Stream create time upper excluding bound filter in RFC 3339 format. Only streams with the creation time lower than the specified boundary will be returned in the response.
example: "2021-09-21T19:11:41.674Z"
stream_create_time__gte:
in: query
name: create_time__gte
schema:
$ref: '#/components/schemas/time'
description: Stream create time lower including bound filter in RFC 3339 format. Only streams with the creation time greater than or equal to the specified boundary will be returned in the response.
example: "2021-09-21T11:11:41.674Z"
log_time__lt:
in: query
name: log_time__lt
schema:
$ref: '#/components/schemas/time'
description: Stream log record time upper excluding bound filter in RFC 3339 format. Only stream logs with the record time lower than the specified boundary will be returned in the response.
example: "2021-09-21T19:11:41.674Z"
log_time__lt_deleting:
in: query
name: log_time__lt
schema:
$ref: '#/components/schemas/time'
description: Stream log record time upper excluding bound filter in RFC 3339 format. Only stream logs with the record time lower than the specified boundary will be deleted.
example: "2021-09-21T19:11:41.674Z"
log_time__gte:
in: query
name: log_time__gte
schema:
$ref: '#/components/schemas/time'
description: Stream log record time lower including bound filter in RFC 3339 format. Only stream log with the record time greater than or equal to the specified boundary will be returned in the response.
example: "2021-09-21T11:11:41.674Z"
log_targets:
in: query
name: targets
schema:
type: array
items:
type: string
enum: [ stream_id, status, error, video_info, log_time, version, preview ]
description: Stream log target.
example: [ status ]
default: [ stream_id, status, error, video_info, log_time, version, preview ]
description: List of comma-separated stream logs targets.
account_id:
in: query
name: account_id
schema:
$ref: '#/components/schemas/account_id'
description: Account ID.
example: '8950722f-3fd4-4223-b48f-03f95f0e8dfb'
group_names:
in: query
name: group_names
schema:
type: array
items:
$ref: '#/components/schemas/group_name'
description: Group names.
example: "group1,group2"
group_name:
in: query
name: group_name
schema:
$ref: '#/components/schemas/group_name'
description: Group name filter. Only groups with the specified names will be returned in the response.
example: "group1"
group_ids:
in: query
name: group_ids
schema:
type: array
items:
$ref: '#/components/schemas/group_id'
explode: false
description: Group IDs.
example: 'ae09126e-70a6-49c7-923f-df2320f08639,68b363eb-600a-4e72-afb3-8c4196e385ce'
stream_id_path:
in: path
name: stream_id
schema:
$ref: '#/components/schemas/uuid'
required: true
description: Stream ID.
include_luna_services:
in: query
name: include_luna_services
schema:
type: integer
enum: [0, 1]
default: 0
description: Whether to perform healthchecks for dependent LUNA services.
order:
in: query
name: order
schema:
type: string
enum: ["asc", "desc"]
description: |
The sort order.
By default, the results will be sorted in order of stream appearance in the database (may not match stream `create_time`).
If "desc" is set, the newest streams will be shown first. If "asc" is set, the oldest streams will be shown first.
But if some stream ID range filters specified (`stream_id__gte` or `stream_id__lt`), the results will be sorted by stream ID.
stream_id__gte:
in: query
name: stream_id__gte
schema:
$ref: '#/components/schemas/stream_id'
description: Stream id lower included bound.
example: 'ae09126e-70a6-49c7-923f-df2320f08639'
stream_id__lt:
in: query
name: stream_id__lt
schema:
$ref: '#/components/schemas/stream_id'
description: Stream id upper excluded bound.
example: 'ae09126e-70a6-49c7-923f-df2320f08639'
schemas:
error:
type: object
properties:
error_code:
type: integer
description: Error code.
desc:
type: string
description: Short error description.
detail:
type: string
description: Error details.
link:
type: string
description: Link to the documentation website with the error description.
required: [error_code, detail, desc, link]
example:
error_code: 1
detail: internal server error
desc: internal server error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
int_version:
type: integer
minimum: 0
accept_docs_handler:
type: string
enum:
- application/x-yaml
- text/html
description: One of application/x-yaml, text/html
version:
type: object
properties:
Version:
type: object
properties:
api:
allOf:
- $ref: '#/components/schemas/int_version'
description: API version of service.
major:
allOf:
- $ref: '#/components/schemas/int_version'
description: Major version of service.
minor:
allOf:
- $ref: '#/components/schemas/int_version'
description: Minor version of service.
patch:
allOf:
- $ref: '#/components/schemas/int_version'
description: Patch version of service.
required: [ api, major, minor, patch ]
required: [ Version ]
example:
Version:
api: 1
major: 0
minor: 0
patch: 0
health_ok:
description: Successful healthcheck execution info.
type: object
properties:
execution_time:
type: number
format: float
example: 0.123
description: Request execution time in seconds.
required: [ execution_time ]
health_errors:
type: object
properties:
errors:
description: Failed healthcheck execution info.
type: array
items:
type: object
properties:
component:
description: Component name.
type: string
error:
allOf:
- description: Healthcheck error.
- $ref: '#/components/schemas/error'
status:
description: Component health status.
type: integer
enum: [ 0, 1 ]
required: [ component, error, status ]
required: [ errors ]
example:
errors:
- component: db
error:
error_code: 10017
desc: Database error
detail: Database connection timeout error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-10017
status: 0
- component: db_migration
error:
error_code: 10017
desc: Database error
detail: Database connection timeout error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-10017
status: 0
count:
type: integer
minimum: 0
example: 146
string36_nullable:
type: string
maxLength: 36
nullable: true
string128_default:
type: string
maxLength: 128
default: ""
string512_default:
type: string
maxLength: 512
default: ""
file_mask:
type: string
minLength: 0
maxLength: 128
example: "example1_%04d.jpg"
description: File mask.
time:
type: string
format: date-time
example: "2018-08-11T09:11:41.674Z"
description: Time in format RFC 3339.
uuid:
type: string
format: uuid
pattern: '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$'
example: "557d54ec-29ad-4f3c-93b4-c9092ef12515"
stream_id:
allOf:
- $ref: '#/components/schemas/uuid'
- example: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
description: Stream ID.
group_id:
allOf:
- $ref: '#/components/schemas/uuid'
- example: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
description: Stream group ID.
account_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Account ID for authentication in the LUNA PLATFORM.
stream_reference:
type: string
maxLength: 512
description: |
Stream reference:
- for `tcp`, `udp` stream types: path to the source, USB-number
- for `videofile` stream type: path to video file
- for `images` stream type: path to folder with images
example: https://upload.wikimedia.org/wikipedia/commons/2xQ2gprbMUePw1s9gw9fvA==
roi_integer:
type: integer
minimum: 0
maximum: 65536
roi_float_percent:
type: number
format: float
minimum: 0.0
maximum: 100.0
roi_float_percent_size:
type: number
format: float
minimum: 0.00001
maximum: 100.0
rect:
type: array
items:
type: integer
minimum: 0
maximum: 65536
minItems: 4
maxItems: 4
deprecated: true
default: [ 0, 0, 0, 0 ]
rect_abs:
type: object
properties:
x:
allOf:
- $ref: '#/components/schemas/roi_integer'
description: Region of interest *x* coordinate
y:
allOf:
- $ref: '#/components/schemas/roi_integer'
description: Region of interest *y* coordinate
width:
allOf:
- $ref: '#/components/schemas/roi_integer'
description: Region of interest width
height:
allOf:
- $ref: '#/components/schemas/roi_integer'
description: Region of interest height
mode:
type: string
enum: [abs]
description: |
Region of interest coordinates mode.
- `abs`: absolute coordinates and size in pixels
- `percent`: coordinates and size are set by percents of stream image size
required: [x, y, width, height]
rect_percent:
type: object
properties:
x:
allOf:
- $ref: '#/components/schemas/roi_float_percent'
description: Region of interest *x* coordinate in percents
y:
allOf:
- $ref: '#/components/schemas/roi_float_percent'
description: Region of interest *y* coordinate in percents
width:
allOf:
- $ref: '#/components/schemas/roi_float_percent_size'
description: Region of interest width in percents
height:
allOf:
- $ref: '#/components/schemas/roi_float_percent_size'
description: Region of interest height in percents
mode:
type: string
enum: [percent]
description: |
Region of interest coordinates mode.
- `abs`: absolute coordinates and size in pixels
- `percent`: coordinates and size are set by percents of stream image size
required: [x, y, width, height]
roi:
oneOf:
- $ref: '#/components/schemas/rect_abs'
- $ref: '#/components/schemas/rect_percent'
- $ref: '#/components/schemas/rect'
description: |
Region of interest of camera frame (x, y, width, height). Can be specified either as a json object or as an array. The array format is deprecated.
If array format is used, the elements represent the values of `x`, `y`, `width` and `height` according to their order
If the value is omitted, the default will be: `{"x": 0, "y": 0, "width": 0, "height": 0, "mode": "abs"}`
This means that the whole frame is the region of interest
**Only for processing faces.**
droi:
oneOf:
- $ref: '#/components/schemas/rect_abs'
- $ref: '#/components/schemas/rect_percent'
- $ref: '#/components/schemas/rect'
description: |
Region of interest within the ROI zone. Can be specified either as a json object or as an array. The array format is deprecated.
Face detection is performed in ROI, but the best shot is selected only in the DROI area.
Face detection must be completely within the DROI zone for the frame to be considered as a best shot.
If array format is used, the elements represent the values of `x`, `y`, `width` and `height` according to their order
If the value is omitted, the default will be: `{"x": 0, "y": 0, "width": 0, "height": 0, "mode": "abs"}`
This means that the whole frame is the region of interest
**Only for processing faces.**
rotation:
type: integer
enum: [ 0, 90, 180, 270 ]
default: 0
description: Angle of camera frame rotation.
preferred_program_stream_frame_width:
type: integer
minimum: 0
default: 800
description: |
Frame width of the preferred program stream.
The parameter is intended to work with protocols that imply the presence of several channels with different
bitrates and resolutions (for example, HLS).
If the stream has several such channels, then this parameter will enable you to select from all the channels
of the whole stream the channel whose frame width is closer to the value specified in this parameter.
**Intended for use with "tcp" and "udp" stream types.**
stream_data_common:
type: object
properties:
type:
type: string
description: |
Stream type.
- `images` - set of frames as separate image files
- `videofile` - video file
- `tcp` - transport layer network protocol
- `udp` - transport layer network protocol
Only transport layer protocols (TCP or UDP) are specified. It is necessary
to understand on which transport layer protocol the application layer protocol
(HTTP, RTSP, HLS, etc.) is based.
reference:
$ref: '#/components/schemas/stream_reference'
roi:
$ref: '#/components/schemas/roi'
droi:
$ref: '#/components/schemas/droi'
rotation:
$ref: '#/components/schemas/rotation'
preferred_program_stream_frame_width:
$ref: '#/components/schemas/preferred_program_stream_frame_width'
required: [ type, reference ]
stream_data_common_v2:
type: object
properties:
type:
type: string
description: |
Stream type.
- `images` - set of frames as separate image files
- `videofile` - video file
- `tcp` - transport layer network protocol
- `udp` - transport layer network protocol
Only transport layer protocols (TCP or UDP) are specified. It is necessary
to understand on which transport layer protocol the application layer protocol
(HTTP, RTSP, HLS, etc.) is based.
analytics:
type: array
min_items: 1
items:
$ref: '#/components/schemas/stream_analytics_v2'
frame_processing_mode:
$ref: '#/components/schemas/frame_processing_mode'
real_time_mode_fps:
$ref: '#/components/schemas/real_time_mode_fps'
ffmpeg_threads_number:
$ref: '#/components/schemas/ffmpeg_threads_number'
reference:
$ref: '#/components/schemas/stream_reference'
roi:
$ref: '#/components/schemas/roi'
rotation:
$ref: '#/components/schemas/rotation'
preferred_program_stream_frame_width:
$ref: '#/components/schemas/preferred_program_stream_frame_width'
required: [ type, reference, analytics ]
stream_analytics_v2:
type: object
properties:
enabled:
type: boolean
default: true
mode:
type: integer
enum: [1, 2, 3]
default: 3
description: |
Analytics mode:
- 1 - faces
- 2 - bodies
- 3 - humans (default)
droi:
$ref: '#/components/schemas/droi'
filtering:
$ref: '#/components/schemas/filtering_v2'
primary_track_policy:
$ref: '#/components/schemas/primary_track_policy'
sending:
$ref: '#/components/schemas/sending_v2'
event_handler:
$ref: '#/components/schemas/stream_event_handler_v2'
healthcheck:
$ref: '#/components/schemas/healthcheck_policy'
liveness:
$ref: '#/components/schemas/liveness_policy_v2'
required: [event_handler]
description: Face Stream analytics
sending_v2:
type: object
properties:
body:
type: object
properties:
send_only_full_set:
type: boolean
default: true
description: |
Send data only if the required number of best shots
(`analytics` > `sending` > `bestshot_settings` >
`body_bestshots_to_send` parameter) and detections with human
body coordinates (`minimal_body_track_length_to_send`
parameter of `FACE_STREAM_CONFIG` settings) have been
collected.
**Only for processing bodies.**
delete_track_after_sending:
type: boolean
default: false
description: |
Whether to delete the best shots and detections with human body coordinates after sending the data.
**Only for processing bodies.**
bestshot_settings:
type: object
properties:
type:
type: integer
enum: [1, 2, 3, 4]
default: 3
description: |
Bestshot mode:
- 1 - faces_only
- 2 - bodies_only
- 3 - faces_with_bodies (default)
- 4 - (separately)
face_bestshots_to_send:
type: integer
default: 1
description: Number of best frames for face detections to send
body_bestshots_to_send:
type: integer
default: 1
description: Number of best frames for body detections to send
description: Settings of which bestshots will be sent to platform.
full_frame_settings:
type: integer
enum: [1, 2, 3, 4]
default: 3
description: |
Should only be present if analytics mode is set to 3 (humans).
Defines which source frames will be sent to LP.
- 1 - faces_only
- 2 - bodies_only
- 3 - faces_with_bodies (default)
- 4 - (separately)
time_period_of_searching:
type: integer
default: -1
minimum: -1
description: |
Interval in track after the end of which a best shot is sent to the server.
The measurement type is set in the `type` parameter. If the value is `-1` (by default), then frame analysis is performed on all frames until the end of the track. At the end of the track (when the object leaves the frame), the best frame will be sent to LUNA PLATFORM.
silent_period:
type: integer
default: 0
minimum: -1
description: |
Interval between period. Once the analysis period is over, the system holds this silent period before starting next period of frame analysis.
The measurement type is set in the `type` parameter. If the value is `-1`, then the silent period will last indefinitely.
type:
type: string
enum: [ sec, frames ]
default: sec
description: Measurement type for `time_period_of_searching` and `silent_period` parameters (per frames or per seconds).
description: Stream sending parameters.
sending_v2_required:
allOf:
- $ref: '#/components/schemas/sending_v2'
- properties:
body:
required: [send_only_full_set, delete_track_after_sending]
bestshot_settings:
required: [type, face_bestshots_to_send, body_bestshots_to_send]
required: [body, bestshot_settings, time_period_of_searching, silent_period, type]
filtering_v2:
type: object
properties:
min_score_face:
type: number
default: 0.5187
description: |
Score that defines detection quality. Threshold for filtering detections of faces sent to LUNA PLATFORM.
Recommended value: **0.5187**
min_score_body:
type: number
default: 0.5
description: |
Score that defines detection quality. Threshold for filtering detections of bodies sent to LUNA PLATFORM.
Recommended value: **0.5**
detection_yaw_threshold:
type: number
minimum: 0
maximum: 180
default: 40.0
description: |
Maximum value of head yaw angle in relation to camera.
**Only for processing faces.**
detection_pitch_threshold:
type: number
minimum: 0
maximum: 180
default: 40.0
description: |
Maximum value of head pitch angle in relation to camera.
**Only for processing faces.**
detection_roll_threshold:
type: number
minimum: 0
maximum: 180
default: 30.0
description: |
Maximum value of head roll angle in relation to camera.
**Only for processing faces.**
yaw_number:
type: integer
default: 1
description: |
Number of frames for image filtration based on head yaw angle.
The algorithm analyzes head yaw angles on each of those frames. If on one of them the angle is significantly different from the average
value of angles, the frame will not be considered as a candidate for best shot.
By default, the parameter is disabled, the value is `1`.
**Only for processing faces.**
yaw_collection_mode:
type: boolean
default: false
description: |
Whether to collect a certain number of frames set in `yaw_number` to analyze head yaw angle.
If `yaw_collection_mode` is disabled, then the system will analyze incoming frames sequentially,
i.e., first two frames are analyzed, then three, etc. The maximum number of frames in this sequence is set in `yaw_number` parameter.
**Only for processing faces.**
mouth_occlusion_threshold:
type: number
format: float
default: 0.0
example: 0.1
description: |
Maximum degree of overlap of the face mouth in the frame. I.e. when the value is equal to "0.5", 50% of the mouth can be occluded.
**Only for processing faces.**
min_body_size_threshold:
type: number
format: float
minimum: 0
default: 0.0
example: 0.1
description: |
Body detection size, less than which it will not be sent for processing.
It is calculated as the square root of the product of the body detection height (in pixels) by its width (in pixels).
If the value is `0`, then filtering of body detection by size will not be performed.
**Only for processing bodies.**
description: Stream filtering parameters.
stream_data_common_required:
allOf:
- $ref: '#/components/schemas/stream_data_common'
- required: [type, reference, roi, droi, rotation, preferred_program_stream_frame_width]
stream_data_common_v2_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2'
- properties:
analytics:
type: array
items:
$ref: '#/components/schemas/stream_analytics_with_defaults'
required: [type, analytics, frame_processing_mode, real_time_mode_fps, ffmpeg_threads_number, reference, roi, rotation, preferred_program_stream_frame_width]
stream_data_udp:
allOf:
- $ref: '#/components/schemas/stream_data_common'
- properties:
type:
enum: [ udp ]
endless:
$ref: '#/components/schemas/stream_endless'
stream_data_udp_v2:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2'
- properties:
type:
enum: [ udp ]
endless:
$ref: '#/components/schemas/stream_endless'
stream_data_udp_v2_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2_required'
- properties:
type:
enum: [ udp ]
endless:
$ref: '#/components/schemas/stream_endless'
- required: [endless]
stream_data_udp_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_required'
- properties:
type:
enum: [udp]
endless:
$ref: '#/components/schemas/stream_endless'
- required: [endless]
stream_data_tcp:
allOf:
- $ref: '#/components/schemas/stream_data_common'
- properties:
type:
enum: [ tcp ]
endless:
$ref: '#/components/schemas/stream_endless'
stream_data_tcp_v2:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2'
- properties:
type:
enum: [ tcp ]
endless:
$ref: '#/components/schemas/stream_endless'
stream_data_tcp_v2_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2_required'
- properties:
type:
enum: [ tcp ]
endless:
$ref: '#/components/schemas/stream_endless'
- required: [endless]
stream_data_tcp_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_required'
- properties:
type:
enum: [tcp]
endless:
$ref: '#/components/schemas/stream_endless'
- required: [endless]
stream_data_videofile:
allOf:
- $ref: '#/components/schemas/stream_data_common'
- properties:
type:
enum: [ videofile ]
stream_data_videofile_v2:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2'
- properties:
type:
enum: [ videofile ]
stream_data_videofile_v2_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2_required'
- properties:
type:
enum: [ videofile ]
stream_data_videofile_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_required'
- properties:
type:
enum: [videofile]
stream_data_images:
allOf:
- $ref: '#/components/schemas/stream_data_common'
- properties:
type:
enum: [ images ]
mask:
$ref: '#/components/schemas/file_mask'
required: [ type, mask ]
stream_data_images_v2:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2'
- properties:
type:
enum: [ images ]
mask:
$ref: '#/components/schemas/file_mask'
required: [ type, mask ]
stream_data_images_v2_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_v2_required'
- properties:
type:
enum: [ images ]
mask:
$ref: '#/components/schemas/file_mask'
required: [ type, mask ]
stream_data_images_required:
allOf:
- $ref: '#/components/schemas/stream_data_common_required'
- properties:
type:
enum: [ images ]
mask:
$ref: '#/components/schemas/file_mask'
required: [type, mask]
stream_data:
oneOf:
- $ref: '#/components/schemas/stream_data_udp'
- $ref: '#/components/schemas/stream_data_tcp'
- $ref: '#/components/schemas/stream_data_videofile'
- $ref: '#/components/schemas/stream_data_images'
discriminator:
propertyName: type
mapping:
udp: '#/components/schemas/stream_data_udp'
tcp: '#/components/schemas/stream_data_tcp'
videofile: '#/components/schemas/stream_data_videofile'
images: '#/components/schemas/stream_data_images'
description: Stream setting parameters.
stream_data_required:
oneOf:
- $ref: '#/components/schemas/stream_data_udp_required'
- $ref: '#/components/schemas/stream_data_tcp_required'
- $ref: '#/components/schemas/stream_data_videofile_required'
- $ref: '#/components/schemas/stream_data_images_required'
discriminator:
propertyName: type
mapping:
udp: '#/components/schemas/stream_data_udp_required'
tcp: '#/components/schemas/stream_data_tcp_required'
videofile: '#/components/schemas/stream_data_videofile_required'
images: '#/components/schemas/stream_data_images_required'
description: Stream setting parameters.
stream_data_v2:
oneOf:
- $ref: '#/components/schemas/stream_data_udp_v2'
- $ref: '#/components/schemas/stream_data_tcp_v2'
- $ref: '#/components/schemas/stream_data_videofile_v2'
- $ref: '#/components/schemas/stream_data_images_v2'
discriminator:
propertyName: type
mapping:
udp: '#/components/schemas/stream_data_udp_v2'
tcp: '#/components/schemas/stream_data_tcp_v2'
videofile: '#/components/schemas/stream_data_videofile_v2'
images: '#/components/schemas/stream_data_images_v2'
description: Stream setting parameters.
stream_data_v2_required:
oneOf:
- $ref: '#/components/schemas/stream_data_udp_v2_required'
- $ref: '#/components/schemas/stream_data_tcp_v2_required'
- $ref: '#/components/schemas/stream_data_videofile_v2_required'
- $ref: '#/components/schemas/stream_data_images_v2_required'
discriminator:
propertyName: type
mapping:
udp: '#/components/schemas/stream_data_udp_v2_required'
tcp: '#/components/schemas/stream_data_tcp_v2_required'
videofile: '#/components/schemas/stream_data_videofile_v2_required'
images: '#/components/schemas/stream_data_images_v2_required'
description: Stream setting parameters.
stream_endless:
type: boolean
default: true
description: |
Determines if stream is endless.
`True` value means that the stream is endless and EOF value will be treated as error (stream processing will be restarted).
Use `False` value if files are being transferred in the stream because it's not possible to determine whether file transfer ended or connection error occurred.
handler:
type: object
properties:
handler_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Handler ID created in the LUNA PLATFORM.
required: [ handler_id ]
jwt_token:
type: string
example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k
description: JWT token. It containts `token_id`, `expiration_time`, `account_id` and `visibility_area`.
token_authorization:
type: object
properties:
token:
$ref: "#/components/schemas/jwt_token"
required: [token]
account_authorization:
type: object
properties:
account_id:
allOf:
- $ref: "#/components/schemas/account_id"
- deprecated: true
required: [account_id]
event_handler_luna:
type: object
properties:
type:
type: string
default: luna_handler
enum: [luna_handler]
description: Handler type
handler_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Handler ID created in the LUNA PLATFORM.
frame_store:
type: string
example: http://127.0.0.1:5020/1/buckets/frames/images
nullable: true
description: URL for saving the faces or bodies source frames in the LUNA PLATFORM. You can specify the address to the bucket of the LUNA Image Store service, or the address to the "/images" resource of the LUNA API service.
authorization:
description: |
Authorization for requests to the LUNA API service of the LUNA PLATFORM.
oneOf:
- $ref: "#/components/schemas/token_authorization"
- $ref: "#/components/schemas/account_authorization"
required: [ handler_id, authorization, frame_store ]
stream_event_handler_v2:
oneOf:
- $ref: '#/components/schemas/event_handler_luna'
discriminator:
propertyName: "type"
mapping:
luna_handler: '#/components/schemas/event_handler_luna'
description: Parameters related to sending the best shots to LUNA PLATFORM and processing them using handlers.
stream_event_handler_base:
type: object
properties:
origin:
type: string
example: http://127.0.0.1:5000
description: API service origin of the deployed LUNA PLATFORM.
api_version:
type: integer
example: 6
description: API version of API service of the deployed LUNA PLATFORM.
bestshot_handler:
allOf:
- $ref: '#/components/schemas/handler'
description: Sets the static `handler_id` pre-created in LUNA PLATFORM to generate events based on the best shots of faces and/or bodies.
detection_handler:
allOf:
- $ref: '#/components/schemas/handler'
- nullable: true
deprecated: true
description: |
Sets the dynamic `handler_id` pre-created in LUNA PLATFORM to generate events containing the coordinates of the human body (x, y, width and height). These events are associated by `track_id` with events created using `bestshot_handler`.
**Only for processing bodies.**
frame_store:
type: string
example: http://127.0.0.1:5020/1/buckets/frames/images
nullable: true
description: URL for saving the faces or bodies source frames in the LUNA PLATFORM. You can specify the address to the bucket of the LUNA Image Store service, or the address to the "/images" resource of the LUNA API service.
authorization:
description: |
Authorization for requests to the LUNA API service of the LUNA PLATFORM.
If authorization not specified, the `account_id` from stream will be used.
oneOf:
- $ref: "#/components/schemas/token_authorization"
- $ref: "#/components/schemas/account_authorization"
example:
origin: http://127.0.0.1:5000
api_version: 6
bestshot_handler:
handler_id: ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
detection_handler:
handler_id: 426542d6-5509-4e5b-8a01-e2abd5c0a8c6
frame_store: http://127.0.0.1:5020/1/buckets/frames/images
authorization:
token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
description: Parameters related to sending the best shots to LUNA PLATFORM and processing them using handlers.
stream_event_handler:
allOf:
- $ref: '#/components/schemas/stream_event_handler_base'
required: [ origin, api_version, bestshot_handler ]
liveness_policy_template:
type: object
properties:
use_mask_liveness_filtration:
type: boolean
default: False
description: Whether to check the presence of a real person in the frame based on backgrounds.
use_flying_faces_liveness_filtration:
type: boolean
default: False
description: Whether to check the presence of a real person in the frame based on the facial surrounding.
liveness_mode:
type: integer
enum: [ 0, 1, 2 ]
default: 0
description: |
Which frames from track will undergo Liveness check.
There are three options for selecting a frame:
- 0 - first N frames
- 1 - last N frames before the best shot sending (recommended value)
- 2 - all frames in a track
number_of_liveness_checks:
type: integer
default: 0
example: 10
description: Number of frames to check for Liveness. The specified value is used in the `liveness_mode` parameter.
liveness_threshold:
type: number
format: float
default: 0
example: 0.6
description: Threshold for defining the presence of a real person in a frame. The system confirms that it is a real person in the frame, and not a photo, only if Liveness returned a value higher than the one specified in the parameter.
mask_backgrounds_count:
type: integer
default: 0
example: 300
description: Number of background frames that are used for the corresponding checks.
description: |
Stream Liveness check parameters.
**Only for processing faces.**
liveness_policy:
allOf:
- $ref: "#/components/schemas/liveness_policy_template"
properties:
use_shoulders_liveness_filtration:
type: boolean
default: False
deprecated: true
description: |
Whether to check the presence of a real person in the frame based on the head and shoulder areas.
The parameter is deprecated and will not affect any results.
livenesses_weights:
type: array
items:
type: number
format: float
minItems: 3
maxItems: 3
default: [ 0.0, 0.0, 0.0 ]
example: [ 0.0, 0.45, 0.5 ]
description: |
Determines the involvement of each Liveness check type (mask, and flying_faces) in the resulting estimation of the presence of a human face in the frame.
The liveness shoulders (first value) parameter will be 0.0 regardless to anything.
liveness_policy_v2:
allOf:
- $ref: "#/components/schemas/liveness_policy_template"
properties:
livenesses_weights:
type: array
items:
type: number
format: float
minItems: 2
maxItems: 2
default: [ 0.0, 0.0]
example: [ 0.45, 0.5 ]
description: |
Determines the involvement of each Liveness check type (mask, flying_faces) in the resulting estimation of the presence of a human face in the frame.
primary_track_policy:
type: object
properties:
use_primary_track_policy:
type: boolean
default: false
description: Whether to use primary track policy.
best_shot_min_size:
type: integer
default: 70
description: Minimal height of detections in pixels for primary track policy at which frame analysis begins and the best shot is determined.
best_shot_proper_size:
type: integer
default: 140
description: Height of detections in pixels for primary track policy. When detection reaches the defined value, track immediately sends all its best shots to LUNA PLATFORM.
description: |
Stream primary track policy parameters.
These parameters is used to work with Access Control Systems (ACS, turnstiles at the entrances to banks/office buildings) to simplify the control and the introduction of facial recognition technology at the entrance to a protected area.
**Only for processing faces. Not intended for use with "images" stream type.**
stream_policies:
type: object
properties:
sending:
type: object
properties:
time_period_of_searching:
type: integer
default: -1
minimum: -1
description: |
Interval in track after the end of which a best shot is sent to the server.
The measurement type is set in the `type` parameter. If the value is `-1` (by default), then frame analysis is performed on all frames until the end of the track. At the end of the track (when the object leaves the frame), the best frame will be sent to LUNA PLATFORM.
silent_period:
type: integer
default: 0
minimum: -1
description: |
Interval between period. Once the analysis period is over, the system holds this silent period before starting next period of frame analysis.
The measurement type is set in the `type` parameter. If the value is `-1`, then the silent period will last indefinitely.
type:
type: string
enum: [sec, frames]
default: sec
description: Measurement type for `time_period_of_searching` and `silent_period` parameters (per frames or per seconds).
number_of_bestshots_to_send:
type: integer
default: 1
description: Number of best shots that the user sets to receive from the track or certain periods of this track.
send_only_full_set:
type: boolean
default: true
description: |
Send data only if the required number of best shots (`number_of_bestshots_to_send` parameter of `FACE_STREAM_CONFIG` settings) and detections with human body coordinates `minimal_body_track_length_to_send` parameter of `FACE_STREAM_CONFIG` settings) have been collected.
**Only for processing bodies.**
delete_track_after_sending:
type: boolean
default: false
description: |
Whether to delete the best shots and detections with human body coordinates after sending the data.
**Only for processing bodies.**
description: Stream sending parameters.
primary_track_policy:
$ref: '#/components/schemas/primary_track_policy'
liveness:
$ref: '#/components/schemas/liveness_policy'
filtering:
type: object
properties:
min_score:
type: number
default: 0.5187
description: |
Score that defines detection quality. Threshold for filtering detections sent to LUNA PLATFORM.
Threshold must be different when working with **faces** and when working with **bodies**.
Recommended value for faces: **0.5187**
Recommended value for bodies: **0.5**
detection_yaw_threshold:
type: number
minimum: 0
maximum: 180
default: 40.0
description: |
Maximum value of head yaw angle in relation to camera.
**Only for processing faces.**
detection_pitch_threshold:
type: number
minimum: 0
maximum: 180
default: 40.0
description: |
Maximum value of head pitch angle in relation to camera.
**Only for processing faces.**
detection_roll_threshold:
type: number
minimum: 0
maximum: 180
default: 30.0
description: |
Maximum value of head roll angle in relation to camera.
**Only for processing faces.**
yaw_number:
type: integer
default: 1
description: |
Number of frames for image filtration based on head yaw angle.
The algorithm analyzes head yaw angles on each of those frames. If on one of them the angle is significantly different from the average
value of angles, the frame will not be considered as a candidate for best shot.
By default, the parameter is disabled, the value is `1`.
**Only for processing faces.**
yaw_collection_mode:
type: boolean
default: false
description: |
Whether to collect a certain number of frames set in `yaw_number` to analyze head yaw angle.
If `yaw_collection_mode` is disabled, then the system will analyze incoming frames sequentially,
i.e., first two frames are analyzed, then three, etc. The maximum number of frames in this sequence is set in `yaw_number` parameter.
**Only for processing faces.**
mouth_occlusion_threshold:
type: number
format: float
default: 0.0
example: 0.1
description: |
Maximum degree of overlap of the face mouth in the frame. I.e. when the value is equal to "0.5", 50% of the mouth can be occluded.
**Only for processing faces.**
min_body_size_threshold:
type: number
format: float
minimum: 0
default: 0.0
example: 0.1
description: |
Body detection size, less than which it will not be sent for processing.
It is calculated as the square root of the product of the body detection height (in pixels) by its width (in pixels).
If the value is `0`, then filtering of body detection by size will not be performed.
**Only for processing bodies.**
description: Stream filtering parameters.
frame_processing_mode:
$ref: '#/components/schemas/frame_processing_mode'
real_time_mode_fps:
$ref: '#/components/schemas/real_time_mode_fps'
ffmpeg_threads_number:
$ref: '#/components/schemas/ffmpeg_threads_number'
healthcheck:
$ref: '#/components/schemas/healthcheck_policy'
description: Stream processing parameters.
healthcheck_policy:
type: object
properties:
max_error_count:
type: integer
default: 10
description: |
Error count limit in period to consider stream to be alive.
The parameter works in conjunction with the `period` and `retry_delay` parameters. After receiving the first error, the wait specified in the `retry_delay` parameter is performed, and then the connection to the stream is retried. If during the time specified in the `period` parameter, the number of errors greater than or equal to the number specified in `max_error_count` was accumulated, then the processing of the stream will be terminated and its status will change to `failure`.
period:
type: integer
default: 3600
description: |
Period (in seconds) during which the number of errors is calculated.
The parameter works in conjunction with the `retry_delay` and `max_error_count` parameters. See the description of working with this parameter in the `max_error_count` parameter.
retry_delay:
type: integer
default: 5
description: |
Period after which the reconnection attempt is performed.
The parameter works in conjunction with the `period` and `max_error_count` parameters. See the description of working with this parameter in the `max_error_count` parameter.
timeout:
type: integer
minimum: 0
maximum: 2147483647
description: |
Timeout in milliseconds that is set to read the encoded packet.
description: Stream health check parameters. This section is used for reconnecting to the stream when errors occur while the video is streamed.
frame_processing_mode:
type: string
enum: [ auto, full, scale ]
default: auto
description: |
Whether full or scaled frame will be processed (`auto` - depends on `convert_full_frame` parameter from `FACE_STREAM_CONFIG` settings).
**Not intended for use with "images" stream type.**
real_time_mode_fps:
type: integer
default: 0
description: |
Number of FPS with which the video file will be processed.
**Intended for use with "videofile" stream type.**
ffmpeg_threads_number:
type: integer
default: 0
description: Number of threads for video decoding (`0` - chosen by decoder library).
stream_policies_with_defaults:
allOf:
- $ref: '#/components/schemas/stream_policies'
- properties:
sending:
required: [ time_period_of_searching, silent_period, type, number_of_bestshots_to_send, send_only_full_set, delete_track_after_sending ]
primary_track_policy:
required: [ use_primary_track_policy, best_shot_min_size, best_shot_proper_size ]
liveness:
required: [ use_shoulders_liveness_filtration, use_mask_liveness_filtration, use_flying_faces_liveness_filtration, liveness_mode, number_of_liveness_checks, liveness_threshold, livenesses_weights, mask_backgrounds_count ]
filtering:
required: [ min_score, detection_yaw_threshold, detection_pitch_threshold, detection_roll_threshold, yaw_number, yaw_collection_mode, mouth_occlusion_threshold ]
healthcheck:
required: [ max_error_count, period, retry_delay ]
required: [ sending, primary_track_policy, liveness, filtering, frame_processing_mode, real_time_mode_fps, ffmpeg_threads_number, healthcheck ]
stream_analytics_with_defaults:
allOf:
- $ref: '#/components/schemas/stream_analytics_v2'
- properties:
sending:
$ref: '#/components/schemas/sending_v2_required'
filtering:
required: [ min_score_face, min_score_body, detection_yaw_threshold, detection_pitch_threshold, detection_roll_threshold, yaw_number, yaw_collection_mode, mouth_occlusion_threshold ]
primary_track_policy:
required: [ use_primary_track_policy, best_shot_min_size, best_shot_proper_size ]
liveness:
required: [ use_mask_liveness_filtration, use_flying_faces_liveness_filtration, liveness_mode, number_of_liveness_checks, liveness_threshold, livenesses_weights, mask_backgrounds_count ]
healthcheck:
required: [ max_error_count, period, retry_delay ]
event_handler:
required: [type, handler_id, frame_store, authorization]
required: [mode, enabled, droi, filtering, liveness, primary_track_policy, sending, event_handler, healthcheck]
longitude:
type: number
minimum: -180
maximum: 180
example: 36.616
latitude:
type: number
minimum: -90
maximum: 90
example: 55.752
geo_position:
type: object
nullable: true
description: Geo position specified by geographic coordinates - longitude and latitude.
properties:
longitude:
allOf:
- $ref: '#/components/schemas/longitude'
- description: Longitude in degrees.
latitude:
allOf:
- $ref: '#/components/schemas/latitude'
- description: Latitude in degrees.
required: [longitude, latitude]
example:
longitude: 36.616
latitude: 55.752
location_to_be_created:
type: object
properties:
city:
allOf:
- $ref: '#/components/schemas/string36_nullable'
example: Moscow
description: City that stream belongs.
area:
allOf:
- $ref: '#/components/schemas/string36_nullable'
example: Central
description: Area that stream belongs.
district:
allOf:
- $ref: '#/components/schemas/string36_nullable'
example: Basmanny
description: District that stream belongs.
street:
allOf:
- $ref: '#/components/schemas/string36_nullable'
example: Podsosensky lane
description: Street that stream belongs.
house_number:
allOf:
- $ref: '#/components/schemas/string36_nullable'
example: 23 bldg.3
description: Street that stream belongs.
geo_position:
$ref: '#/components/schemas/geo_position'
description: Stream location parameters.
location:
allOf:
- $ref: '#/components/schemas/location_to_be_created'
required: [city, area, district, street, house_number, geo_position]
stream_autorestart:
type: object
properties:
restart:
type: integer
enum: [ 0, 1 ]
default: 0
description: Whether to allow autorestart.
attempt_count:
type: integer
minimum: 1
default: 10
description: Stream autorestart attempt count.
delay:
type: integer
minimum: 1
default: 60
description: |
Stream autorestart delay, in seconds.
Success or failure stream autorestart determines by last stream status received in *delay* seconds after *last_attempt_time*.
For more information about autorestart see *Streams automatic restart* chapter of development manual.
description: Stream autorestart parameters.
stream_autorestart_response:
allOf:
- $ref: '#/components/schemas/stream_autorestart'
- properties:
current_attempt:
type: integer
minimum: 0
nullable: true
description: Stream autorestart current attempt number | zero means no attempt was made
last_attempt_time:
allOf:
- $ref: '#/components/schemas/time'
nullable: true
description: Last autorestart attempt time | null means no attempt was made.
status:
type: string
nullable: false
enum: [ disabled, enabled, in_progress, failed, denied ]
description: |
Stream autorestart status.
| status | description |
|-------------|------------------------------------------|
| disabled | stream autorestart is disabled by user |
| enabled | stream autorestart is enabled |
| in_progress | autorestart in progress |
| failed | autorestart failed |
| denied | autorestart is denied due to fatal error |
> **WARNING**: Stream autorestart status list may be expanded in the future.
required: [ restart, attempt_count, delay, current_attempt, last_attempt_time, status ]
description: Stream autorestart parameters and status.
stream_version:
type: integer
minimum: 1
description: Stream version. Increased when stream data is updated via PUT /streams/{stream_id} method.
stream_status:
type: string
description: |
Stream processing status.
| Status | Value |
|-----------------|--------------------------------------------------------------------------|
| pending | Stream is waiting for handler. |
| in_progress | Stream processing is in progress. |
| done | Stream processing is completed. |
| pause | Stream processing is paused by user. |
| restart | Stream processing is restarted by server. |
| cancel | Stream processing is cancelled by user. |
| failure | Stream processing is failed by handler. |
| handler_lost | Stream processing handler is lost, needs to be passed to another handler. |
| not_found | Stream was removed during the processing. |
| deleted | Stream was removed intentionally. |
> **WARNING**: Stream status list may be expanded in the future.
stream_to_be_created_base:
type: object
properties:
account_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Stream account ID for authentication in LUNA PLATFORM.
name:
allOf:
- $ref: '#/components/schemas/string128_default'
description: Stream name.
default: ""
description:
allOf:
- $ref: '#/components/schemas/string512_default'
description: Stream description.
default: ""
data:
$ref: '#/components/schemas/stream_data'
event_handler:
$ref: '#/components/schemas/stream_event_handler'
policies:
$ref: '#/components/schemas/stream_policies'
location:
$ref: '#/components/schemas/location_to_be_created'
autorestart:
$ref: '#/components/schemas/stream_autorestart'
status:
type: string
enum: [ pending, pause ]
default: pending
description: Stream processing initial status.
required: [ account_id, data, event_handler]
stream_to_be_created_base_v2:
type: object
properties:
account_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Stream account ID for authentication in LUNA PLATFORM.
name:
allOf:
- $ref: '#/components/schemas/string128_default'
description: Stream name.
default: ""
description:
allOf:
- $ref: '#/components/schemas/string512_default'
description: Stream description.
default: ""
data:
$ref: '#/components/schemas/stream_data_v2'
location:
$ref: '#/components/schemas/location_to_be_created'
autorestart:
$ref: '#/components/schemas/stream_autorestart'
status:
type: string
enum: [ pending, pause ]
default: pending
description: Stream processing initial status.
required: [ account_id, data]
stream_with_group_name:
allOf:
- $ref: '#/components/schemas/stream_to_be_created_base'
- properties:
group_name:
$ref: '#/components/schemas/group_name'
stream_with_group_id:
allOf:
- $ref: '#/components/schemas/stream_to_be_created_base'
- properties:
group_id:
$ref: '#/components/schemas/group_id'
stream_with_group_name_v2:
allOf:
- $ref: '#/components/schemas/stream_to_be_created_base_v2'
- properties:
group_name:
$ref: '#/components/schemas/group_name'
stream_with_group_id_v2:
allOf:
- $ref: '#/components/schemas/stream_to_be_created_base_v2'
- properties:
group_id:
$ref: '#/components/schemas/group_id'
stream_to_be_created:
anyOf:
- $ref: '#/components/schemas/stream_with_group_name'
- $ref: '#/components/schemas/stream_with_group_id'
stream_to_be_created_v2:
anyOf:
- $ref: '#/components/schemas/stream_with_group_name_v2'
- $ref: '#/components/schemas/stream_with_group_id_v2'
stream_name:
allOf:
- $ref: '#/components/schemas/string128_default'
description: Stream name.
example: some name
stream_error:
type: string
nullable: True
description: |
Stream processing error description.
> **WARNING**: Fatal error prevent stream autorestart. Currently, fatal error is considered "Failed to authorize in Luna Platform".
See [developer manual](#operation/getDevManual) for more information.
example: null
video_info:
type: object
properties:
width:
type: integer
description: Stream source video width.
example: 1920
height:
type: integer
description: Stream source video height.
example: 1080
frame_rate:
type: integer
description: Stream source video frame rate.
example: 25
bit_rate:
type: integer
description: Stream source video bit rate.
example: 25
gop_size:
type: integer
description: Stream source video gop (group of frames) size.
example: 25
start_time:
allOf:
- $ref: '#/components/schemas/time'
description: Start time of stream processing.
duration:
type: number
minimum: 0
description: Duration of the video in seconds.
progress:
type: number
minimum: 0
maximum: 1
description: Video processing progress.
required: [ width, height, frame_rate, bit_rate, gop_size, start_time]
nullable: True
description: Stream source video info.
stream_response_v2:
type: object
properties:
stream_id:
$ref: '#/components/schemas/stream_id'
account_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Stream account ID.
name:
$ref: '#/components/schemas/stream_name'
description:
allOf:
- $ref: '#/components/schemas/string128_default'
description: Stream description.
example: some description
data:
$ref: '#/components/schemas/stream_data_v2_required'
location:
$ref: '#/components/schemas/location'
autorestart:
$ref: '#/components/schemas/stream_autorestart_response'
version:
$ref: '#/components/schemas/stream_version'
create_time:
allOf:
- $ref: '#/components/schemas/time'
description: Stream create time.
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending,in_progress,done,pause,cancel,failure]
example: pending
last_error:
$ref: '#/components/schemas/stream_error'
video_info:
$ref: '#/components/schemas/video_info'
groups:
type: array
items:
$ref: '#/components/schemas/group_name'
description: List of groups the stream belongs to.
preview:
$ref: '#/components/schemas/preview_nullable'
required: [ stream_id, account_id, name, description, data, location, autorestart, version, create_time, status, last_error, video_info, groups, preview ]
stream_response:
type: object
properties:
stream_id:
$ref: '#/components/schemas/stream_id'
account_id:
allOf:
- $ref: '#/components/schemas/uuid'
description: Stream account ID.
name:
$ref: '#/components/schemas/stream_name'
description:
allOf:
- $ref: '#/components/schemas/string128_default'
description: Stream description.
example: some description
data:
$ref: '#/components/schemas/stream_data_required'
event_handler:
$ref: '#/components/schemas/stream_event_handler_base'
policies:
$ref: '#/components/schemas/stream_policies_with_defaults'
location:
$ref: '#/components/schemas/location'
autorestart:
$ref: '#/components/schemas/stream_autorestart_response'
version:
$ref: '#/components/schemas/stream_version'
create_time:
allOf:
- $ref: '#/components/schemas/time'
description: Stream create time.
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending,in_progress,done,pause,cancel,failure]
example: pending
last_error:
$ref: '#/components/schemas/stream_error'
video_info:
$ref: '#/components/schemas/video_info'
groups:
type: array
items:
$ref: '#/components/schemas/group_name'
description: List of groups the stream belongs to.
preview:
$ref: '#/components/schemas/preview_nullable'
required: [ stream_id, account_id, name, description, data, event_handler, policies, location, autorestart, version, create_time, status, last_error, video_info, groups, preview ]
stream_to_be_patched:
type: object
properties:
description:
allOf:
- $ref: '#/components/schemas/string128_default'
description: New stream description.
status:
type: string
enum: [ pending, pause, cancel ]
description: New stream processing status.
minProperties: 1
example:
description: Cancelled stream description.
status: cancel
queue_streams_response_pending_base:
description: Streams from the Stream Processing Queue.
type: object
properties:
streams:
description: Array of the streams. Ordered by status last update time (old first).
type: array
required: [streams]
queue_streams_response_pending_v1:
allOf:
- $ref: '#/components/schemas/queue_streams_response_pending_base'
- type: object
properties:
streams:
type: array
items:
allOf:
- $ref: '#/components/schemas/stream_response'
properties:
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending ]
queue_streams_response_pending_v2:
allOf:
- $ref: '#/components/schemas/queue_streams_response_pending_base'
- type: object
properties:
streams:
type: array
items:
allOf:
- $ref: '#/components/schemas/stream_response_v2'
properties:
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending ]
queue_streams_response_in_progress_base:
description: Streams from the Stream Processing Queue.
type: object
properties:
streams:
description: Array of the streams. Ordered by status last update time (old first).
type: array
items:
properties:
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [in_progress]
example: in_progress
required: [ stream_id, name, description, data, event_handler, policies, location, autorestart, version, create_time, status, last_error, video_info, groups]
required: [streams]
queue_streams_response_in_progress:
allOf:
- $ref: '#/components/schemas/queue_streams_response_in_progress_base'
type: object
properties:
streams:
type: array
items:
allOf:
- $ref: '#/components/schemas/stream_response'
properties:
data:
$ref: '#/components/schemas/stream_data'
queue_streams_response_in_progress_v2:
allOf:
- $ref: '#/components/schemas/queue_streams_response_in_progress_base'
type: object
properties:
streams:
type: array
items:
allOf:
- $ref: '#/components/schemas/stream_response_v2'
properties:
data:
$ref: '#/components/schemas/stream_data_v2'
post_streams_processing_queue_request_filters:
type: object
properties:
stream_ids:
description: Stream ID filter. Only streams with the specified ids will be returned in the response.
type: array
items:
$ref: '#/components/schemas/stream_id'
maxItems: 1000
names:
description: Stream name filter. Only streams with the specified names will be returned in the response.
type: array
items:
$ref: '#/components/schemas/stream_name'
maxItems: 1000
group_ids:
description: Group ID filter. Only streams with the specified ids will be returned in the response.
type: array
items:
$ref: '#/components/schemas/group_id'
maxItems: 1000
group_names:
description: Group name filter. Only streams with the specified names will be returned in the request.
type: array
items:
$ref: '#/components/schemas/group_name'
maxItems: 1000
post_streams_processing_queue_request:
description: Request data. Query for the streams queue.
type: object
properties:
filters:
$ref: '#/components/schemas/post_streams_processing_queue_request_filters'
limit:
type: integer
minimum: 1
description: Maximum number of the streams to return.
required: [filters, limit]
preview_url:
type: string
format: uri-reference
maxLength: 256
live_preview:
type: object
properties:
url:
allOf:
- $ref: '#/components/schemas/preview_url'
description: Live preview URL.
description: Live preview data.
last_frame_preview:
type: object
properties:
url:
allOf:
- $ref: '#/components/schemas/preview_url'
description: Last frame preview URL.
description: Last frame preview data.
preview:
type: object
properties:
live:
$ref: '#/components/schemas/live_preview'
last_frame:
$ref: '#/components/schemas/last_frame_preview'
description: Preview data.
preview_nullable:
allOf:
- $ref: '#/components/schemas/preview'
nullable: true
post_streams_processing_feedback_request:
description: Streams info object.
type: object
properties:
streams:
description: Array of stream info.
type: array
items:
description: Stream info from the processor.
type: object
properties:
error:
$ref: '#/components/schemas/stream_error'
video_info:
$ref: '#/components/schemas/video_info'
stream_id:
$ref: '#/components/schemas/stream_id'
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [in_progress, done, failure]
example: in_progress
version:
$ref: '#/components/schemas/stream_version'
preview:
$ref: '#/components/schemas/preview'
required: [ error, video_info, stream_id, status, version ]
required: [streams]
feedback_response_modified_stream:
description: Current stream info as is in the database (differs from the info in the request).
type: object
properties:
stream_id:
$ref: '#/components/schemas/stream_id'
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending,in_progress,done,pause,cancel,failure,not_found ]
example: in_progress
version:
allOf:
- $ref: '#/components/schemas/stream_version'
minimum: 0 # if stream was not found
required: [ stream_id, status, version ]
feedback_response_unmodified_stream:
description: Current stream info as is in the database (same as in the request).
type: object
properties:
stream_id:
$ref: '#/components/schemas/stream_id'
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ in_progress, done, failure ]
example: in_progress
version:
$ref: '#/components/schemas/stream_version'
required: [ stream_id, status, version ]
feedback_response:
description: Streams info object.
type: object
properties:
streams:
description: Stream info objects.
type: object
properties:
modified:
description: Streams that need reload.
type: array
items:
$ref: '#/components/schemas/feedback_response_modified_stream'
unmodified:
description: Streams that do not need reload.
type: array
items:
$ref: '#/components/schemas/feedback_response_unmodified_stream'
required: [modified, unmodified]
required: [streams]
log_time:
allOf:
- $ref: '#/components/schemas/time'
- description: Log record time.
streams_logs:
type: object
properties:
logs:
type: array
description: Streams logs.
items:
type: object
properties:
stream_id:
$ref: '#/components/schemas/stream_id'
log_time:
$ref: '#/components/schemas/log_time'
error:
$ref: '#/components/schemas/stream_error'
status:
allOf:
- $ref: '#/components/schemas/stream_status'
enum: [ pending, in_progress, done, pause, restart, cancel, failure, handler_lost, deleted ]
example: in_progress
video_info:
$ref: '#/components/schemas/video_info'
version:
$ref: '#/components/schemas/stream_version'
preview:
$ref: '#/components/schemas/preview_nullable'
minProperties: 1
minItems: 0
required: [logs]
streams_logs_deleted_count:
type: object
properties:
deleted_count:
type: integer
description: Deleted logs count.
example: 1000
required: [ deleted_count ]
streams_to_be_deleted:
type: object
properties:
stream_ids:
description: Stream ID filter.
nullable: true
type: array
items:
$ref: '#/components/schemas/stream_id'
maxItems: 1000
names:
description: Stream name filter.
nullable: true
type: array
items:
$ref: '#/components/schemas/stream_name'
maxItems: 1000
group_name:
type: string
pattern: '^[a-zA-Z0-9_\-]{1,128}$'
description: Stream group name.
example: "hd_stream_2"
group_description:
type: string
description: Stream group description.
maxLength: 256
create_group:
type: object
properties:
account_id:
$ref: '#/components/schemas/account_id'
group_name:
$ref: '#/components/schemas/group_name'
description:
allOf:
- $ref: '#/components/schemas/group_description'
default: ""
required: [ account_id, group_name ]
example:
account_id: ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
group_name: "stream_group-1"
description: "default stream group"
create_group_response:
type: object
properties:
group_id:
$ref: '#/components/schemas/group_id'
group_name:
$ref: '#/components/schemas/group_name'
required: [ group_id, group_name ]
example:
group_id: "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
group_name: "stream_group-1"
groups_count:
type: object
properties:
groups_count:
type: integer
description: Count of groups.
required: [ groups_count ]
example:
groups_count: 7
update_group:
type: object
properties:
description:
allOf:
- $ref: '#/components/schemas/group_description'
required: [ description ]
example:
description: "old stream group"
group_response:
type: object
properties:
group_name:
$ref: '#/components/schemas/group_name'
group_id:
$ref: '#/components/schemas/group_id'
account_id:
$ref: '#/components/schemas/account_id'
description:
$ref: '#/components/schemas/group_description'
create_time:
allOf:
- $ref: '#/components/schemas/time'
description: Group create time.
required: [ account_id, group_name, group_id, description, create_time ]
example:
account_id: ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
group_name: "stream_group-1"
group_id: "b5d6fd45-fcca-453d-ac05-3e594054b813"
description: "default stream group"
create_time: "2018-08-11T09:11:41.674Z"
linker:
type: object
properties:
action:
description: "Action to perform: attach or detach streams to group."
type: string
enum: [attach, detach]
stream_ids:
description: Stream IDs.
type: array
maxItems: 1000
items:
$ref: '#/components/schemas/uuid'
group_id:
$ref: '#/components/schemas/group_id'
required: [action, stream_ids, group_id]
plugin_status:
type: object
properties:
name:
type: string
description: Plugin name
running:
type: integer
enum: [0, 1]
description: Whether plugin is running or not.
required: [name, running]
plugins:
type: object
properties:
plugins:
description: list of imported plugins
type: array
items:
$ref: '#/components/schemas/plugin_status'
required: [plugins]
example:
plugins:
- name: foo
running: 1
responses:
internal_server_error:
description: Internal server error.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
license_problem:
description: License problem.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
no_license_info:
value:
error_code: 11055
desc: Forbidden
detail: "License problem: Cannot get license information"
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055
license_expired:
value:
error_code: 11055
desc: Forbidden
detail: "License problem: License expired"
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055
license_limit_exceeded:
value:
error_code: 11055
desc: Forbidden
detail: "License problem: Streams license limit exceeded. Please contact VisionLabs for license upgrade or delete redundant streams"
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-11055
forbidden_resource_error:
description: Forbidden.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
resource_is_disabled:
value:
error_code: 12049
desc: Forbidden
detail: Resource is disabled.
link: "https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12049"
paths:
/version:
get:
tags:
- version
summary: get version
description: Get service version.
operationId: getVersion
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/version'
application/msgpack:
schema:
$ref: '#/components/schemas/version'
500:
$ref: '#/components/responses/internal_server_error'
/1/streams:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- streams
summary: create stream
description: Create stream.
operationId: createStream
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
x-codeSamples:
- lang: bash
source: |
curl --location --request POST 'http://127.0.0.1:5160/1/streams' \
--header 'Luna-Request-Id: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a' \
--header 'Content-Type: application/json' \
--data '{
"account_id": "557d54ec-29ad-4f3c-93b4-c9092ef12515",
"name": "Stream 1",
"description": "Stream with tcp stream type",
"data": {
"type": "tcp",
"reference": "rtsp://some_stream_address",
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"rotation": 0,
"preferred_program_stream_frame_width": 800,
"endless": true
},
"event_handler": {
"origin": "http://127.0.0.1:5000",
"api_version": 6,
"bestshot_handler": {
"handler_id": "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
},
"detection_handler": {
"handler_id": "426542d6-5509-4e5b-8a01-e2abd5c0a8c6"
},
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
},
"policies": {
"sending": {
"time_period_of_searching": -1,
"silent_period": 0,
"type": "sec",
"number_of_bestshots_to_send": 1,
"send_only_full_set": true,
"delete_track_after_sending": false
},
"primary_track_policy": {
"use_primary_track_policy": false,
"best_shot_min_size": 70,
"best_shot_proper_size": 140
},
"liveness": {
"use_shoulders_liveness_filtration": false,
"use_mask_liveness_filtration": false,
"use_flying_faces_liveness_filtration": false,
"liveness_mode": 0,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.05,
0.45,
0.5
],
"mask_backgrounds_count": 300
},
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold": 0.1,
"min_body_size_threshold": 0.1
},
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"healthcheck": {
"max_error_count": 10,
"period": 3600,
"retry_delay": 5,
"timeout": 123
}
},
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"autorestart": {
"restart": 0,
"attempt_count": 10,
"delay": 60
},
"status": "pending",
"group_name": "hd_stream_2"
}'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_created'
examples:
type_tcp_udp:
summary: stream type is tcp or udp
value:
{
"account_id": "557d54ec-29ad-4f3c-93b4-c9092ef12515",
"name": "Stream 1",
"description": "Stream with tcp stream type",
"data": {
"type": "tcp",
"reference": "rtsp://some_stream_address",
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"rotation": 0,
"preferred_program_stream_frame_width": 800,
"endless": true
},
"event_handler": {
"origin": "http://127.0.0.1:5000",
"api_version": 6,
"bestshot_handler": {
"handler_id": "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
},
"detection_handler": {
"handler_id": "426542d6-5509-4e5b-8a01-e2abd5c0a8c6"
},
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
},
"policies": {
"sending": {
"time_period_of_searching": -1,
"silent_period": 0,
"type": "sec",
"number_of_bestshots_to_send": 1,
"send_only_full_set": true,
"delete_track_after_sending": false
},
"primary_track_policy": {
"use_primary_track_policy": false,
"best_shot_min_size": 70,
"best_shot_proper_size": 140
},
"liveness": {
"use_shoulders_liveness_filtration": false,
"use_mask_liveness_filtration": false,
"use_flying_faces_liveness_filtration": false,
"liveness_mode": 0,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.05,
0.45,
0.5
],
"mask_backgrounds_count": 300
},
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold": 0.1,
"min_body_size_threshold": 0.1
},
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"healthcheck": {
"max_error_count": 10,
"period": 3600,
"retry_delay": 5,
"timeout": 123
}
},
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"autorestart": {
"restart": 0,
"attempt_count": 10,
"delay": 60
},
"status": "pending",
"group_name": "hd_stream_2"
}
type_tcp_udp_usb:
summary: stream type is tcp or udp with usb device
value:
{
"account_id": "557d54ec-29ad-4f3c-93b4-c9092ef12515",
"name": "Stream 1",
"description": "Stream with tcp stream type with usb device",
"data": {
"type": "tcp",
"reference": "/dev/video0",
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"rotation": 0,
"preferred_program_stream_frame_width": 800,
"endless": true
},
"event_handler": {
"origin": "http://127.0.0.1:5000",
"api_version": 6,
"bestshot_handler": {
"handler_id": "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
},
"detection_handler": {
"handler_id": "426542d6-5509-4e5b-8a01-e2abd5c0a8c6"
},
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
},
"policies": {
"sending": {
"time_period_of_searching": -1,
"silent_period": 0,
"type": "sec",
"number_of_bestshots_to_send": 1,
"send_only_full_set": true,
"delete_track_after_sending": false
},
"primary_track_policy": {
"use_primary_track_policy": false,
"best_shot_min_size": 70,
"best_shot_proper_size": 140
},
"liveness": {
"use_shoulders_liveness_filtration": false,
"use_mask_liveness_filtration": false,
"use_flying_faces_liveness_filtration": false,
"liveness_mode": 0,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.05,
0.45,
0.5
],
"mask_backgrounds_count": 300
},
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold": 0.1,
"min_body_size_threshold": 0.1
},
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"healthcheck": {
"max_error_count": 10,
"period": 3600,
"retry_delay": 5,
"timeout": 123
}
},
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"autorestart": {
"restart": 0,
"attempt_count": 10,
"delay": 60
},
"status": "pending",
"group_name": "hd_stream_2"
}
type_videofile:
summary: stream type is videofile
value:
{
"account_id": "557d54ec-29ad-4f3c-93b4-c9092ef12515",
"name": "Stream 1",
"description": "Stream with videofile stream type",
"data": {
"type": "videofile",
"reference": "/example/path/to/video/video.mp4",
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"rotation": 0,
"preferred_program_stream_frame_width": 800
},
"event_handler": {
"origin": "http://127.0.0.1:5000",
"api_version": 6,
"bestshot_handler": {
"handler_id": "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
},
"detection_handler": {
"handler_id": "426542d6-5509-4e5b-8a01-e2abd5c0a8c6"
},
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
},
"policies": {
"sending": {
"time_period_of_searching": -1,
"silent_period": 0,
"type": "sec",
"number_of_bestshots_to_send": 1,
"send_only_full_set": true,
"delete_track_after_sending": false
},
"primary_track_policy": {
"use_primary_track_policy": false,
"best_shot_min_size": 70,
"best_shot_proper_size": 140
},
"liveness": {
"use_shoulders_liveness_filtration": false,
"use_mask_liveness_filtration": false,
"use_flying_faces_liveness_filtration": false,
"liveness_mode": 0,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.05,
0.45,
0.5
],
"mask_backgrounds_count": 300
},
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold": 0.1,
"min_body_size_threshold": 0.1
},
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"healthcheck": {
"max_error_count": 10,
"period": 3600,
"retry_delay": 5,
"timeout": 123
}
},
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"autorestart": {
"restart": 0,
"attempt_count": 10,
"delay": 60
},
"status": "pending",
"group_name": "hd_stream_2"
}
type_images:
summary: stream type is images
value:
{
"account_id": "557d54ec-29ad-4f3c-93b4-c9092ef12515",
"name": "Stream 1",
"description": "Stream with images stream type",
"data": {
"type": "images",
"reference": "/example/path/to/images/",
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs",
},
"rotation": 0,
"preferred_program_stream_frame_width": 800,
"mask": "example1_%04d.jpg"
},
"event_handler": {
"origin": "http://127.0.0.1:5000",
"api_version": 6,
"bestshot_handler": {
"handler_id": "ee4c42b6-23ae-410e-a2aa-a4220e64ba4b"
},
"detection_handler": {
"handler_id": "426542d6-5509-4e5b-8a01-e2abd5c0a8c6"
},
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
},
"policies": {
"sending": {
"time_period_of_searching": -1,
"silent_period": 0,
"type": "sec",
"number_of_bestshots_to_send": 1,
"send_only_full_set": true,
"delete_track_after_sending": false
},
"primary_track_policy": {
"use_primary_track_policy": false,
"best_shot_min_size": 70,
"best_shot_proper_size": 140
},
"liveness": {
"use_shoulders_liveness_filtration": false,
"use_mask_liveness_filtration": false,
"use_flying_faces_liveness_filtration": false,
"liveness_mode": 0,
"number_of_liveness_checks": 10,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.05,
0.45,
0.5
],
"mask_backgrounds_count": 300
},
"filtering": {
"min_score": 0.5187,
"detection_yaw_threshold": 40,
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"yaw_number": 1,
"yaw_collection_mode": false,
"mouth_occlusion_threshold": 0.1,
"min_body_size_threshold": 0.1
},
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"healthcheck": {
"max_error_count": 10,
"period": 3600,
"retry_delay": 5,
"timeout": 123
}
},
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"autorestart": {
"restart": 0,
"attempt_count": 10,
"delay": 60
},
"status": "pending",
"group_name": "hd_stream_2"
}
required: true
responses:
201:
description: Create success.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
stream_id:
allOf:
- $ref: '#/components/schemas/stream_id'
description: |
ID of the created stream.
The ID can be used as the `stream_id` parameter in [GET](#operation/getStream) `/streams/{stream_id}`.
version:
type: integer
enum: [1]
description: Stream initial version.
required: [ stream_id, version ]
example:
stream_id: b5d6fd45-fcca-453d-ac05-3e594054b813
version: 1
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'status', message: unexpected value; permitted: 'pending', 'pause'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
403:
$ref: '#/components/responses/license_problem'
500:
$ref: '#/components/responses/internal_server_error'
get:
tags:
- streams
summary: get streams
description: Get streams according to filters. The results are sorted by stream creation order, the oldest streams shown first.
operationId: getStreams
parameters:
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_id__gte'
- $ref: '#/components/parameters/stream_id__lt'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/stream_reference'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/stream_create_time__gte'
- $ref: '#/components/parameters/stream_create_time__lt'
- $ref: '#/components/parameters/group_name'
- $ref: '#/components/parameters/order'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
streams:
type: array
items:
$ref: '#/components/schemas/stream_response'
minItems: 0
required: [ streams ]
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'stream_ids'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams
summary: delete streams
description: Delete streams matching specified filters (OR).
operationId: deleteStreams
parameters:
- $ref: '#/components/parameters/account_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/streams_to_be_deleted'
required: true
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: '''', message: ''Additional properties are not
allowed (''faces'' was unexpected)'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/1/streams/count:
get:
tags:
- streams
summary: count streams
description: |
Count streams according to the filters.
operationId: countStreams
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/stream_reference'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/stream_create_time__gte'
- $ref: '#/components/parameters/stream_create_time__lt'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
streams_count:
allOf:
- $ref: '#/components/schemas/count'
description: Streams count.
description: Stream count.
required: [ streams_count ]
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'stream_ids'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/1/streams/{stream_id}:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- in: path
name: stream_id
schema:
$ref: '#/components/schemas/uuid'
required: true
description: ID of the stream (`stream_id` received in the ["create stream"](#operation/createStream) request request).
get:
tags:
- streams
summary: get stream
description: Get the stream by ID.
operationId: getStream
parameters:
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/stream_response'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
patch:
tags:
- streams
summary: update stream
description: |
Update stream fields: *description*, *status*.
operationId: patchStream
parameters:
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_patched'
required: true
responses:
204:
description: Update success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
nothing_to_update:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: '''', message: ''at least one field must have a value'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
invalid_status:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: ''status'', message: ''unexpected value; permitted: ''pending'', ''pause'', ''cancel'''''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
extra_fields:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: ''user_data'', message: ''extra fields not permitted'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
unable_to_pause:
value:
error_code: 39003
desc: Unable to stop processing
detail: 'Processing of stream with id ''557d54ec-29ad-4f3c-93b4-c9092ef12515'' is already in progress and cannot be stopped.'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39003
unable_to_cancel:
value:
error_code: 39005
desc: Unable to cancel processing
detail: 'Processing of streams with id ''557d54ec-29ad-4f3c-93b4-c9092ef12515'' is finished and cannot be cancelled'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39005
403:
$ref: '#/components/responses/license_problem'
404:
description: Stream not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
put:
tags:
- streams
summary: put stream
description: Update existing stream. You should specify all the fields required for the stream in the request.
operationId: putStream
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_created'
required: true
responses:
200:
description: Put success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
stream_id:
allOf:
- $ref: '#/components/schemas/stream_id'
description: |
ID of the stream that was put.
The ID can be used as the `stream_id` parameter in [GET](#operation/getStream) `/streams/{stream_id}`.
version:
allOf:
- $ref: '#/components/schemas/stream_version'
description: Stream current version (incremented on every change).
required: [ stream_id, version ]
example:
stream_id: b5d6fd45-fcca-453d-ac05-3e594054b813
version: 10
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'status', message: unexpected value; permitted: 'pending', 'pause'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
403:
$ref: '#/components/responses/license_problem'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams
summary: remove stream
description: Remove the stream by ID.
operationId: removeStream
parameters:
- $ref: '#/components/parameters/account_id'
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
/1/streams/processing/queue:
parameters:
- $ref: '#/components/parameters/luna_request_id'
get:
tags:
- queue
summary: check the streams processing queue
description: See the streams in the queue.
operationId: getStreamsQueue
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/queue_streams_response_pending_v1'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'limit'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
post:
tags:
- queue
summary: get some streams from the queue
description: |
Receive streams from the queue. The streams are received according to the specified filters.
The following actions are performed upon the request:
- The streams are marked as "in progress".
- The streams are deleted from the Streams Processing Queue.
The information about the streams is returned in the response.
operationId: getStreamsFromQueue
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post_streams_processing_queue_request'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/queue_streams_response_in_progress'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json. Path: 'filters', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/1/streams/processing/feedback:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- queue
summary: post feedback on streams
description: |
Post information about streams processing.
operationId: postStreamsFeedback
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post_streams_processing_feedback_request'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/feedback_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json. Path: 'streams', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/1/streams/{stream_id}/preview/handler/frame:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/stream_id_path'
get:
tags:
- preview
summary: get last frame preview
description: |
Get stream last frame preview.
To add preview for stream, use ["post feedback on streams"](#operation/postStreamsFeedback) request to create last frame preview.
operationId: previewFrameProxy
parameters:
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
stream_not_found:
value:
error_code: 39001
desc: Object not found
detail: Stream with id 00000000-0000-4000-a000-000000642312 not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
preview_not_found:
value:
error_code: 39009
desc: Forbidden
detail: Not found `live` preview url for stream with id '00000000-0000-4000-a000-000000642312'.
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39009
500:
description: Internal server error.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal_server_error:
value:
error_code: 1
desc: internal server error
detail: internal server error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
stream_not_found:
value:
error_code: 39010
desc: Preview processing error
detail: Connection refused
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39010
/1/streams/{stream_id}/preview/handler/live:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/stream_id_path'
get:
tags:
- preview
summary: get live preview
description: |
Get stream live preview.
To add preview for stream, use ["post feedback on streams"](#operation/postStreamsFeedback) request to create live preview.
operationId: previewLiveProxy
parameters:
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
stream_not_found:
value:
error_code: 39001
desc: Object not found
detail: Stream with id 00000000-0000-4000-a000-000000642312 not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
preview_not_found:
value:
error_code: 39009
desc: Forbidden
detail: Not found `live` preview url for stream with id '00000000-0000-4000-a000-000000642312'.
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39009
500:
description: Internal server error.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal_server_error:
value:
error_code: 1
desc: internal server error
detail: internal server error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
stream_not_found:
value:
error_code: 39010
desc: Preview processing error
detail: Connection refused
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39010
/1/streams/logs:
get:
tags:
- streams logs
summary: get streams logs
description: Get streams logs according to filters. The results are sorted by log creation order,
the new streams logs shown first.
operationId: getStreamsLogs
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/log_targets'
- $ref: '#/components/parameters/log_time__lt'
- $ref: '#/components/parameters/log_time__gte'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/streams_logs'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'log_time__lt'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams logs
summary: delete stream logs
description: |
Delete streams logs older than specified date excluding last log entry.
Also you can run streams logs auto deletion by using `LUNA_STREAMS_LOGS_CLEAR_INTERVAL` setting.
For more information see development documentation.
operationId: deleteStreamsLogs
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/log_time__lt_deleting'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/streams_logs_deleted_count'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'log_time__lt'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/1/groups:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- groups
summary: create group
description: Create group.
operationId: createGroup
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_group'
required: true
responses:
201:
description: Create success.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Location:
schema:
type: string
format: url
example: /1/groups/group-1
description: Location of new group.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_group_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'account_id', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
409:
description: Conflict
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39006
desc: Unique constraint error
detail: Group named 'group1' already exists
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39006
500:
$ref: '#/components/responses/internal_server_error'
get:
tags:
- groups
summary: get groups
description: Get groups according to filters. The results are sorted by group creation order, the oldest group shown first.
operationId: getGroups
parameters:
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
groups:
type: array
items:
$ref: '#/components/schemas/group_response'
minItems: 0
required: [ groups ]
example:
- account_id: ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
group_name: "stream_group-1"
group_id: "b5d6fd45-fcca-453d-ac05-3e594054b813"
description: "default stream group"
create_time: "2018-08-11T09:11:41.674Z"
- account_id: 2d6cbe1f-cbbe-485a-ab37-b968cc5e8764
group_name: "stream_group-2"
group_id: "a7d8fd45-fgga-453d-ac05-3e594054b813"
description: "stream group 2"
create_time: "2019-10-11T10:11:41.674Z"
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/1/groups/count:
get:
tags:
- groups
summary: get group count
description: |
Count of groups according to the filters.
operationId: countGroups
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/groups_count'
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/1/groups/{group_id}:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- in: path
name: group_id
schema:
$ref: '#/components/schemas/uuid'
required: true
description: ID of the group (`group_id` received in the ["create group"](#operation/createGroup) request).
get:
tags:
- groups
summary: get group
description: Get the group by name.
operationId: getGroup
parameters:
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/group_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
patch:
tags:
- groups
summary: update group
description: |
Update group fields: *description*
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
- $ref: '#/components/parameters/account_id'
operationId: patchGroup
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_group'
required: true
responses:
204:
description: Update success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- groups
summary: remove group
description: Remove the group by name.
operationId: deleteGroup
parameters:
- $ref: '#/components/parameters/account_id'
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
/1/linker:
patch:
tags:
- linker
summary: attach (or detach) streams to a group
description: Attach (or detach) streams to a group.
operationId: linker
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/linker'
responses:
204:
description: Operation succeeded
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/1/docs/spec:
get:
tags:
- documents
summary: get openapi documentation
description: |
Get service OpenApi documentation. If *Accept* request header is of type `application/x-yaml`,
returns documentation in `yaml` format or returns `html` documentation, if *Accept-Type* is `text/html`
operationId: getSpec
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/accept_docs_handler'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/docs_content_type'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/x-yaml:
schema:
type: string
description: YAML format documentation.
text/html:
schema:
type: string
description: HTML format documentation.
415:
description: Unsupported Media Type
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
unsupported_media_type:
value:
error_code: 12024
detail: Bad/incomplete input data
desc: Unsupported media type
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
500:
$ref: '#/components/responses/internal_server_error'
/1/docs/dev:
parameters:
- $ref: '#/components/parameters/Accept'
get:
tags:
- documents
summary: get development manual
description: |
Get sphinx documentation - *Development Manual*. After the request you will be redirected to the page `/docs/dev/index.html`
operationId: getDevManual
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/text_html'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
text/html:
schema:
type: string
description: HTML format documentation.
500:
$ref: '#/components/responses/internal_server_error'
/1/config:
get:
tags:
- config
summary: get service configuration
description: Get service configuration. Passwords and tokens will be hidden in the response.
operationId: getConfig
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/accept_config_handler'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/config_accept_content_type'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
description: JSON format configuration.
example:
INFLUX_MONITORING:
SEND_DATA_FOR_MONITORING: 0
VERSION: 2
ORGANIZATION: ORGANIZATION_NAME
TOKEN: '********'
BUCKET: luna_monitoring
HOST: 127.0.0.1
PORT: 8086
USE_SSL: 0
FLUSHING_PERIOD: 1.0
text/plain:
schema:
type: string
description: Text format configuration.
example: |
[INFLUX_MONITORING]
SEND_DATA_FOR_MONITORING = 0
VERSION = 2
ORGANIZATION = ORGANIZATION_NAME
TOKEN = ********
BUCKET = luna_monitoring
HOST = 127.0.0.1
PORT = 8086
USE_SSL = 0
FLUSHING_PERIOD = 1.0
415:
description: Unsupported media type.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
unsupported_media_type:
value:
error_code: 12024
detail: Bad/incomplete input data
desc: Unsupported media type
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
500:
$ref: '#/components/responses/internal_server_error'
/1/plugins:
get:
tags:
- plugins
summary: get list of plugins
description: |
Get list of service plugins
operationId: getPlugins
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/plugins'
500:
$ref: '#/components/responses/internal_server_error'
/2/streams:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- streams V2
summary: create stream
description: Create stream .
operationId: createStreamV2
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
x-codeSamples:
- lang: bash
source: |
curl --location --request POST 'http://127.0.0.1:5160/1/streams' \
--header 'Luna-Request-Id: 1536751345,8b8b5937-2e9c-4e8b-a7a7-5caf86621b5a' \
--header 'Content-Type: application/json' \
--data '{
"account_id": "d00e78dd-b91e-4686-866c-d69a493e5b5f",
"data": {
"analytics": [{
"mode": 1,
"enabled": true,
"droi": [
0,
0,
0,
0
],
"filtering": {
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"detection_yaw_threshold": 40,
"min_body_size_threshold": 250,
"min_score_face": 0.5187,
"min_score_body": 0.5,
"mouth_occlusion_threshold": 0,
"yaw_collection_mode": false,
"yaw_number": 1
},
"liveness": {
"liveness_mode": 1,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.45,
0.5
],
"mask_backgrounds_count": 300,
"number_of_liveness_checks": 10,
"use_flying_faces_liveness_filtration": true,
"use_mask_liveness_filtration": true,
},
"primary_track_policy": {
"best_shot_min_size": 70,
"best_shot_proper_size": 140,
"use_primary_track_policy": false
},
"sending": {
"body": {
"send_only_full_set": true,
"delete_track_after_sending": true
},
"silent_period": 0,
"time_period_of_searching": -1,
"type": "sec",
"bestshot_settings": {
"type": 1,
"face_bestshots_to_send": 1,
"body_bestshots_to_send": 1
},
"full_frame_settings": 1
},
"event_handler": {
"type": "luna_handler",
"handler_id": "0b61258c-434f-45d6-964f-2131e58cd58c",
"frame_store": "http://127.0.0.1:5000/6/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLC"
}
}
}],
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"roi": [
0,
0,
0,
0
],
"rotation": 0,
"reference": "rtsp://dev02.vlabs:5554/video",
"type": "tcp"
},
"description": "http video test stream",
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"name": "http video test stream",
"status": "pending"
}'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_created_v2'
examples:
type_tcp_udp:
summary: stream type is tcp or udp
value:
{
"account_id": "d00e78dd-b91e-4686-866c-d69a493e5b5f",
"data": {
"analytics": [ {
"mode": 3,
"enabled": true,
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"filtering": {
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"detection_yaw_threshold": 40,
"min_body_size_threshold": 250,
"min_score_face": 0.5187,
"min_score_body": 0.5,
"mouth_occlusion_threshold": 0,
"yaw_collection_mode": false,
"yaw_number": 1
},
"liveness": {
"liveness_mode": 1,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.45,
0.5
],
"mask_backgrounds_count": 300,
"number_of_liveness_checks": 10,
"use_flying_faces_liveness_filtration": true,
"use_mask_liveness_filtration": true,
},
"primary_track_policy": {
"best_shot_min_size": 70,
"best_shot_proper_size": 140,
"use_primary_track_policy": false
},
"sending": {
"body": {
"send_only_full_set": true,
"delete_track_after_sending": true
},
"silent_period": 0,
"time_period_of_searching": -1,
"full_frame_settings": 1,
"type": "sec",
"bestshot_settings": {
"face_bestshots_to_send": 1,
"body_bestshots_to_send": 1
}
},
"event_handler": {
"type": "luna_handler",
"handler_id": "0b61258c-434f-45d6-964f-2131e58cd58c",
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
}
} ],
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"rotation": 0,
"reference": "rtsp://some_stream_address",
"type": "tcp"
},
"description": "http video test stream",
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"name": "http video test stream",
"group_name": "hd_stream_2",
"status": "pending"
}
type_tcp_udp_usb:
summary: stream type is tcp or udp with usb device
value:
{
"account_id": "d00e78dd-b91e-4686-866c-d69a493e5b5f",
"data": {
"analytics": [ {
"mode": 3,
"enabled": true,
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"filtering": {
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"detection_yaw_threshold": 40,
"min_body_size_threshold": 250,
"min_score_face": 0.5187,
"min_score_body": 0.5,
"mouth_occlusion_threshold": 0,
"yaw_collection_mode": false,
"yaw_number": 1
},
"liveness": {
"liveness_mode": 1,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.45,
0.5
],
"mask_backgrounds_count": 300,
"number_of_liveness_checks": 10,
"use_flying_faces_liveness_filtration": true,
"use_mask_liveness_filtration": true,
},
"primary_track_policy": {
"best_shot_min_size": 70,
"best_shot_proper_size": 140,
"use_primary_track_policy": false
},
"sending": {
"body": {
"send_only_full_set": true,
"delete_track_after_sending": true
},
"silent_period": 0,
"time_period_of_searching": -1,
"full_frame_settings": 1,
"type": "sec",
"bestshot_settings": {
"face_bestshots_to_send": 1,
"body_bestshots_to_send": 1
}
},
"event_handler": {
"type": "luna_handler",
"handler_id": "0b61258c-434f-45d6-964f-2131e58cd58c",
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
}
} ],
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"rotation": 0,
"reference": "/dev/video0",
"type": "tcp"
},
"description": "http video test stream",
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"name": "http video test stream",
"group_name": "hd_stream_2",
"status": "pending"
}
type_videofile:
summary: stream type is videofile
value:
{
"account_id": "d00e78dd-b91e-4686-866c-d69a493e5b5f",
"data": {
"analytics": [ {
"mode": 3,
"enabled": true,
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"filtering": {
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"detection_yaw_threshold": 40,
"min_body_size_threshold": 250,
"min_score_face": 0.5187,
"min_score_body": 0.5,
"mouth_occlusion_threshold": 0,
"yaw_collection_mode": false,
"yaw_number": 1
},
"liveness": {
"liveness_mode": 1,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.45,
0.5
],
"mask_backgrounds_count": 300,
"number_of_liveness_checks": 10,
"use_flying_faces_liveness_filtration": true,
"use_mask_liveness_filtration": true,
},
"primary_track_policy": {
"best_shot_min_size": 70,
"best_shot_proper_size": 140,
"use_primary_track_policy": false
},
"sending": {
"body": {
"send_only_full_set": true,
"delete_track_after_sending": true
},
"silent_period": 0,
"time_period_of_searching": -1,
"full_frame_settings": 1,
"type": "sec",
"bestshot_settings": {
"face_bestshots_to_send": 1,
"body_bestshots_to_send": 1
}
},
"event_handler": {
"type": "luna_handler",
"handler_id": "0b61258c-434f-45d6-964f-2131e58cd58c",
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
}
} ],
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"rotation": 0,
"reference": "/example/path/to/video/video.mp4",
"type": "videofile"
},
"description": "http video test stream",
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"name": "http video test stream",
"group_name": "hd_stream_2",
"status": "pending"
}
type_images:
summary: stream type is images
value:
{
"account_id": "d00e78dd-b91e-4686-866c-d69a493e5b5f",
"data": {
"analytics": [ {
"mode": 3,
"enabled": true,
"droi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"filtering": {
"detection_pitch_threshold": 40,
"detection_roll_threshold": 30,
"detection_yaw_threshold": 40,
"min_body_size_threshold": 250,
"min_score_face": 0.5187,
"min_score_body": 0.5,
"mouth_occlusion_threshold": 0,
"yaw_collection_mode": false,
"yaw_number": 1
},
"liveness": {
"liveness_mode": 1,
"liveness_threshold": 0.6,
"livenesses_weights": [
0.45,
0.5
],
"mask_backgrounds_count": 300,
"number_of_liveness_checks": 10,
"use_flying_faces_liveness_filtration": true,
"use_mask_liveness_filtration": true,
},
"primary_track_policy": {
"best_shot_min_size": 70,
"best_shot_proper_size": 140,
"use_primary_track_policy": false
},
"sending": {
"body": {
"send_only_full_set": true,
"delete_track_after_sending": true
},
"silent_period": 0,
"time_period_of_searching": -1,
"full_frame_settings": 1,
"type": "sec",
"bestshot_settings": {
"face_bestshots_to_send": 1,
"body_bestshots_to_send": 1
}
},
"event_handler": {
"type": "luna_handler",
"handler_id": "0b61258c-434f-45d6-964f-2131e58cd58c",
"frame_store": "http://127.0.0.1:5020/1/buckets/frames/images",
"authorization": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbklkIjoiN2Q0MjYwNmEtZmM3NS00NDU4LWE3OGUtOWYzNGM2MjIyZWQyIiwiZXhwaXJhdGlvblRpbWUiOm51bGwsImFjY291bnRJZCI6IjdkYjUzNThiLWZjMzMtNDIwZC1hYTgzLTk5YTRkOWY0MGM0MSJ9.kDL5oLTJaxKyYbwmKV1lejxrzsFoFzx5VOzvTR-i90k"
}
}
} ],
"frame_processing_mode": "auto",
"real_time_mode_fps": 0,
"ffmpeg_threads_number": 0,
"roi": {
"x": 0,
"y": 0,
"width": 0,
"height": 0,
"mode": "abs"
},
"rotation": 0,
"reference": "/example/path/to/images/",
"type": "images",
"mask": "example1_%04d.jpg"
},
"description": "http video test stream",
"location": {
"city": "Moscow",
"area": "Central",
"district": "Basmanny",
"street": "Podsosensky lane",
"house_number": "23 bldg.3",
"geo_position": {
"longitude": 36.616,
"latitude": 55.752
}
},
"name": "http video test stream",
"group_name": "hd_stream_2",
"status": "pending"
}
required: true
responses:
201:
description: Create success.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
stream_id:
allOf:
- $ref: '#/components/schemas/stream_id'
description: |
ID of the created stream.
The ID can be used as the `stream_id` parameter in [GET](#operation/getStream) `/streams/{stream_id}`.
version:
type: integer
enum: [1]
description: Stream initial version.
required: [ stream_id, version ]
example:
stream_id: b5d6fd45-fcca-453d-ac05-3e594054b813
version: 1
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'status', message: unexpected value; permitted: 'pending', 'pause'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
403:
$ref: '#/components/responses/license_problem'
500:
$ref: '#/components/responses/internal_server_error'
get:
tags:
- streams V2
summary: get streams
description: Get streams according to filters. The results are sorted by stream creation order, the oldest streams shown first.
operationId: getStreamsV2
parameters:
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/stream_reference'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/stream_create_time__gte'
- $ref: '#/components/parameters/stream_create_time__lt'
- $ref: '#/components/parameters/group_name'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
streams:
type: array
items:
$ref: '#/components/schemas/stream_response_v2'
minItems: 0
required: [ streams ]
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'stream_ids'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams V2
summary: delete streams
description: Delete streams matching specified filters (OR).
operationId: deleteStreamsV2
parameters:
- $ref: '#/components/parameters/account_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/streams_to_be_deleted'
required: true
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: '''', message: ''Additional properties are not
allowed (''faces'' was unexpected)'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/2/streams/count:
get:
tags:
- streams V2
summary: count streams
description: |
Count streams according to the filters.
operationId: countStreamsV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/stream_reference'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/stream_create_time__gte'
- $ref: '#/components/parameters/stream_create_time__lt'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
streams_count:
allOf:
- $ref: '#/components/schemas/count'
description: Streams count.
description: Stream count.
required: [ streams_count ]
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'stream_ids'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/2/streams/{stream_id}:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- in: path
name: stream_id
schema:
$ref: '#/components/schemas/uuid'
required: true
description: ID of the stream (`stream_id` received in the ["create stream"](#operation/createStream) request request).
put:
tags:
- streams V2
summary: put stream
description: Update existing stream. You should specify all the fields required for the stream in the request.
operationId: putStreamV2
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_created_v2'
required: true
responses:
200:
description: Put success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
stream_id:
allOf:
- $ref: '#/components/schemas/stream_id'
description: |
ID of the stream that was put.
The ID can be used as the `stream_id` parameter in [GET](#operation/getStream) `/streams/{stream_id}`.
version:
allOf:
- $ref: '#/components/schemas/stream_version'
description: Stream current version (incremented on every change).
required: [ stream_id, version ]
example:
stream_id: b5d6fd45-fcca-453d-ac05-3e594054b813
version: 10
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'status', message: unexpected value; permitted: 'pending', 'pause'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
403:
$ref: '#/components/responses/license_problem'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
get:
tags:
- streams V2
summary: get stream
description: Get the stream by ID.
operationId: getStreamV2
parameters:
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/stream_response_v2'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
patch:
tags:
- streams V2
summary: update stream
description: |
Update stream fields: *description*, *status*.
operationId: patchStreamV2
parameters:
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/stream_to_be_patched'
required: true
responses:
204:
description: Update success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
nothing_to_update:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: '''', message: ''at least one field must have a value'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
invalid_status:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: ''status'', message: ''unexpected value; permitted: ''pending'', ''pause'', ''cancel'''''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
extra_fields:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: 'Failed to validate input json. Path: ''user_data'', message: ''extra fields not permitted'''
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
unable_to_pause:
value:
error_code: 39003
desc: Unable to stop processing
detail: 'Processing of stream with id ''557d54ec-29ad-4f3c-93b4-c9092ef12515'' is already in progress and cannot be stopped.'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39003
unable_to_cancel:
value:
error_code: 39005
desc: Unable to cancel processing
detail: 'Processing of streams with id ''557d54ec-29ad-4f3c-93b4-c9092ef12515'' is finished and cannot be cancelled'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39005
403:
$ref: '#/components/responses/license_problem'
404:
description: Stream not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams V2
summary: remove stream
description: Remove the stream by ID.
operationId: removeStreamV2
parameters:
- $ref: '#/components/parameters/account_id'
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Stream not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39001
desc: Object not found
detail: Stream with id '7acc35cf-a3b2-4f87-8d8b-5496a2782d37' not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
500:
$ref: '#/components/responses/internal_server_error'
/2/streams/processing/queue:
parameters:
- $ref: '#/components/parameters/luna_request_id'
get:
tags:
- queue V2
summary: check the streams processing queue
description: See the streams in the queue.
operationId: getStreamsQueueV2
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_names'
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/queue_streams_response_pending_v2'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'limit'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
post:
tags:
- queue V2
summary: get some streams from the queue
description: |
Receive streams from the queue. The streams are received according to the specified filters.
The following actions are performed upon the request:
- The streams are marked as "in progress".
- The streams are deleted from the Streams Processing Queue.
The information about the streams is returned in the response.
operationId: getStreamsFromQueueV2
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post_streams_processing_queue_request'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/queue_streams_response_in_progress_v2'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json. Path: 'filters', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/2/streams/processing/feedback:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- queue V2
summary: post feedback on streams
description: |
Post information about streams processing.
operationId: postStreamsFeedbackV2
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/post_streams_processing_feedback_request'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/feedback_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json. Path: 'streams', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
500:
$ref: '#/components/responses/internal_server_error'
/2/streams/{stream_id}/preview/handler/frame:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/stream_id_path'
get:
tags:
- preview V2
summary: get last frame preview
description: |
Get stream last frame preview.
To add preview for stream, use ["post feedback on streams"](#operation/postStreamsFeedback) request to create last frame preview.
operationId: previewFrameProxyV2
responses:
200:
description: OK.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
stream_not_found:
value:
error_code: 39001
desc: Object not found
detail: Stream with id 00000000-0000-4000-a000-000000642312 not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
preview_not_found:
value:
error_code: 39009
desc: Forbidden
detail: Not found `live` preview url for stream with id '00000000-0000-4000-a000-000000642312'.
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39009
500:
description: Internal server error.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal_server_error:
value:
error_code: 1
desc: internal server error
detail: internal server error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
stream_not_found:
value:
error_code: 39010
desc: Preview processing error
detail: Connection refused
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39010
/2/streams/{stream_id}/preview/handler/live:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/stream_id_path'
get:
tags:
- preview V2
summary: get live preview
description: |
Get stream live preview.
To add preview for stream, use ["post feedback on streams"](#operation/postStreamsFeedback) request to create live preview.
operationId: previewLiveProxyV2
responses:
200:
description: OK.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
404:
description: Not found.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
stream_not_found:
value:
error_code: 39001
desc: Object not found
detail: Stream with id 00000000-0000-4000-a000-000000642312 not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39001
preview_not_found:
value:
error_code: 39009
desc: Forbidden
detail: Not found `live` preview url for stream with id '00000000-0000-4000-a000-000000642312'.
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39009
500:
description: Internal server error.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
internal_server_error:
value:
error_code: 1
desc: internal server error
detail: internal server error
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-1
stream_not_found:
value:
error_code: 39010
desc: Preview processing error
detail: Connection refused
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39010
/2/streams/logs:
get:
tags:
- streams logs V2
summary: get streams logs
description: Get streams logs according to filters. The results are sorted by log creation order,
the new streams logs shown first.
operationId: getStreamsLogsV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/stream_ids'
- $ref: '#/components/parameters/stream_statuses'
- $ref: '#/components/parameters/log_targets'
- $ref: '#/components/parameters/log_time__lt'
- $ref: '#/components/parameters/log_time__gte'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/streams_logs'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'log_time__lt'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- streams logs V2
summary: delete stream logs
description: Delete streams logs older than specified date excluding last log entry.
operationId: deleteStreamsLogsV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/log_time__lt_deleting'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/streams_logs_deleted_count'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'log_time__lt'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/2/groups:
parameters:
- $ref: '#/components/parameters/luna_request_id'
post:
tags:
- groups V2
summary: create group
description: Create group.
operationId: createGroupV2
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_group'
required: true
responses:
201:
description: Create success.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Location:
schema:
type: string
format: url
example: /1/groups/group-1
description: Location of new group.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_group_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_json:
value:
error_code: 12022
desc: Bad/incomplete input data
detail: |
Failed to validate input json.
Path: 'account_id', message: 'field required'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12022
409:
description: Conflict
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39006
desc: Unique constraint error
detail: Group named 'group1' already exists
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39006
500:
$ref: '#/components/responses/internal_server_error'
get:
tags:
- groups V2
summary: get groups
description: Get groups according to filters. The results are sorted by group creation order, the oldest group shown first.
operationId: getGroupsV2
parameters:
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/page_size'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
properties:
groups:
type: array
items:
$ref: '#/components/schemas/group_response'
minItems: 0
required: [ groups ]
example:
- account_id: ee4c42b6-23ae-410e-a2aa-a4220e64ba4b
group_name: "stream_group-1"
group_id: "b5d6fd45-fcca-453d-ac05-3e594054b813"
description: "default stream group"
create_time: "2018-08-11T09:11:41.674Z"
- account_id: 2d6cbe1f-cbbe-485a-ab37-b968cc5e8764
group_name: "stream_group-2"
group_id: "a7d8fd45-fgga-453d-ac05-3e594054b813"
description: "stream group 2"
create_time: "2019-10-11T10:11:41.674Z"
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/2/groups/count:
get:
tags:
- groups V2
summary: get group count
description: |
Count of groups according to the filters.
operationId: countGroupsV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/group_ids'
- $ref: '#/components/parameters/group_names'
- $ref: '#/components/parameters/account_id'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/groups_count'
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/2/groups/{group_id}:
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- in: path
name: group_id
schema:
$ref: '#/components/schemas/uuid'
required: true
description: ID of the group (`group_id` received in the ["create group"](#operation/createGroup) request).
get:
tags:
- groups V2
summary: get group
description: Get the group by name.
operationId: getGroupV2
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/group_response'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
patch:
tags:
- groups V2
summary: update group
description: |
Update group fields: *description*
parameters:
- $ref: '#/components/parameters/applicationJsonContent'
operationId: patchGroupV2
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_group'
required: true
responses:
204:
description: Update success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
delete:
tags:
- groups V2
summary: remove group
description: Remove the group by name.
operationId: deleteGroupV2
responses:
204:
description: Delete success.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
404:
description: Group not found.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
example:
error_code: 39008
desc: Object not found
detail: Group with id ee4c42b6-23ae-410e-a2aa-a4220e64ba4b not found
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-39008
500:
$ref: '#/components/responses/internal_server_error'
/2/linker:
patch:
tags:
- linker V2
summary: attach (or detach) streams to a group
description: Attach (or detach) streams to a group.
operationId: linkerV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/account_id'
- $ref: '#/components/parameters/applicationJsonContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/linker'
responses:
204:
description: Operation succeeded
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
400:
description: Bad request.
headers:
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
Content-Type:
$ref: '#/components/headers/application_json'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
bad_query_param:
value:
error_code: 12012
desc: Bad/incomplete input data
detail: Bad query parameters 'account_id'
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12012
500:
$ref: '#/components/responses/internal_server_error'
/2/docs/spec:
get:
tags:
- documents V2
summary: get openapi documentation
description: |
Get service OpenApi documentation. If *Accept* request header is of type `application/x-yaml`,
returns documentation in `yaml` format or returns `html` documentation, if *Accept-Type* is `text/html`
operationId: getSpecV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/accept_docs_handler'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/docs_content_type'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/x-yaml:
schema:
type: string
description: YAML format documentation.
text/html:
schema:
type: string
description: HTML format documentation.
415:
description: Unsupported Media Type
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
unsupported_media_type:
value:
error_code: 12024
detail: Bad/incomplete input data
desc: Unsupported media type
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
500:
$ref: '#/components/responses/internal_server_error'
/2/docs/dev:
parameters:
- $ref: '#/components/parameters/Accept'
get:
tags:
- documents V2
summary: get development manual
description: |
Get sphinx documentation - *Development Manual*. After the request you will be redirected to the page `/docs/dev/index.html`
operationId: getDevManualV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/text_html'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
text/html:
schema:
type: string
description: HTML format documentation.
500:
$ref: '#/components/responses/internal_server_error'
/2/config:
get:
tags:
- config V2
summary: get service configuration
description: Get service configuration. Passwords and tokens will be hidden in the response.
operationId: getConfigV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/accept_config_handler'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/config_accept_content_type'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
type: object
description: JSON format configuration.
example:
INFLUX_MONITORING:
SEND_DATA_FOR_MONITORING: 0
VERSION: 2
ORGANIZATION: ORGANIZATION_NAME
TOKEN: '********'
BUCKET: luna_monitoring
HOST: 127.0.0.1
PORT: 8086
USE_SSL: 0
FLUSHING_PERIOD: 1.0
text/plain:
schema:
type: string
description: Text format configuration.
example: |
[INFLUX_MONITORING]
SEND_DATA_FOR_MONITORING = 0
VERSION = 2
ORGANIZATION = ORGANIZATION_NAME
TOKEN = ********
BUCKET = luna_monitoring
HOST = 127.0.0.1
PORT = 8086
USE_SSL = 0
FLUSHING_PERIOD = 1.0
415:
description: Unsupported media type.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/error'
examples:
unsupported_media_type:
value:
error_code: 12024
detail: Bad/incomplete input data
desc: Unsupported media type
link: https://docs.visionlabs.ai/info/luna/troubleshooting/errors-description/code-12024
500:
$ref: '#/components/responses/internal_server_error'
/2/plugins:
get:
tags:
- plugins V2
summary: get list of plugins
description: |
Get list of service plugins
operationId: getPluginsV2
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/plugins'
500:
$ref: '#/components/responses/internal_server_error'
/metrics:
get:
tags:
- metrics
summary: get service requests statistics
description: Get statistics of success and failed requests to the service in prometheus format.
operationId: metrics
parameters:
- $ref: '#/components/parameters/luna_request_id'
responses:
200:
description: OK.
headers:
Content-Type:
schema:
type: string
enum:
- text/plain; charset=UTF-8
required: true
description: Content type is `text/plain`.
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
text/plain:
schema:
type: string
description: Prometheus plain text format.
example: |
# HELP request_count_total Counter of requests
# TYPE request_count_total counter
request_count_total{path="GET:/healthcheck",status_code="200"} 1.0
403:
$ref: '#/components/responses/forbidden_resource_error'
500:
$ref: '#/components/responses/internal_server_error'
/healthcheck:
get:
tags:
- health
summary: get health
description: Get health of service.
operationId: healthcheck
parameters:
- $ref: '#/components/parameters/luna_request_id'
- $ref: '#/components/parameters/include_luna_services'
responses:
200:
description: OK
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/health_ok'
500:
$ref: '#/components/responses/internal_server_error'
502:
description: Unhealthy.
headers:
Content-Type:
$ref: '#/components/headers/application_json'
Luna-Request-Id:
$ref: '#/components/headers/luna_request_id'
content:
application/json:
schema:
$ref: '#/components/schemas/health_errors'