Creates a new streaming application.
| Property | Value |
|---|---|
| Method | POST |
| URL | /api/applications |
| Content-Type | application/json |
| Authentication | Bearer Token |
| 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.
| 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 |
{
"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"
}
| 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.
| Parameter | Type | Description |
|---|---|---|
meta.executionTime |
integer | Request processing time in milliseconds |
meta.generatedAt |
integer | Response generation timestamp (Unix timestamp in ms) |
{
"message": "Application name already exists: {appName}"
}
{
"message": "Error message"
}
| Parameter | Type | Description |
|---|---|---|
message |
string | Human-readable error message |
{
"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 |
{
"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 |
{
"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 |
{
"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 |
| 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 |
| 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) |
"none" (Default)No authorization required for stream ingest.
"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).
"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 |
"file" (XML File)Validates stream ingest against an XML file with authorized keys.
| Parameter | Type | Description |
|---|---|---|
ingestSettings.fileURL |
string | Path to authorization XML file |
"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 |
| 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 |
harnessTypes"storm-hls" — Storm HLS player"storm-mse" — Storm MSE player"generic-hls" — Generic HLS"rtmp" — RTMP playback| 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) |
| Parameter | Type | Description |
|---|---|---|
liveTranscodingSettings.enabled |
boolean | Enable live transcoding |
liveTranscodingSettings.enabledPresets |
string[] | List of enabled preset names |
| Parameter | Type | Description |
|---|---|---|
dvrSettings.enabled |
boolean | Enable DVR |
dvrSettings.cacheSize |
integer | DVR cache size in seconds |
| 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 |
| 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 |
| 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 |
| 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 |
{
"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
}
}
}
}
}
{
"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
}
}
}
}
{
"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"]
}
}
}
}
{
"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
}
}
}
}
}