AngelCam camera-stream-detection API

Using these endpoints you can verify if there are camera streams available on specified network address. Detection is asynchronous. For this reason there is one endpoint for initializing stream detection and one for retrieving result of detection.

Documentation

Specifications

Other Resources

OpenAPI Specification

angelcam-camera-stream-detection-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 2026.06.11
  title: Angelcam active-service camera-stream-detection API
  contact:
    email: support@angelcam.com
  x-logo:
    url: ./assets/logo-angelcam.svg
  description: 'Angelcam RESTful API — HTTPS only, JSON, all URLs require a trailing slash. See the [developer docs](/) for quickstart, authentication, and key concepts.

    '
servers:
- url: https://api.angelcam.com/v1
tags:
- name: camera-stream-detection
  x-displayName: Camera streams detection
  description: Using these endpoints you can verify if there are camera streams available on specified network address. Detection is asynchronous. For this reason there is one endpoint for initializing stream detection and one for retrieving result of detection.
paths:
  /cameras/stream-detection/:
    post:
      operationId: stream-detection-start
      summary: Start stream detection
      description: 'Retrieve `session_id` which can be used for [querying stream detection result](#operation/stream-detection-result).

        '
      tags:
      - camera-stream-detection
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                address:
                  type: string
                  description: 'Various address types can be used. Valid examples: `my-camera.my-site.com/feed`, `http://test:test@my-camera.my-site.com:80/feed?show=1`, `rtsp://site.domain.com/camera1`, `132.45.32.21`. As you can see from examples `address` can optionally contain information about `port`, `username` and `password`. In such cases these fields can be omitted from request body. The `arrow_service` field must not be present if the `address` field is being used.

                    '
                arrow_service:
                  type: object
                  properties:
                    arrow_client:
                      type: string
                      format: uuid
                      description: Arrow client UUID
                    service_id:
                      type: string
                      description: Arrow service ID
                  description: 'Use this field for stream detection via an Arrow client. The `path` field can be used to request detection on a specific endpoint in addition to all endpoints tested by the stream detector service. The `address` field must not be present if the `arrow_service` field is being used.

                    '
                path:
                  type: string
                  description: Stream path (if not given in the address field).
                port:
                  type: integer
                  minimum: 1
                  maximum: 65535
                  description: If port is not specified all reasonable ports will be tested.
                username:
                  type: string
                password:
                  type: string
              example:
                address: http://test:test@my-camera.my-site.com:80/feed?show=1
      security:
      - OAuth2:
        - streams_detect
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CameraStartStreamDetectionResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
  /cameras/stream-detection/{session_id}/:
    get:
      operationId: stream-detection-result
      summary: Retrieve stream detection result
      tags:
      - camera-stream-detection
      parameters:
      - $ref: '#/components/parameters/sessionId'
      security:
      - OAuth2:
        - streams_detect
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CameraStreamDetectionResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
components:
  schemas:
    CameraStartStreamDetectionResponse:
      type: object
      title: Camera Start Stream Detection Response
      properties:
        session_id:
          type: string
      required:
      - session_id
    ErrorGeneric:
      type: object
      title: Error object
      properties:
        title:
          type: string
        detail:
          type: string
        status:
          type: integer
      required:
      - title
      - detail
      - status
    CameraStreamDetectionResponse:
      type: object
      title: Camera Result Stream Detection Response
      properties:
        status:
          type: string
          enum:
          - ok
          - in-progress
          - error
          description: Result status
        streams:
          type: array
          description: A list of detected streams
          items:
            $ref: '#/components/schemas/CameraStreamDetectionStream'
        error:
          type: string
          description: Error information
      required:
      - status
      example:
        status: ok
        streams:
        - url: rtsp://1.2.3.4/main
          type: h264
          preview:
            live_snapshot: http://m1.angelcam.com/stream/81/snapshot.jpg?token=eyJ0aW1lIjogMTQ5NjkzNDYyODE5NjIxOCwgInRpbWVvdXQiOiAzNjAwLCAiYWxpYXMiOiAiODEifQ==.85b552be2b7f0abaa0a3b5b4f412877f8af92f691c7d0c6db6b8c517ea8f921c
            streams:
            - format: mjpeg
              url: http://m1.angelcam.com/stream/81/stream.mjpeg?token=eyJ0aW1lIjogMTQ5NjkzNDYyODE5NjIxOCwgInRpbWVvdXQiOiAzNjAwLCAiYWxpYXMiOiAiODEifQ==.85b552be2b7f0abaa0a3b5b4f412877f8af92f691c7d0c6db6b8c517ea8f921c
            - format: mp4
              url: http://m1.angelcam.com/stream/81/stream.mp4?token=eyJ0aW1lIjogMTQ5NjkzNDYyODE5NjMxNiwgInRpbWVvdXQiOiAzNjAwLCAiYWxpYXMiOiAiODEifQ==.b5b4cf405cf054701a75b359f4069d2af8a102c5ffd8f33cbb560a4638c7cb71
            - format: hls
              url: http://m1.angelcam.com/stream/81/playlist.m3u8?token=eyJ0aW1lIjogMTQ5NjkzNDYyODE5NjQwMSwgInRpbWVvdXQiOiAzNjAwLCAiYWxpYXMiOiAiODEifQ==.8ac35b434e768e8f10161b2d74da492f5fd8a8c115c18cbb421017665acd908a
    Error400InvalidParams:
      type: object
      title: Error 400 Invalid Parameters
      properties:
        title:
          type: string
        detail:
          type: object
        status:
          type: integer
      required:
      - title
      - detail
      - status
      example:
        title: invalid
        detail:
        - refresh_rate:
          - valid number is required.
          - Ensure this value is greater than 0.
        - max_width:
          - valid number is required.
          - Ensure this value is greater than or equal to 1.
        status: 400
    Error403PermissionDenied:
      allOf:
      - $ref: '#/components/schemas/ErrorGeneric'
      title: Error 403 Permission Denied
      example:
        title: permission_denied
        detail: You do not have permission to perform this action.
        status: 403
    CameraStreamDetectionPreviewStream:
      type: object
      title: Camera preview stream
      properties:
        format:
          type: string
          enum:
          - hls
          - mjpeg
          - mp4
          description: Stream type
        url:
          type: string
          format: url
          description: Stream URL
      required:
      - format
      - url
    Error401Unauthorized:
      allOf:
      - $ref: '#/components/schemas/ErrorGeneric'
      title: Error 401 Unauthorized
      example:
        title: not_authenticated
        detail: Authentication credentials were not provided
        status: 401
    CameraStreamDetectionPreview:
      type: object
      title: Camera preview
      description: Camera preview that can be used to access the underlying stream in various ways. The preview is available only for 20 minutes.
      properties:
        live_snapshot:
          type: string
          format: url
          description: A URL that can be used to retrieve a snapshot from the camera
        streams:
          type: array
          description: A list of streams available for the preview
          items:
            $ref: '#/components/schemas/CameraStreamDetectionPreviewStream'
      required:
      - live_snapshot
      - streams
    CameraStreamDetectionStream:
      type: object
      title: Detected stream
      properties:
        url:
          type: string
          format: url
          description: URL of the detected stream. This is the URL that should be used to create a new camera.
        type:
          type: string
          enum:
          - h264
          - h265
          - mjpeg
          description: Camera type
        preview:
          $ref: '#/components/schemas/CameraStreamDetectionPreview'
      required:
      - url
      - type
      - preview
  parameters:
    sessionId:
      name: session_id
      in: path
      required: true
      description: '`session_id` that you received from [start stream detection endpoint](#operation/stream-detection-start)

        '
      example: c95227c4-218c-4dee-899d-f3fa2ce9c39b
      schema:
        type: string
        format: uuid
  responses:
    Error403PermissionDenied:
      description: Missing permission.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error403PermissionDenied'
    Error401Unauthorized:
      description: Missing or invalid authorization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error401Unauthorized'
    Error400InvalidParams:
      description: Query params are invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error400InvalidParams'
  securitySchemes:
    OAuth2:
      type: oauth2
      description: 'See the Authentication section above for full documentation.

        '
      flows:
        authorizationCode:
          authorizationUrl: https://my.angelcam.com/oauth/authorize/
          tokenUrl: https://my.angelcam.com/oauth/token/
          scopes:
            user_access: Permission to access user information
            user_delete: Permission to delete the current user account
            camera_access: Permission to list cameras and to get details of a specific camera
            camera_create: Permission to create cameras
            camera_manage: Permission to update cameras
            camera_delete: Permission to delete cameras
            camera_guest_access: Permission to access camera guest
            camera_guest_manage: Permission to manage camera guest
            public_cameras_access: Permission to access public cameras
            arrow_client_access: Permission to access Arrow clients
            arrow_client_manage: Permission to manage Arrow clients
            event_access: Permission to access events
            recording_access: Permission to access camera recordings
            recording_start_stop: Permission to start and stop recording on camera
            recording_clips_access: Permission to access recording clips
            recording_clips_create: Permission to create recording clips
            recording_clips_share: Permission to share recording clips
            sensor_access: Permission to list sensors and to get details of a specific sensor
            sensor_manage: Permission to create, update and delete sensors
            broadcasting_access: Permission to see general broadcasting information and access broadcasting streams
            broadcasting_start_stop: Permission to start and stop public broadcasting on camera
            client_access: Permission to list resellers clients and get details of a specific client
            client_create: Permission to create client account
            client_manage: Permission to update clients detail
            streams_detect: Permission to detect camera streams
            sites_access: Permission to access sites
            sites_manage: Permission to create, update and delete sites
            services_access: Permission to access available services
            trials_access: Permission to access available trials
            trials_activate: Permission to activate a trial
            active_services_access: Permission to access active services
            active_services_manage: Permission to manage active services
            orders_access: Permission to access orders
            messages_access: Permission to access RTS messages
            messages_manage: Permission to manage RTS messages
            incidents_access: Permission to access Incidents
            space_access: Permission to list and activate spaces
            space_permissions_access: Permission to view space permissions
        password:
          tokenUrl: https://api.angelcam.com/oauth/token/
          scopes:
            user_access: Permission to access user information
            user_delete: Permission to delete the current user account
            camera_access: Permission to list cameras and to get details of a specific camera
            camera_create: Permission to create cameras
            camera_manage: Permission to update cameras
            camera_delete: Permission to delete cameras
            camera_guest_access: Permission to access camera guest
            camera_guest_manage: Permission to manage camera guest
            arrow_client_access: Permission to access Arrow clients
            arrow_client_manage: Permission to manage Arrow clients
            event_access: Permission to access events
            recording_access: Permission to access camera recordings
            recording_start_stop: Permission to start and stop recording on camera
            recording_clips_access: Permission to access recording clips
            recording_clips_create: Permission to create recording clips
            recording_clips_share: Permission to share recording clips
            sensor_access: Permission to list sensors and to get details of a specific sensor
            sensor_manage: Permission to create, update and delete sensors
            broadcasting_access: Permission to see general broadcasting information and access broadcasting streams
            broadcasting_start_stop: Permission to start and stop public broadcasting on camera
            client_access: Permission to list resellers clients and get details of a specific client
            client_create: Permission to create client account
            client_manage: Permission to update clients detail
            streams_detect: Permission to detect camera streams
            sites_access: Permission to access sites
            sites_manage: Permission to create, update and delete sites
            services_access: Permission to access available services
            trials_access: Permission to access available trials
            trials_activate: Permission to activate a trial
            active_services_access: Permission to access active services
            active_services_manage: Permission to manage active services
            orders_access: Permission to access orders
            messages_access: Permission to access RTS messages
            messages_manage: Permission to manage RTS messages
            rts_settings_access: Permission to access RTS settings
            rts_settings_manage: Permission to manage RTS settings
            rts_arming_manage: Permission to arm and disarm RTS
            incidents_access: Permission to access Incidents
            space_access: Permission to list and activate spaces
            space_permissions_access: Permission to view space permissions
    PersonalAccessToken:
      type: apiKey
      in: header
      name: Authorization
      description: 'Enter your token as: `PersonalAccessToken {your-token}`

        '
x-tagGroups:
- name: General
  tags:
  - user
  - space
  - location
- name: Camera management
  tags:
  - camera
  - shared-camera
  - camera-guest
  - camera-stream-detection
  - arrow-clients
  - angelcameras
- name: Recording
  tags:
  - recording
  - stream-controls
  - shared-camera-recording
  - clip
  - shared-camera-clip
- name: Broadcasting
  tags:
  - broadcasting
  - public-camera
- name: Events & Sensors
  tags:
  - event
  - sensor
- name: Speaker management
  tags:
  - speakers
  - audio-message
- name: RTS
  tags:
  - incidents
  - rts_settings
  - rts_messages
  - rts_notification_methods
  - rts_notification_rules
- name: Billing
  tags:
  - service
  - active-service
  - order
- name: Clients
  tags:
  - client