AngelCam recording API

Cloud Recording endpoints. Requires the Cloud Recording service to be active on the camera — otherwise all endpoints return 404. A camera can have multiple simultaneous recordings (e.g. continuous + event-only) with different retentions. The timeline endpoint returns _segments_ (continuous blocks of recorded video) for a given time range; maximum range per request is 24 hours.

Documentation

Specifications

Other Resources

OpenAPI Specification

angelcam-recording-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 2026.06.11
  title: Angelcam active-service recording 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: recording
  x-displayName: My cameras recording
  description: 'Cloud Recording endpoints. Requires the Cloud Recording service to be active on the camera — otherwise all endpoints return 404.

    A camera can have multiple simultaneous recordings (e.g. continuous + event-only) with different retentions. The timeline endpoint returns _segments_ (continuous blocks of recorded video) for a given time range; maximum range per request is 24 hours.

    '
paths:
  /cameras/{camera_id}/recording/:
    get:
      deprecated: true
      operationId: my-cameras-recording-info-deprecated
      summary: General recording information
      description: '**This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-info) instead.**

        '
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/cameraId'
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: Returns general recording information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recording/download/:
    get:
      deprecated: true
      operationId: my-cameras-recording-download-deprecated
      summary: Download a given recording section
      tags:
      - recording
      description: 'This endpoint will construct a download URL for a specified recording section of a given camera. If there are no records within the section, the download URL will be still returned, however, the URL will respond with HTTP 404. If there are any gaps within the specified recording section, they will be skipped.


        Please keep in mind that the maximum downloadable length is 3 hours.


        **This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-download) instead.**

        '
      parameters:
      - $ref: '#/components/parameters/cameraId'
      - name: start
        in: query
        required: true
        description: 'Start time of the download. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: true
        description: 'End time of the download. Example: `2016-03-19T14:00:00Z.`'
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      - name: filename
        in: query
        required: false
        description: 'Filename suggestion for the download. The filename extension will be added automatically.

          '
        example: clip
        schema:
          type: string
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingDownloadResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recording/start/:
    post:
      deprecated: true
      operationId: my-cameras-recording-start-deprecated
      summary: Start recording on given camera
      description: '**This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-start) instead.**

        '
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/cameraId'
      - name: duration
        in: query
        description: Time in seconds after which recording will be stopped. In case multiple auto stop recording requests are received on same camera the one which ends later will be applied. If this endpoint is called without this parameter recording will not be stopped automatically and if there's scheduled auto stop it will be canceled.
        example: 30
        schema:
          type: integer
          minimum: 30
          maximum: 1800
      security:
      - OAuth2:
        - recording_start_stop
      - PersonalAccessToken: []
      responses:
        '204':
          $ref: '#/components/responses/EmptyResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recording/stop/:
    post:
      deprecated: true
      operationId: my-cameras-recording-stop-deprecated
      summary: Stop recording on given camera
      description: '**This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-stop) instead.**

        '
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/cameraId'
      security:
      - OAuth2:
        - recording_start_stop
      - PersonalAccessToken: []
      responses:
        '204':
          $ref: '#/components/responses/EmptyResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recording/stream/:
    get:
      deprecated: true
      operationId: my-cameras-recording-stream-deprecated
      summary: Create and return recorded stream for a specified time
      description: '**This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-stream) instead.**

        '
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/cameraId'
      - name: start
        in: query
        required: true
        description: 'Start time of a stream. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: false
        description: 'End time of a stream. If missing, stream will play till the very end of recorded footage. Example: `2016-03-19T14:00:00Z.`

          '
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingStreamResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recording/timeline/:
    get:
      deprecated: true
      operationId: my-cameras-recording-timeline-deprecated
      summary: Retrieve timeline of records for given camera
      tags:
      - recording
      description: 'Please keep in mind that maximum length of timeline is 1 day.


        **This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/recording/operation/my-cameras-recording-timeline) instead.**

        '
      parameters:
      - $ref: '#/components/parameters/cameraId'
      - name: start
        in: query
        required: true
        description: 'Start time of a timeline. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: true
        description: 'End time of a timeline. Example: `2016-03-19T14:00:00Z.`'
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingTimelineResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /cameras/{camera_id}/recordings/:
    get:
      operationId: my-cameras-recordings-list
      summary: Retrieve recordings on a given camera
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/cameraId'
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: Returns general recording information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingListResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/stream/{streamer_name}/{streamer_id}/:
    get:
      deprecated: true
      operationId: my-cameras-recordings-stream-info
      summary: Retrieve recording stream info
      description: '**This endpoint is deprecated and will be removed in the future. Use [this endpoint](#tag/stream-controls/operation/recordings-stream-info) instead.**

        '
      tags:
      - recording
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      parameters:
      - name: streamer_name
        in: path
        required: true
        description: Streamer server name.
        example: rec-streamer-eu-central-1
        schema:
          type: string
      - name: streamer_id
        in: path
        required: true
        description: Stream ID.
        example: 61c59a859e9244a19713fdfec6e50184
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingStreamInfoResponseDeprecated'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/:
    get:
      operationId: my-cameras-recording-info
      summary: General recording information
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/recordingId'
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: Returns general recording information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/download/:
    get:
      operationId: my-cameras-recording-download
      summary: Download a given recording section
      tags:
      - recording
      description: 'This endpoint will construct a download URL for a specified recording section of a given camera. If there are no records within the section, the download URL will be still returned, however, the URL will respond with HTTP 404. If there are any gaps within the specified recording section, they will be skipped.


        Please keep in mind that the maximum downloadable length is 3 hours.

        '
      parameters:
      - $ref: '#/components/parameters/recordingId'
      - name: start
        in: query
        required: true
        description: 'Start time of the download. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: true
        description: 'End time of the download. Example: `2016-03-19T14:00:00Z.`'
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      - name: filename
        in: query
        required: false
        description: 'Filename suggestion for the download. The filename extension will be added automatically.

          '
        example: clip
        schema:
          type: string
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingDownloadResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/snapshot/:
    get:
      operationId: my-cameras-recording-snapshot
      summary: Retrieve recording snapshot URL at a specified time
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/recordingId'
      - name: datetime
        in: query
        required: true
        description: 'Time at which to retrieve snapshot. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    format: uri
                    description: URL of the snapshot image
                required:
                - url
                example:
                  url: https://dsw4ncxjbie85.cloudfront.net/snapshot/157/h8yeodu1mrjtiiok.jpg
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/start/:
    post:
      operationId: my-cameras-recording-start
      summary: Start recording
      tags:
      - recording
      description: '### Event recording


        If you only wish to record events instead of 24/7 coverage, you can use a combination of the `start_from` and `stop_at` or `duration` parameters. Setting `start_from` a few seconds before now will ensure that any buffered media starting from the given timestamp will be recorded. Note that this means that Angelcam Cloud is already connected to the media source (e.g. IP camera) or that the media source itself is able to hold media in an internal buffer for some amount of time (RTSP/2.0 media source with Time-Duration media property is required).


        The `stop_at` or `duration` parameters can be used then to stop the recording automatically at some point. To extend a recording, call this endpoint repeatedly with the same `duration` parameter or with an increased `stop_at` parameter. For example, let''s assume that the current time is `2024-07-10 10:00:00.000Z`. Calling this endpoint with `start_from=2024-07-10T09:59:30.000Z` and `duration=60` will tell Angelcam Cloud to record all available media starting from 30 seconds ago and to keep recording until 60 seconds from now. Calling this endpoint again after 30 seconds with the same parameters will extend the recording duration to 90 seconds from now.

        '
      parameters:
      - $ref: '#/components/parameters/recordingId'
      - name: start_from
        in: query
        description: All available media starting from a given timestamp will be recorded. This also includes any media buffered by Angelcam Cloud infrastructure and the media source itself (e.g. IP camera). This parameter becomes handy in situations when you only want to record certain events but you need the recording to start a few seconds before the event itself. If this endpoint is called without this parameter, only media generated after the recording start command are recorded.
        example: '2024-07-10T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: stop_at
        in: query
        description: Time at which the recording will be stopped. In case multiple auto-stop recording requests are received on the same recording, the one which ends later will be applied. If this endpoint is called without this parameter, the recording will not be stopped automatically, and if there's a scheduled auto stop, it will be canceled. This parameter is mutually exclusive with the `duration` parameter.
        example: '2024-07-10T00:01:00.000Z'
        schema:
          type: string
          format: date-time
      - name: duration
        in: query
        description: Time in seconds after which the recording will be stopped (counting from the moment the request is received by Angelcam API). In case multiple auto-stop recording requests are received on the same recording, the one that ends later will be applied. If this endpoint is called without this parameter, the recording will not be stopped automatically, and if there's a scheduled auto stop, it will be canceled. This parameter is mutually exclusive with the `stop_at` parameter.
        example: 30
        schema:
          type: integer
          minimum: 30
          maximum: 1800
      security:
      - OAuth2:
        - recording_start_stop
      - PersonalAccessToken: []
      responses:
        '204':
          $ref: '#/components/responses/EmptyResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/stop/:
    post:
      operationId: my-cameras-recording-stop
      summary: Stop recording
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/recordingId'
      security:
      - OAuth2:
        - recording_start_stop
      - PersonalAccessToken: []
      responses:
        '204':
          $ref: '#/components/responses/EmptyResponse'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/stream/:
    get:
      operationId: my-cameras-recording-stream
      summary: Create and return recorded stream for a specified time
      tags:
      - recording
      parameters:
      - $ref: '#/components/parameters/recordingId'
      - name: start
        in: query
        required: true
        description: 'Start time of a stream. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: false
        description: 'End time of a stream. If missing, stream will play till the very end of recorded footage. Example: `2016-03-19T14:00:00Z.`

          '
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingStreamResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
  /recording/{recording_id}/timeline/:
    get:
      operationId: my-cameras-recording-timeline
      summary: Retrieve timeline of records for given recording
      tags:
      - recording
      description: 'Please keep in mind that maximum length of timeline is 1 day.

        '
      parameters:
      - $ref: '#/components/parameters/recordingId'
      - name: start
        in: query
        required: true
        description: 'Start time of a timeline. Example: `2016-03-19T08:00:00Z`.'
        example: '2017-01-01T00:00:00.000Z'
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        required: true
        description: 'End time of a timeline. Example: `2016-03-19T14:00:00Z.`'
        example: '2017-01-01T00:10:00.000Z'
        schema:
          type: string
          format: date-time
      security:
      - OAuth2:
        - recording_access
      - PersonalAccessToken: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordingTimelineResponse'
        '400':
          $ref: '#/components/responses/Error400InvalidParams'
        '401':
          $ref: '#/components/responses/Error401Unauthorized'
        '403':
          $ref: '#/components/responses/Error403PermissionDenied'
        '404':
          $ref: '#/components/responses/Error404NotFound'
components:
  schemas:
    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
    RecordingStreamInfoResponseDeprecated:
      type: object
      title: Recording stream information
      properties:
        current_time:
          type: string
          format: date-time
          description: Current time in a stream.
      example:
        current_time: '2017-01-01T00:00:00.000Z'
    Error401Unauthorized:
      allOf:
      - $ref: '#/components/schemas/ErrorGeneric'
      title: Error 401 Unauthorized
      example:
        title: not_authenticated
        detail: Authentication credentials were not provided
        status: 401
    SegmentObject:
      type: object
      title: Segment object
      properties:
        start:
          type: string
          format: date-time
          description: 'Start of record segment. Example: `2017-01-01T00:00:00Z`.'
        end:
          type: string
          format: date-time
          description: 'End of record segment. Example: `2017-01-01T00:00:00Z`.'
    RecordingListResponse:
      type: object
      title: Recording list
      properties:
        count:
          type: integer
          description: Recording count
        next:
          format: uri
          description: Next page from pagination
          nullable: true
          type: string
        previous:
          format: uri
          description: Previous page from pagination
          nullable: true
          type: string
        results:
          type: array
          description: List of recordings on a given camera
          items:
            $ref: '#/components/schemas/RecordingResponse'
      required:
      - count
      - next
      - previous
      - results
    ErrorGeneric:
      type: object
      title: Error object
      properties:
        title:
          type: string
        detail:
          type: string
        status:
          type: integer
      required:
      - title
      - detail
      - status
    RecordingDownloadResponse:
      type: object
      title: Recording download
      properties:
        url:
          type: string
          format: url
          description: Download URL
      example:
        url: https://rust-streamer-eu-central-1-07489f9b03f198b91.angelcam.com/recordings/7e65d945-fffc-42e7-b78d-dd6f5cea91ee/download/?start=2019%2D09%2D30T07%3A23%3A14%2E932%2B00%3A00&end=2019%2D09%2D30T07%3A53%3A57%2E016%2B00%3A00&token=eyJ0aW1lIjoxNTY5ODU3NjgzLCJ0aW1lb3V0IjoxMjAwfQ%3D%3D%2E020b136d5da0d9518ed5428bfa01cadab1a139bf1e4f8e64a726fe3dfd40e541&filename=clip
    RecordingTimelineResponse:
      type: object
      title: Recording timeline object
      properties:
        start:
          type: string
          format: date-time
          description: 'Start time of timeline (the value you entered in the query parameter). Example: `2017-01-01T00:00:00Z`.

            '
        end:
          type: string
          format: date-time
          description: 'End time of timeline (the value you entered in the query parameter). Example: `2017-01-01T00:00:00Z`.

            '
        segments:
          type: array
          description: Array of recording segments.
          items:
            $ref: '#/components/schemas/SegmentObject'
      example:
        start: '2017-01-01T00:00:00.000Z'
        end: '2017-01-01T03:32:19.000Z'
        segments:
        - start: '2017-06-09T00:00:18.000Z'
          end: '2017-06-09T03:25:28.000Z'
        - start: '2017-06-09T04:19:42.000Z'
          end: 2017-06-09T010:39:31Z
    RecordingStreamResponse:
      type: object
      title: Recording stream object
      properties:
        url:
          type: string
          description: URL of a stream.
          example: 'https://rec-streamer-eu-central-1.angelcam.com/streams/cefa6471a38f469585b46675fc992614/playlist.m3u8

            '
        format:
          type: string
          enum:
          - hls
          - mjpeg
          description: Stream format.
          example: hls
        stream_info:
          deprecated: true
          type: string
          description: URL of a recorded stream info endpoint.
          example: https://api.angelcam.com/v1/recording/stream/rec-streamer-eu-central-1/cefa6471a38f469585b46675fc992614/
        stream_controls:
          type: object
          description: 'Links allowing to synchronize and control stream playback. See [more](#tag/stream-controls).

            '
          properties:
            base_url:
              type: string
              description: URL for retrieving the current stream position and playback speed.
              example: 'https://rec-streamer-eu-central-1.angelcam.com/recording/streams/cefa6471a38f469585b46675fc992614/

                '
            play:
              type: string
              description: URL for resuming the stream playback.
              example: 'https://rec-streamer-eu-central-1.angelcam.com/recording/streams/cefa6471a38f469585b46675fc992614/play/

                '
            pause:
              type: string
              description: URL for pausing the stream playback.
              example: 'https://rec-streamer-eu-central-1.angelcam.com/recording/streams/cefa6471a38f469585b46675fc992614/pause/

                '
            speed:
              type: string
              description: URL for changing the stream playback speed.
              example: 'https://rec-streamer-eu-central-1.angelcam.com/recording/streams/cefa6471a38f469585b46675fc992614/speed/

                '
      example:
        url: https://rec-streamer-eu-central-1.angelcam.com/streams/df0600b7487a44d480217db7713720d3/playlist.m3u8
        format: hls
        stream_controls:
          base_url: https://rec-streamer-eu-central-1.angelcam.com/recording/streams/df0600b7487a44d480217db7713720d3/
          play: https://rec-streamer-eu-central-1.angelcam.com/recording/streams/df0600b7487a44d480217db7713720d3/play/
          pause: https://rec-streamer-eu-central-1.angelcam.com/recording/streams/df0600b7487a44d480217db7713720d3/pause/
          speed: https://rec-streamer-eu-central-1.angelcam.com/recording/streams/df0600b7487a44d480217db7713720d3/speed/
    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
    RecordingResponse:
      type: object
      title: Recording information
      required:
      - id
      - status
      - retention
      - deactivated_at
      properties:
        id:
          type: string
          format: uuid
          description: Recording ID
        status:
          type: string
          enum:
          - READY
          - CONNECTING
          - RECORDING
          - STOPPING
          - ERROR
          description: 'Recording status values have the following meaning:

            * `READY` - Not recording (recording is ready to be started)

            * `CONNECTING` - Recorder is trying to connect to the stream (this usually indicates camera connectivity problems; the recorder keeps trying to connect).

            * `RECORDING` - Recorder is connected to the stream and records are being created

            * `STOPPING` - Recording is stopping

            * `ERROR` - Error occurred when recording (this indicates a possible issue with Angelcam infrastructure)

            '
        retention:
          description: 'Retention period in ISO 8601 duration format tells how long in past we store the footage. Example: P7D means 7 days.

            '
          nullable: true
          type: string
        record_queue_capacity:
          description: 'Capacity of the record queue in seconds, maxium amount of seconds to be recorded in total, unlimited if null

            '
          nullable: true
          type: number
        deactivated_at:
          type: string
          format: datetime
          nullable: true
          description: Datetime when recording service has been deactivated, if null then recording is active.
        recording_start:
          type: string
          format: datetime
          nullable: true
          description: Recording footage start datetime, if null there is no recording footage
        recording_end:
          type: string
          format: datetime
          nullable: true
          description: Recording footage end datetime, if null there is no recording footage
      example:
        id: df5fcd78-6114-4750-b23a-cec3c3febc5b
        status: RECORDING
        retention: P7D
        deactivated_at: null
        record_queue_capacity: null
        recording_start: '2024-05-02T10:32:11.000Z'
        recording_end: 2024-05-07T16:58:7.5400Z
    Error404NotFound:
      allOf:
      - $ref: '#/components/schemas/ErrorGeneric'
      title: Error 404 Not Found
      example:
        title: 

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/angelcam/refs/heads/main/openapi/angelcam-recording-api-openapi.yml