Application Create

Creates a new streaming application.

Request

Property Value
Method POST
URL /api/applications
Content-Type application/json
Authentication Bearer Token

Request Body

Parameter Type Required Description
data.attributes.name string Yes Application name (unique)
data.attributes.type "mono" | "origin" | "transcode" | "edge" Yes Application type

Additional settings depend on the application type. See Application Types section.

Response

Status Codes

Code Description
201 Created - Application successfully created
400 Bad Request - Invalid parameters
401 Unauthorized - Invalid or missing token
409 Conflict - Application name already exists
429 Too Many Requests - Rate limit exceeded
500 Internal Server Error

Successful Response (201)

{
  "data": {
    "name": "mono",
    "type": "MONO",
    "generalSettings": {
      "attributes": {
        "description": { "editable": true, "value": "Main live streaming application" },
        "broadcastLimit": { "editable": true, "value": 50 },
        "statInterval": { "editable": true, "value": 2 },
        "autoThumbnail": {
          "enabled": { "editable": true, "value": true },
          "interval": { "editable": true, "value": 10 },
          "thumbWidth": { "editable": true, "value": 100 },
          "thumbHeight": { "editable": true, "value": 100 }
        }
      }
    },
    "ingestSettings": {
      "attributes": {
        "allowStreamIngest": { "editable": true, "value": true },
        "autoStreamPublish": { "editable": true, "value": true },
        "allowStreamOverwrite": { "editable": true, "value": false },
        "authorizationEnabled": { "editable": true, "value": false },
        "authType": { "editable": true, "value": "none" }
      }
    },
    "playbackSettings": {
      "attributes": {
        "totalViewerLimit": { "editable": true, "value": null },
        "streamViewerLimit": { "editable": true, "value": 100 },
        "frameBufferSize": { "editable": true, "value": 5 },
        "harnessTypes": ["storm-hls", "storm-mse", "rtmp"]
      }
    },
    "streamSecuritySettings": {
      "attributes": {
        "tokenProtectionEnabled": { "editable": true, "value": true },
        "hashAlgorithm": { "editable": true, "value": "sha256" },
        "tokenLifespan": { "editable": true, "value": 100 },
        "secret": { "editable": true, "value": "xxx" },
        "domainAccessRights": [
          {
            "type": { "editable": true, "value": "allow" },
            "domain": { "editable": true, "value": "*" }
          }
        ]
      }
    },
    "liveTranscodingSettings": {
      "attributes": {
        "enabled": { "editable": true, "value": true },
        "enabledPresets": ["360p", "480p", "720p"]
      }
    },
    "dvrSettings": {
      "attributes": {
        "enabled": { "editable": true, "value": false },
        "cacheSize": { "editable": true, "value": 100 }
      }
    },
    "recordingSettings": {
      "attributes": {
        "enabled": { "editable": true, "value": false }
      }
    },
    "streamKeyAliasSettings": {
      "attributes": {
        "enabled": { "editable": true, "value": true },
        "autoDiscovery": {
          "enabled": { "editable": true, "value": true },
          "requestURL": { "editable": true, "value": "https://api.example.com/alias/${streamKey}" },
          "xApiKey": { "editable": true, "value": "bd34ddawe34v51rxw6tbn" },
          "expireTime": { "editable": true, "value": 3600 }
        }
      }
    }
  },
  "meta": {
    "executionTime": 143,
    "generatedAt": 1766055804481
  },
  "message": "New application created successfully"
}

Response Body

Parameter Type Description
data.name string Application name
data.type "mono" | "origin" | "transcode" | "edge" Application type
message string Response status message

Response includes all settings with editable and value properties. See Settings Reference for details.

Metadata

Parameter Type Description
meta.executionTime integer Request processing time in milliseconds
meta.generatedAt integer Response generation timestamp (Unix timestamp in ms)

Username Already Exists (409)

{
  "message": "Application name already exists: {appName}"
}

Error Response (4xx/5xx)

{
  "message": "Error message"
}

Error Response Body

Parameter Type Description
message string Human-readable error message

Application Types

MONO (Standalone)

{
  "data": {
    "attributes": {
      "name": "mono",
      "type": "mono",
      "generalSettings": { },
      "ingestSettings": { },
      "playbackSettings": { },
      "streamSecuritySettings": { },
      "liveTranscodingSettings": { },
      "dvrSettings": { },
      "recordingSettings": { },
      "streamKeyAliasSettings": { }
    }
  }
}
Setting Required Description
generalSettings Yes General application settings
ingestSettings Yes Stream ingest configuration
playbackSettings Yes Playback and viewer settings
streamSecuritySettings Yes Token protection and domain access
liveTranscodingSettings Yes Live transcoding presets
dvrSettings Yes DVR/time-shift settings
recordingSettings Yes Recording configuration
streamKeyAliasSettings Yes Stream key alias discovery

ORIGIN (Cluster Origin)

{
  "data": {
    "attributes": {
      "name": "origin",
      "type": "origin",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "ingestSettings": { },
      "liveTranscodingSettings": { },
      "recordingSettings": { }
    }
  }
}
Setting Required Description
generalSettings Yes General application settings
streamingClusterSettings Yes Cluster connection configuration
ingestSettings Yes Stream ingest configuration
liveTranscodingSettings Yes Live transcoding presets
recordingSettings Yes Recording configuration

TRANSCODE (Cluster Transcoder)

{
  "data": {
    "attributes": {
      "name": "transcode",
      "type": "transcode",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "liveTranscodingSettings": { }
    }
  }
}
Setting Required Description
generalSettings Yes General application settings
streamingClusterSettings Yes Cluster connection configuration
liveTranscodingSettings Yes Live transcoding presets

EDGE (Cluster Edge)

{
  "data": {
    "attributes": {
      "name": "edge",
      "type": "edge",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "playbackSettings": { },
      "streamSecuritySettings": { },
      "streamKeyAliasSettings": { },
      "dvrSettings": { },
      "recordingSettings": { }
    }
  }
}
Setting Required Description
generalSettings Yes General application settings
streamingClusterSettings Yes Cluster connection configuration
playbackSettings Yes Playback and viewer settings
streamSecuritySettings Yes Token protection and domain access
streamKeyAliasSettings Yes Stream key alias discovery
dvrSettings Yes DVR/time-shift settings
recordingSettings Yes Recording configuration

Settings Reference

General Settings

Parameter Type Description
generalSettings.description string Application description
generalSettings.broadcastLimit integer Maximum number of streams
generalSettings.statInterval integer Statistics update interval (sec)
generalSettings.autoThumbnail.enabled boolean Enable automatic thumbnails
generalSettings.autoThumbnail.interval integer Thumbnail generation interval (sec)
generalSettings.autoThumbnail.thumbWidth integer Thumbnail width in pixels
generalSettings.autoThumbnail.thumbHeight integer Thumbnail height in pixels

Ingest Settings

Parameter Type Description
ingestSettings.allowStreamIngest boolean Determines whether stream publishing (ingest) is allowed
ingestSettings.autoStreamPublish boolean Specifies whether newly ingested streams are automatically published (visible to viewers) or remain unpublished until explicitly set to PUBLISHED
ingestSettings.allowStreamOverwrite boolean Specifies whether an existing stream can be replaced by another stream with the same name or ID
ingestSettings.authorizationEnabled boolean Enable ingest authorization
ingestSettings.authType "none" | "managed" | "request" | "file" | "local" Authorization type (required if authorizationEnabled is true)
  • Authorization Type: "none" (Default)

    No authorization required for stream ingest.

  • Authorization Type: "managed" (Stream-Level Auth)

    Works similarly to "request", "file", or "local", but authentication data is attached to dynamically created streams. Streams can be created using the "Create Stream" option in the Application menu or via the API. A client wishing to publish under a given streamKey must include authentication credentials (for example, in OBS, by enabling the "Use Authentication" option in the Broadcast settings).

  • Authorization Type: "request" (HTTP Request)

    Validates stream ingest via external HTTP API.

Parameter Type Description
ingestSettings.requestURL string Authorization API URL (use ${streamKey} placeholder)
ingestSettings.apiKey string API key for authorization requests
  • Authorization Type: "file" (XML File)

    Validates stream ingest against an XML file with authorized keys.

Parameter Type Description
ingestSettings.fileURL string Path to authorization XML file
  • Authorization Type: "local" (Local Users/Tokens)

    Validates stream ingest against a local list of users and tokens.

Parameter Type Description
ingestSettings.authUsers array List of authorized users
ingestSettings.authUsers[].username string Username
ingestSettings.authUsers[].password string Password

Playback Settings

Parameter Type Description
playbackSettings.totalViewerLimit integer | null Total viewer limit (null = unlimited)
playbackSettings.streamViewerLimit integer Viewer limit per stream
playbackSettings.frameBufferSize integer Frame buffer size
playbackSettings.harnessTypes string[] Enabled playback types

Allowed values for harnessTypes

  • "storm-hls" — Storm HLS player
  • "storm-mse" — Storm MSE player
  • "generic-hls" — Generic HLS
  • "rtmp" — RTMP playback

Stream Security Settings

Parameter Type Description
streamSecuritySettings.tokenProtectionEnabled boolean Enable token protection
streamSecuritySettings.hashAlgorithm string Hash algorithm for tokens
streamSecuritySettings.tokenLifespan integer Token lifespan in seconds
streamSecuritySettings.secret string Secret key for token signing
streamSecuritySettings.domainAccessRights array Domain access rules
streamSecuritySettings.domainAccessRights[].type "allow" | "deny" Rule type
streamSecuritySettings.domainAccessRights[].domain string Domain pattern ("*" for all)

Live Transcoding Settings

Parameter Type Description
liveTranscodingSettings.enabled boolean Enable live transcoding
liveTranscodingSettings.enabledPresets string[] List of enabled preset names

DVR Settings

Parameter Type Description
dvrSettings.enabled boolean Enable DVR
dvrSettings.cacheSize integer DVR cache size in seconds

Recording Settings

Parameter Type Description
recordingSettings.enabled boolean Enable recording
recordingSettings.fileFormat "fMP4" | "FLV" Recording file format (required if enabled)
recordingSettings.savePath string Directory path for recordings (required if enabled)
recordingSettings.maxFileSize integer Maximum file size in MB
recordingSettings.maxFileDuration integer Maximum file duration in seconds
recordingSettings.cacheSize integer Cache size in seconds
recordingSettings.maxStorageSize integer Maximum total storage size in MB
recordingSettings.removeOldFiles boolean Automatically remove old files when storage is full

Stream Key Alias Settings

Parameter Type Description
streamKeyAliasSettings.enabled boolean Enable stream key aliases
streamKeyAliasSettings.autoDiscovery.enabled boolean Enable auto-discovery
streamKeyAliasSettings.autoDiscovery.requestURL string Discovery API URL (use ${streamKey} placeholder)
streamKeyAliasSettings.autoDiscovery.xApiKey string API key for discovery requests
streamKeyAliasSettings.autoDiscovery.expireTime integer Alias cache expiration in seconds

Streaming Cluster Settings (ORIGIN/TRANSCODE)

Parameter Type Description
streamingClusterSettings.nodeHostname string This node's hostname
streamingClusterSettings.nodePort integer This node's port
streamingClusterSettings.nodeIsSSL boolean Use SSL for this node
streamingClusterSettings.nodePriority integer Node priority in cluster
streamingClusterSettings.clusterManagers array List of cluster managers
streamingClusterSettings.clusterManagers[].hostname string Manager hostname
streamingClusterSettings.clusterManagers[].port integer Manager port
streamingClusterSettings.clusterManagers[].isSSL boolean Use SSL for manager connection
streamingClusterSettings.clusterManagers[].priority integer Manager priority
streamingClusterSettings.clusterManagers[].secret string Authentication secret

Streaming Cluster Settings (EDGE)

Parameter Type Description
streamingClusterSettings.nodeHostname string This node's hostname
streamingClusterSettings.nodePort integer This node's port
streamingClusterSettings.nodeIsSSL boolean Use SSL for this node
streamingClusterSettings.copyOnPublish boolean Copy stream on publish
streamingClusterSettings.clusterManagers array List of cluster managers

Example Requests

Create MONO Application

{
  "data": {
    "attributes": {
      "name": "live",
      "type": "mono",
      "generalSettings": {
        "description": "Main live streaming application",
        "broadcastLimit": 50,
        "statInterval": 2,
        "autoThumbnail": {
          "enabled": true,
          "interval": 10,
          "thumbWidth": 100,
          "thumbHeight": 100
        }
      },
      "ingestSettings": {
        "allowStreamIngest": true,
        "autoStreamPublish": true,
        "allowStreamOverwrite": false,
        "authorizationEnabled": false
      },
      "playbackSettings": {
        "totalViewerLimit": null,
        "streamViewerLimit": 100,
        "frameBufferSize": 5,
        "harnessTypes": ["storm-hls", "storm-mse", "rtmp"]
      },
      "streamSecuritySettings": {
        "tokenProtectionEnabled": true,
        "hashAlgorithm": "sha256",
        "tokenLifespan": 3600,
        "secret": "my-secret-key",
        "domainAccessRights": [
          { "type": "allow", "domain": "*" }
        ]
      },
      "liveTranscodingSettings": {
        "enabled": true,
        "enabledPresets": ["360p", "720p"]
      },
      "dvrSettings": {
        "enabled": false,
        "cacheSize": 100
      },
      "recordingSettings": {
        "enabled": false
      },
      "streamKeyAliasSettings": {
        "enabled": true,
        "autoDiscovery": {
          "enabled": true,
          "requestURL": "https://api.example.com/alias/${streamKey}",
          "xApiKey": "bd34ddawe34v51rxw6tbn",
          "expireTime": 3600
        }
      }
    }
  }
}

Create ORIGIN Application

{
  "data": {
    "attributes": {
      "name": "origin",
      "type": "origin",
      "generalSettings": {
        "description": "Origin server",
        "broadcastLimit": 50,
        "statInterval": 2,
        "autoThumbnail": {
          "enabled": true,
          "interval": 10,
          "thumbWidth": 100,
          "thumbHeight": 100
        }
      },
      "streamingClusterSettings": {
        "nodeHostname": "origin.example.com",
        "nodePort": 1935,
        "nodeIsSSL": false,
        "nodePriority": 1,
        "clusterManagers": [
          {
            "hostname": "supervisor.example.com",
            "port": 8080,
            "isSSL": false,
            "priority": 1,
            "secret": "cluster-secret"
          }
        ]
      },
      "ingestSettings": {
        "allowStreamIngest": true,
        "autoStreamPublish": true,
        "allowStreamOverwrite": false,
        "authorizationEnabled": false
      },
      "liveTranscodingSettings": {
        "enabled": true,
        "enabledPresets": ["360p", "720p"]
      },
      "recordingSettings": {
        "enabled": false
      }
    }
  }
}

Create TRANSCODE Application

{
  "data": {
    "attributes": {
      "name": "transcode",
      "type": "transcode",
      "generalSettings": {
        "description": "Transcoding node",
        "broadcastLimit": 50,
        "statInterval": 2,
        "autoThumbnail": {
          "enabled": true,
          "interval": 10,
          "thumbWidth": 100,
          "thumbHeight": 100
        }
      },
      "streamingClusterSettings": {
        "peerHost": "peer.example.com",
        "peerPort": 1935,
        "peerIsSSL": false,
        "clusterManagers": [
          {
            "hostname": "supervisor.example.com",
            "port": 8080,
            "isSSL": false,
            "priority": 1,
            "secret": "cluster-secret"
          }
        ]
      },
      "liveTranscodingSettings": {
        "enabled": true,
        "enabledPresets": ["360p", "480p", "720p"]
      }
    }
  }
}

Create EDGE Application

{
  "data": {
    "attributes": {
      "name": "edge",
      "type": "edge",
      "generalSettings": {
        "description": "Edge server",
        "broadcastLimit": 50,
        "statInterval": 2,
        "autoThumbnail": {
          "enabled": true,
          "interval": 10,
          "thumbWidth": 100,
          "thumbHeight": 100
        }
      },
      "streamingClusterSettings": {
        "nodeHostname": "edge.example.com",
        "nodePort": 1935,
        "nodeIsSSL": false,
        "copyOnPublish": false,
        "clusterManagers": [
          {
            "hostname": "supervisor.example.com",
            "port": 8080,
            "isSSL": false,
            "priority": 1,
            "secret": "cluster-secret"
          }
        ]
      },
      "playbackSettings": {
        "totalViewerLimit": null,
        "streamViewerLimit": 100,
        "frameBufferSize": 5,
        "harnessTypes": ["storm-hls", "storm-mse", "rtmp"]
      },
      "streamSecuritySettings": {
        "tokenProtectionEnabled": true,
        "hashAlgorithm": "sha256",
        "tokenLifespan": 3600,
        "secret": "my-secret-key",
        "domainAccessRights": [
          { "type": "allow", "domain": "*" }
        ]
      },
      "dvrSettings": {
        "enabled": false,
        "cacheSize": 100
      },
      "recordingSettings": {
        "enabled": false
      },
      "streamKeyAliasSettings": {
        "enabled": true,
        "autoDiscovery": {
          "enabled": true,
          "requestURL": "https://api.example.com/alias/${streamKey}",
          "xApiKey": "bd34ddawe34v51rxw6tbn",
          "expireTime": 3600
        }
      }
    }
  }
}