ActionStreamer Web API

The ActionStreamer HTTP Web API — 186 paths and 247 operations across 43 resource areas — for managing devices, device health telemetry, device groups, Wi-Fi connections, events and event presets, live streams, video clips, audio clips, images, files, projects, users, user groups, sessions, notifications, tags and API keys on the ActionStreamer platform. Authenticated with HMAC-SHA256 request signing using an access key and secret created in the ActionStreamer portal.

Operations 247

GET /v1/agent/{agentID} Retrieves an individual agent based on the provided agentID.
PUT /v1/agent/{agentID} Updates an agent.
PATCH /v1/agent/{agentID} Applies a patch to an agent.
DELETE /v1/agent/{agentID} Deletes an agent.
POST /v1/agent/list Retrieves a list of agents with additional name details based on the provided filter criteria.
POST /v1/agent Creates a new agent or updates an existing agent.
GET /v1/agenttype/list Gets the agent type list.
GET /v1/apikey/{apiKeyID} Gets an API key by ID.
PUT /v1/apikey/{apiKeyID} Updates an API key.
DELETE /v1/apikey/{apiKeyID} Deletes an API key.
GET /v1/apikey/list Gets the API key list.
POST /v1/apikey Creates an API key.
GET /v1/audioclip/{audioClipID} Gets an audio clip by ID.
PUT /v1/audioclip/{audioClipID} Updates an audio clip.
PATCH /v1/audioclip/{audioClipID} Applies a patch to an audio clip.
DELETE /v1/audioclip/{audioClipID} Deletes an audio clip.
POST /v1/audioclip Creates an audio clip.
POST /v1/audioclip/{deviceSerial} Creates an audio clip for a device identified by serial number.
POST /v1/audioclip/createlist/{deviceSerial} Creates one or more audio clip records.
POST /v1/audioclip/upload Uploads one or more audio clips.
GET /v1/audioclip/list Gets the audio clip list.
POST /v1/audioclip/list Gets the filtered audio clip list.
POST /v1/audioclip/concatenate Enqueue a concatenate clips event based on a start time and end time.
POST /v1/audioclip/extract/list Gets the extracted audio clip list.
POST /v1/audioclip/devices/list Gets the audio clip list for multiple devices.
POST /v1/audioclip/devices/tag/list Get a list of AudioClips, AudioClipTags, and a unique list of Tags based on a start and end epoch.
POST /v1/audioclip/list/search/caption Get a list of AudioClips based on if their captions contain a search word/phrase
POST /v1/caption/audio/{deviceSerial} Generates image tags for an image.
GET /v1/caption/words/{captionID} Generates image tags for an image.
GET /v1/collectionitem/{collectionItemID} Gets a collection item by ID.
DELETE /v1/collectionitem/{collectionItemID} Deletes a collection item.
GET /v1/collectionitem/list Gets the collection item list.
POST /v1/collectionitem/{collectionID} Creates a collection item.
GET /v1/device/{deviceID} Gets a device by ID.
PUT /v1/device/{deviceID} Updates a device.
DELETE /v1/device/{deviceID} Deletes a device.
PATCH /v1/device/{deviceID} Applies a patch to a device.
POST /v1/device/name Gets a device by name or serial number.
GET /v1/device/list Gets the device list.
GET /v1/device/sharedwithme/list Get a list of devices shared with the logged in user.
GET /v1/device/sharedbyme/list Get a list of devices shared by the logged in user.
POST /v1/device Creates a device.
POST /v1/device/share Creates a shared-device permission entry.
POST /v1/device/ready Marks a device as ready and returns the current device record.
POST /v1/device/{deviceID}/transfer Transfers a device to another user.
POST /v1/device/{deviceID}/runanalytics/{runAnalytics} Sets the device analytics state and queues any required event.
GET /v1/device/list/all Gets the full device list available to the authenticated user.
GET /v1/device/{deviceID}/comment/{commentID} Gets a device comment by ID.
PUT /v1/device/{deviceID}/comment/{commentID} Updates a device comment.
DELETE /v1/device/{deviceID}/comment/{commentID} Deletes a device comment.
GET /v1/device/{deviceID}/comment/list Gets the device comment list.
POST /v1/device/{deviceID}/comment Creates a device comment.
GET /v1/devicegroup/{deviceGroupID} Gets a device group by ID.
PUT /v1/devicegroup/{deviceGroupID} Updates a device group.
DELETE /v1/devicegroup/{deviceGroupID} Deletes a device group.
GET /v1/devicegroup Gets a device group by name.
POST /v1/devicegroup Creates a device group.
GET /v1/devicegroup/list Gets the device group list.
GET /v1/devicegroup/{deviceGroupID}/device/list Get a list of devices in a device group.
GET /v1/shareddevicegroup/list Get a flat list of root device groups the user has been added to.
GET /v1/devicegroup/treenode/list Get a list of device groups the user has created and all devices and device groups under them, recursively.
GET /v1/devicegroup/tree Gets the device group tree.
GET /v1/shareddevicegroup/tree Get a list of device groups the user has been added to by other users and all devices and device groups under them, recursively.
GET /v1/shareddevicegroup/treenode/list Get a list of device groups the user has been added to by other users and all devices and device groups under them, recursively.
POST /v1/devicegroup/{deviceGroupID}/device/{deviceID} Adds a device to a device group.
POST /v1/devicegroup/share Creates a shared-device-group permission entry.
GET /v1/devicehealth/{deviceHealthID} Gets a device health record by ID.
PUT /v1/devicehealth/{deviceHealthID} Updates a device health record.
GET /v1/devicehealth/getlatest/{deviceID} Gets the latest device health record for a device.
POST /v1/devicehealth/list Gets the device health list.
GET /v1/device/list/health Gets device health rows for the authenticated user's devices.
POST /v1/device/{deviceID}/health/linechart Gets line chart data for a device health variable.
POST /v1/devicehealth Creates a device health record.
POST /v1/devicehealth/updatelatest Updates the latest device health record for a device.
GET /v1/devicewificonnection/{deviceWifiConnectionID} Gets a device Wi-Fi connection by ID.
PUT /v1/devicewificonnection/{deviceWifiConnectionID} Updates a device Wi-Fi connection.
PATCH /v1/devicewificonnection/{deviceWifiConnectionID} Applies a patch to a device Wi-Fi connection.
DELETE /v1/devicewificonnection/{deviceWifiConnectionID} Deletes a device Wi-Fi connection.
GET /v1/devicewificonnection/list/{deviceID} Gets the device Wi-Fi connection list.
GET /v1/devicewificonnection/list/{deviceID}/config Gets the device Wi-Fi configuration list.
POST /v1/devicewificonnection Creates a device Wi-Fi connection.
POST /v1/event/dequeue Dequeues the next pending event for a device agent.
POST /v1/event Creates an event.
GET /v1/event/{eventID} Gets an event by ID.
PUT /v1/event/{eventID} Updates an event.
PATCH /v1/event/status Updates event status fields.
PATCH /v1/event/{eventID}/progress Updates event progress fields.
POST /v1/event/list Gets the event list.
POST /v1/event/lastevent/agenttype/{agentTypeID} Gets the last event for a device based on agent type.
POST /v1/event/list/pending Get a list of pending events.
POST /v1/event/list/pending/longpoll Long-polls for pending events for a device.
DELETE /v1/event/list/pending/{deviceID} Clears pending events for a device.
POST /v1/event/endprocess/{eventID} Queues an event to end the process associated with an event.
GET /v1/eventpreset/{eventPresetID} Gets an event preset by ID.
PUT /v1/eventpreset/{eventPresetID} Updates an event preset.
DELETE /v1/eventpreset/{eventPresetID} Deletes an event preset.
GET /v1/eventpreset/list/device/{deviceID} Gets the event preset list.
POST /v1/eventpreset/run/{eventPresetID} This endpoint runs a preset.
POST /v1/eventpreset/startupevent/{deviceState}/{eventPresetID} Sets the device startup event preset.
DELETE /v1/eventpreset/startupevent/{deviceState}/device/{deviceID} Deletes the device startup event preset.
POST /v1/eventpreset Creates an event preset.
POST /v1/eventpreset/{eventPresetID}/copy/{newDeviceID} Copies an event preset to another device.
GET /v1/eventstatus/list Gets the event status list.
POST /v1/eventtype/list Gets the event type list.
POST /v1/file Creates a file record.
DELETE /v1/device/{deviceID}/file/{fileID} Deletes a file record.
POST /v1/file/temp Creates a temporary file record and signed upload URL.
GET /v1/file/{fileID} Gets a file by ID.
POST /v1/file/success/{fileID} Marks a file upload as successful.
GET /v1/image/{imageID} Gets an image by ID.
PUT /v1/image/{imageID} Updates an image.
PATCH /v1/image/{imageID} Applies a patch to an image.
DELETE /v1/image/{imageID} Deletes an image.
POST /v1/image Creates an image.
POST /v1/image/{deviceSerial} Creates an image for a device identified by serial number.
GET /v1/image/list Gets the image list.
POST /v1/image/list Gets the filtered image list.
POST /v1/image/extract/list Gets the extracted image list.
POST /v1/image/devices/list Gets the image list for multiple devices.
POST /v1/image/devices/tag/list Get a list of Images, ImageTags, and a unique list of Tags based on a start and end epoch.
POST /v1/image/upload Uploads one or more images.
POST /v1/image/createlist/{deviceSerial} Creates one or more image records.
GET /v1/logmessage/{logMessageID} Gets a log message by ID.
POST /v1/logmessage/list Gets the log message list.
POST /v1/logmessage Creates a log message.
POST /v1/mediarouter/auth Authorizes a media router request.
GET /v1/multifactorauth/list Gets the multifactor authentication list.
GET /v1/multifactorauth/{multifactorAuthID} Gets a multifactor authentication record by ID.
PUT /v1/multifactorauth/{multifactorAuthID} Updates a multifactor authentication record.
DELETE /v1/multifactorauth/{multifactorAuthID} Deletes a multifactor authentication record.
POST /v1/multifactorauth Creates a new multifactor authentication method.
PUT /v1/multifactorauth/{multifactorAuthID}/verify Validates a multifactor authentication code after creation.
PUT /v1/validatemfa Validates a multifactor authentication code during sign-in.
PUT /v1/multifactorauth/{multifactorAuthID}/resend Resends the multifactor authentication code for creation.
PUT /v1/multifactorauth/resend Resends the multifactor authentication code for sign-in.
GET /v1/notification/{notificationID} Gets a notification by ID.
PUT /v1/notification/{notificationID} Updates a notification.
DELETE /v1/notification/{notificationID} Deletes a notification.
GET /v1/notification/list Gets the notification list.
POST /v1/notification Creates a notification.
GET /v1/package/{packageID} Gets a package by ID.
PUT /v1/package/{packageID} Updates a package.
DELETE /v1/package/{packageID} Deletes a package.
GET /v1/package/list Gets the package list.
GET /v1/package/list/uploaded Get a list of package items that have been uploaded to S3.
POST /v1/package Creates a package.
POST /v1/package/{packageID}/updatedevices Queues a package update for the specified devices.
POST /v1/password Changes the authenticated user password.
POST /v1/forgotpassword Starts the forgot-password flow.
POST /v1/resetpassword Resets a user password.
GET /v1/permissiontype/list Gets the permission type list.
GET /v1/project/{projectID} Gets a project by ID.
PUT /v1/project/{projectID} Updates a project.
DELETE /v1/project/{projectID} Deletes a project.
PATCH /v1/project/{projectID} Applies a patch to a project.
POST /v1/project/name Gets a project by name.
GET /v1/project/list Gets the project list.
POST /v1/project Creates a project.
POST /v1/register Registers a new user.
GET /v1/session Gets the current session information.
DELETE /v1/session Deletes the current session.
POST /v1/session Creates a session.
GET /v1/session/list Gets the session list.
DELETE /v1/session/{sessionID} Deletes a session by ID.
GET /v1/sessionvariable/list Gets the session variable list for the authenticated user.
GET /v1/sessionvariable/{variableName} Gets a session variable for the authenticated user.
DELETE /v1/sessionvariable/{variableName} Deletes a session variable for the authenticated user.
POST /v1/sessionvariable Creates or updates a session variable for the authenticated user.
GET /v1/usersetting/list Gets the user setting list.
GET /v1/usersetting Gets a user setting.
PUT /v1/usersetting Creates or updates a user setting.
DELETE /v1/usersetting Deletes a user setting.
GET /v1/devicesetting/device/{deviceID}/list Gets the device setting list.
GET /v1/devicesetting/device/{deviceID} Gets a device setting.
PUT /v1/devicesetting/device/{deviceID} Creates or updates a device setting.
DELETE /v1/devicesetting/device/{deviceID} Deletes a device setting.
GET /v1/setting/app/{applicationID}/list Gets the application setting list.
GET /v1/setting/app/{applicationID}/{settingName} Gets an application setting.
PUT /v1/setting/app/{applicationID} Creates or updates an application setting.
GET /v1/shareditem/{sharedItemID} Gets a shared item by ID.
PUT /v1/shareditem/{sharedItemID} Updates a shared item.
PATCH /v1/shareditem/{sharedItemID} Applies a patch to a shared item.
DELETE /v1/shareditem/{sharedItemID} Deletes a shared item.
GET /v1/shareditem/list Gets the shared item list.
POST /v1/shareditem Creates a shared item.
GET /v1/signinhistory/{signInHistoryID} Gets a sign-in history record by ID.
GET /v1/signinhistory/list Gets the sign-in history list.
GET /v1/stream/{streamID} Gets a stream by ID.
PUT /v1/stream/{streamID} Updates a stream.
DELETE /v1/stream/{streamID} Deletes a stream.
PATCH /v1/stream/{streamID} Applies a patch to a stream.
GET /v1/device/{deviceID}/stream/mostrecent Gets the most recent stream for a device.
POST /v1/device/{deviceID}/stream/path Gets a stream by stream path.
GET /v1/device/{deviceID}/stream/list Gets the stream list.
POST /v1/stream Creates a stream.
POST /v1/tag/image/{deviceSerial} Generates image tags for an image.
POST /v1/device/{deviceID}/tag/list Get a list of tags for a device based on an epoch range.
POST /v1/testauth Tests an authenticated API call.
GET /v1/test Tests an anonymous API call.
POST /v1/testapicall Tests an outbound API call.
GET /v1/timezone/list Gets the supported time zone list.
GET /v1/timezone/offset Gets the authenticated user time zone offset in hours.
POST /v1/token/mediarouter/read Creates a media router read token.
POST /v1/token/mediarouter/publish Creates a media router publish token.
GET /v1/user/lastdataupdate Gets the last user data refresh timestamp.
GET /v1/user/list Gets the user email list for the authenticated user domain.
GET /v1/user/search Searches for users who have opted in to be searchable.
GET /v1/user/detail/list Gets the detailed user list.
GET /v1/user/timezone Gets the authenticated user time zone.
GET /v1/user/features Gets the feature list available to the authenticated user.
PATCH /v1/user Applies a patch to the authenticated user.
GET /v1/userbrowser/{userBrowserID} Gets a trusted browser record by ID.
PATCH /v1/userbrowser/{userBrowserID} Applies a patch to a trusted browser record.
GET /v1/userbrowser/{browserGUID} Gets a trusted browser record by browser GUID.
GET /v1/userbrowser/list Gets the trusted browser list.
PATCH /v1/userbrowser/trust/{browserGUID} Marks a browser as trusted.
GET /v1/usergroup/{userGroupID} Gets a user group by ID.
PUT /v1/usergroup/{userGroupID} Updates a user group.
DELETE /v1/usergroup/{userGroupID} Deletes a user group.
GET /v1/usergroup/list Gets the user group list.
GET /v1/usergroup/{userGroupID}/list Gets the user list for a user group.
POST /v1/usergroup Creates a user group.
POST /v1/verify Verifies a user email address.
POST /v1/reverify Resends a verification email.
POST /v1/versionauth Checks the version endpoint with authentication.
GET /v1/version Checks the version endpoint without authentication.
POST /v1/versionapicall Checks API version call behavior.
GET /v1/videoclip/{videoClipID} Gets a video clip by ID.
PUT /v1/videoclip/{videoClipID} Updates a video clip.
PATCH /v1/videoclip/{videoClipID} Applies a patch to a video clip.
DELETE /v1/videoclip/{videoClipID} Deletes a video clip.
POST /v1/videoclip Creates a video clip.
POST /v1/videoclip/{deviceSerial} Creates a video clip for a device identified by serial number.
POST /v1/videoclip/createlist/{deviceSerial} Creates one or more video clip records.
POST /v1/videoclip/upload Uploads one or more video clips.
GET /v1/videoclip/list Gets the video clip list.
POST /v1/videoclip/list Gets the filtered video clip list.
POST /v1/videoclip/concatenate Enqueue a concatenate clips event based on a start time and end time.
POST /v1/videoclip/extract/list Gets the extracted video clip list.
POST /v1/videoclip/devices/list Gets the video clip list for multiple devices.
POST /v1/videoclip/devices/tag/list Get a list of VideoClips, VideoClipTags, and a unique list of Tags based on a start and end epoch.
GET /v1/wificonnection/{wifiConnectionID} Gets a Wi-Fi connection by ID.
PUT /v1/wificonnection/{wifiConnectionID} Updates a Wi-Fi connection.
PATCH /v1/wificonnection/{wifiConnectionID} Applies a patch to a Wi-Fi connection.
DELETE /v1/wificonnection/{wifiConnectionID} Deletes a Wi-Fi connection.
GET /v1/wificonnection/list Gets the Wi-Fi connection list.
POST /v1/wificonnection Creates a Wi-Fi connection.

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/actionstreamer-web-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

actionstreamer-openapi-original.json Raw ↑
{
  "openapi": "3.0.1",
  "info": {
    "title": "ActionStreamer API",
    "description": "A web API for the ActionStreamer platform.  Publish date: 2026-07-07 16:13:41 UTC",
    "termsOfService": "https://actionstreamer.com/terms-of-use",
    "contact": {
      "name": "Contact",
      "url": "https://actionstreamer.com/company"
    },
    "version": "v1"
  },
  "paths": {
    "/v1/agent/{agentID}": {
      "get": {
        "tags": [
          "Agent"
        ],
        "summary": "Retrieves an individual agent based on the provided agentID.",
        "description": "Returns the requested agent when access is allowed.",
        "parameters": [
          {
            "name": "agentID",
            "in": "path",
            "description": "The unique identifier of the agent to retrieve.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "agentTypeID": 1,
                  "agentIndex": 1,
                  "currentEventID": 501,
                  "processID": 4321,
                  "version": "1.0.0",
                  "agentName": "Example value",
                  "agentDescription": "Example description",
                  "recentOutput": "Agent started successfully.",
                  "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Agent"
        ],
        "summary": "Updates an agent.",
        "description": "Request body: JSON object. Updates selected runtime fields such as\r\n`currentEventID`, `processID`, `agentName`, `agentDescription`, and `recentOutput`.",
        "parameters": [
          {
            "name": "agentID",
            "in": "path",
            "description": "The ID of the agent to update.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Agent"
              },
              "example": {
                "key": 1,
                "deviceID": 201,
                "agentTypeID": 1,
                "agentIndex": 1,
                "currentEventID": 501,
                "processID": 4321,
                "version": "1.0.0",
                "agentName": "Example value",
                "agentDescription": "Example description",
                "recentOutput": "Agent started successfully.",
                "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                "creationDate": "2026-03-30T12:00:00.0000000Z"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      },
      "patch": {
        "tags": [
          "Agent"
        ],
        "summary": "Applies a patch to an agent.",
        "description": "Request body: array of patch operations. Only allows patching\r\n`agentDescription`, `recentOutput`, `processID`, and `currentEventID`.",
        "parameters": [
          {
            "name": "agentID",
            "in": "path",
            "description": "The ID of the agent to patch.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "agentTypeID": 1,
                  "agentIndex": 1,
                  "currentEventID": 501,
                  "processID": 4321,
                  "version": "1.0.0",
                  "agentName": "Example value",
                  "agentDescription": "Example description",
                  "recentOutput": "Agent started successfully.",
                  "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Agent"
        ],
        "summary": "Deletes an agent.",
        "description": "Deletes the agent.",
        "parameters": [
          {
            "name": "agentID",
            "in": "path",
            "description": "The ID of the agent to delete.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      }
    },
    "/v1/agent/list": {
      "post": {
        "tags": [
          "Agent"
        ],
        "summary": "Retrieves a list of agents with additional name details based on the provided filter criteria.",
        "description": "Request body: JSON object.\r\nReturns a list of agents with additional name details.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DateAndCountFilter"
              },
              "example": {
                "deviceID": 201,
                "startDate": "2026-03-30T12:00:00.0000000Z",
                "endDate": "2026-03-30T12:00:00.0000000Z",
                "count": 25,
                "order": "Example value"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Agent"
                  },
                  "example": [
                    {
                      "key": 1,
                      "userID": 101,
                      "deviceID": 201,
                      "agentTypeID": 1,
                      "agentIndex": 1,
                      "currentEventID": 501,
                      "processID": 4321,
                      "version": "1.0.0",
                      "agentName": "Example value",
                      "agentDescription": "Example description",
                      "recentOutput": "Agent started successfully.",
                      "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Agent"
                  },
                  "example": [
                    {
                      "key": 1,
                      "userID": 101,
                      "deviceID": 201,
                      "agentTypeID": 1,
                      "agentIndex": 1,
                      "currentEventID": 501,
                      "processID": 4321,
                      "version": "1.0.0",
                      "agentName": "Example value",
                      "agentDescription": "Example description",
                      "recentOutput": "Agent started successfully.",
                      "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                },
                "example": [
                  {
                    "key": 1,
                    "deviceID": 201,
                    "agentTypeID": 1,
                    "agentIndex": 1,
                    "currentEventID": 501,
                    "processID": 4321,
                    "version": "1.0.0",
                    "agentName": "Example value",
                    "agentDescription": "Example description",
                    "recentOutput": "Agent started successfully.",
                    "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                    "creationDate": "2026-03-30T12:00:00.0000000Z",
                    "deviceName": "WearableDevice",
                    "agentType": "Device"
                  }
                ]
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Agent"
                  },
                  "example": [
                    {
                      "key": 1,
                      "userID": 101,
                      "deviceID": 201,
                      "agentTypeID": 1,
                      "agentIndex": 1,
                      "currentEventID": 501,
                      "processID": 4321,
                      "version": "1.0.0",
                      "agentName": "Example value",
                      "agentDescription": "Example description",
                      "recentOutput": "Agent started successfully.",
                      "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/v1/agent": {
      "post": {
        "tags": [
          "Agent"
        ],
        "summary": "Creates a new agent or updates an existing agent.",
        "description": "This endpoint either creates a new agent or updates an existing one. It should be called at agent startup.\r\nRequest body: JSON object. Supports `deviceSerial` or `deviceName`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterAgent"
              },
              "example": {
                "deviceName": "WearableDevice",
                "deviceSerial": "10001234",
                "agentType": "Device",
                "agentVersion": "1.0.0",
                "agentIndex": 1,
                "processID": 4321
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "agentTypeID": 1,
                  "agentIndex": 1,
                  "currentEventID": 501,
                  "processID": 4321,
                  "version": "1.0.0",
                  "agentName": "Example value",
                  "agentDescription": "Example description",
                  "recentOutput": "Agent started successfully.",
                  "lastHeardFromDate": "2026-03-30T12:00:00.0000000Z",
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Agent"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "example": "Example value"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string",
                  "example": "Example value"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string",
                  "example": "Example value"
                }
              }
            }
          }
        }
      }
    },
    "/v1/agenttype/list": {
      "get": {
        "tags": [
          "AgentType"
        ],
        "summary": "Gets the agent type list.",
        "description": "Returns the supported agent types.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AgentType"
                  },
                  "example": [
                    {
                      "key": 1,
                      "agentTypeName": "Device",
                      "detailedDescription": "Example description",
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                },
                "example": [
                  {
                    "key": 1,
                    "agentTypeName": "Device",
                    "detailedDescription": "Example description",
                    "creationDate": "2026-03-30T12:00:00.0000000Z"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/v1/apikey/{apiKeyID}": {
      "get": {
        "tags": [
          "APIKey"
        ],
        "summary": "Gets an API key by ID.",
        "description": "This endpoint requires an authenticated web session.",
        "parameters": [
          {
            "name": "apiKeyID",
            "in": "path",
            "description": "The ID of the API key to retrieve.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                },
                "example": {
                  "key": 1,
                  "appID": 1,
                  "aPIKeyDescription": "Example description",
                  "accessKey": "Example value",
                  "secretKey": "Example value",
                  "status": 1,
                  "lastAccessDate": "2026-03-30T12:00:00.0000000Z",
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "APIKey"
        ],
        "summary": "Updates an API key.",
        "description": "Request body: JSON object. This endpoint requires an authenticated web\r\nsession and currently only updates `aPIKeyDescription`.",
        "parameters": [
          {
            "name": "apiKeyID",
            "in": "path",
            "description": "The ID of the API key to update.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/APIKey"
              },
              "example": {
                "key": 1,
                "appID": 1,
                "aPIKeyDescription": "Example description",
                "accessKey": "Example value",
                "secretKey": "Example value",
                "status": 1,
                "lastAccessDate": "2026-03-30T12:00:00.0000000Z",
                "creationDate": "2026-03-30T12:00:00.0000000Z"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      },
      "delete": {
        "tags": [
          "APIKey"
        ],
        "summary": "Deletes an API key.",
        "description": "This endpoint requires an authenticated web session.",
        "parameters": [
          {
            "name": "apiKeyID",
            "in": "path",
            "description": "The ID of the API key to delete.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      }
    },
    "/v1/apikey/list": {
      "get": {
        "tags": [
          "APIKey"
        ],
        "summary": "Gets the API key list.",
        "description": "This endpoint requires an authenticated web session.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/APIKey"
                  },
                  "example": [
                    {
                      "key": 1,
                      "userID": 101,
                      "appID": 1,
                      "aPIKeyDescription": "Example description",
                      "accessKey": "Example value",
                      "secretKey": "Example value",
                      "status": 1,
                      "lastAccessDate": "2026-03-30T12:00:00.0000000Z",
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                },
                "example": [
                  {
                    "key": 1,
                    "appID": 1,
                    "aPIKeyDescription": "Example description",
                    "accessKey": "Example value",
                    "secretKey": "Example value",
                    "status": 1,
                    "lastAccessDate": "2026-03-30T12:00:00.0000000Z",
                    "creationDate": "2026-03-30T12:00:00.0000000Z"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/v1/apikey": {
      "post": {
        "tags": [
          "APIKey"
        ],
        "summary": "Creates an API key.",
        "description": "This endpoint requires an authenticated web session. A new access key and secret are generated automatically.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                },
                "example": {
                  "key": 1,
                  "appID": 1,
                  "aPIKeyDescription": "Example description",
                  "accessKey": "Example value",
                  "secretKey": "Example value",
                  "status": 1,
                  "lastAccessDate": "2026-03-30T12:00:00.0000000Z",
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audioclip/{audioClipID}": {
      "get": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Gets an audio clip by ID.",
        "parameters": [
          {
            "name": "audioClipID",
            "in": "path",
            "description": "The audio clip ID.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioClip"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "fileID": 1,
                  "audioClipStatus": 1,
                  "audioClipTypeID": 1,
                  "audioClipParameters": "Example value",
                  "localFilePath": "Example value",
                  "fileSize": 1,
                  "bitrate": 1,
                  "startTime": 1,
                  "startTimeMs": 1,
                  "endTime": 1,
                  "endTimeMs": 1,
                  "clipLengthInSeconds": 1,
                  "tagListID": 1,
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Updates an audio clip.",
        "description": "Request body: JSON object.",
        "parameters": [
          {
            "name": "audioClipID",
            "in": "path",
            "description": "The audio clip ID.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AudioClip"
              },
              "example": {
                "key": 1,
                "deviceID": 201,
                "fileID": 1,
                "audioClipStatus": 1,
                "audioClipTypeID": 1,
                "audioClipParameters": "Example value",
                "localFilePath": "Example value",
                "fileSize": 1,
                "bitrate": 1,
                "startTime": 1,
                "startTimeMs": 1,
                "endTime": 1,
                "endTimeMs": 1,
                "clipLengthInSeconds": 1,
                "tagListID": 1,
                "creationDate": "2026-03-30T12:00:00.0000000Z"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      },
      "patch": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Applies a patch to an audio clip.",
        "description": "Request body: array of patch operations.\r\nOnly a limited set of fields such as `fileID` and `audioClipStatus` can be patched.",
        "parameters": [
          {
            "name": "audioClipID",
            "in": "path",
            "description": "The audio clip ID.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "example": "Patch applied successfully."
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Deletes an audio clip.",
        "parameters": [
          {
            "name": "audioClipID",
            "in": "path",
            "description": "The audio clip ID.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "integer",
              "format": "int64",
              "example": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success. No response body."
          }
        }
      }
    },
    "/v1/audioclip": {
      "post": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Creates an audio clip.",
        "description": "Request body: JSON object.\r\nThis endpoint is not used by devices.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAudioClip"
              },
              "example": {
                "deviceID": 201,
                "deviceName": "WearableDevice",
                "fileID": 1,
                "localFilePath": "Example value",
                "startTime": 1,
                "startTimeMs": 1,
                "clipLengthInSeconds": 1,
                "audioClipStatus": 1,
                "audioClipTypeID": 1,
                "audioClipParameters": "Example value"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioClip"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "fileID": 1,
                  "audioClipStatus": 1,
                  "audioClipTypeID": 1,
                  "audioClipParameters": "Example value",
                  "localFilePath": "Example value",
                  "fileSize": 1,
                  "bitrate": 1,
                  "startTime": 1,
                  "startTimeMs": 1,
                  "endTime": 1,
                  "endTimeMs": 1,
                  "clipLengthInSeconds": 1,
                  "tagListID": 1,
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audioclip/{deviceSerial}": {
      "post": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Creates an audio clip for a device identified by serial number.",
        "parameters": [
          {
            "name": "deviceSerial",
            "in": "path",
            "description": "The device serial number from the route.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "string",
              "example": "Example value"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AudioClip"
              },
              "example": {
                "key": 1,
                "deviceID": 201,
                "fileID": 1,
                "audioClipStatus": 1,
                "audioClipTypeID": 1,
                "audioClipParameters": "Example value",
                "localFilePath": "Example value",
                "fileSize": 1,
                "bitrate": 1,
                "startTime": 1,
                "startTimeMs": 1,
                "endTime": 1,
                "endTimeMs": 1,
                "clipLengthInSeconds": 1,
                "tagListID": 1,
                "creationDate": "2026-03-30T12:00:00.0000000Z"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioClip"
                },
                "example": {
                  "key": 1,
                  "deviceID": 201,
                  "fileID": 1,
                  "audioClipStatus": 1,
                  "audioClipTypeID": 1,
                  "audioClipParameters": "Example value",
                  "localFilePath": "Example value",
                  "fileSize": 1,
                  "bitrate": 1,
                  "startTime": 1,
                  "startTimeMs": 1,
                  "endTime": 1,
                  "endTimeMs": 1,
                  "clipLengthInSeconds": 1,
                  "tagListID": 1,
                  "creationDate": "2026-03-30T12:00:00.0000000Z"
                }
              }
            }
          }
        }
      }
    },
    "/v1/audioclip/createlist/{deviceSerial}": {
      "post": {
        "tags": [
          "AudioClip"
        ],
        "summary": "Creates one or more audio clip records.",
        "description": "Request body: JSON array of audio clip objects.",
        "parameters": [
          {
            "name": "deviceSerial",
            "in": "path",
            "description": "The device serial number from the route.",
            "required": true,
            "style": "simple",
            "schema": {
              "type": "string",
              "example": "Example value"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AudioClip"
                  },
                  "example": [
                    {
                      "key": 1,
                      "userID": 101,
                      "deviceID": 201,
                      "fileID": 1,
                      "audioClipStatus": 1,
                      "audioClipTypeID": 1,
                      "audioClipParameters": "Example value",
                      "localFilePath": "Example value",
                      "fileSize": 1,
                      "bitrate": 1,
                      "startTime": 1,
                      "startTimeMs": 1,
                      "endTime": 1,
                      "endTimeMs": 1,
                      "clipLengthInSeconds": 1,
                      "tagListID": 1,
                      "creationDate": "2026-03-30T12:00:00.0000000Z",
                      "createdBy": 1,
                      "lastModifiedDate": "2026-03-30T12:00:00.0000000Z",
                      "lastModifiedBy": 1
                    }
                  ]
                },
                "example": [
                  {
                    "key": 1,
                    "deviceID": 201,
                    "fileID": 1,
                    "audioClipStatus": 1,
                    "audioClipTypeID": 1,
                    "audioClipParameters": "Example value",
                    "localFilePath": "Example value",
                    "fileSize": 1,
                    "bitrate": 1,
                

# --- truncated at 32 KB (541 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/actionstreamer/refs/heads/main/openapi/_original/actionstreamer-openapi-original.json