Application Create
Creates a new streaming application.
Request
| Property | Value |
|---|---|
| Method | POST |
| URL | /api/applications |
| Content-Type | application/json |
| Authentication | Bearer Token |
curl -X POST "{BASE_URL}/api/applications" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
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 Body
Successful Response (201)
| 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)
{
"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"
}
{
"message": "Application name already exists: {appName}"
}
Error Response (4xx/5xx)
| Parameter | Type | Description |
|---|---|---|
message | string | Human-readable error message |
{
"message": "Error message"
}
Application Types
MONO (Standalone)
| 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)
| 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)
| Setting | Required | Description |
|---|---|---|
generalSettings | Yes | General application settings |
streamingClusterSettings | Yes | Cluster connection configuration |
liveTranscodingSettings | Yes | Live transcoding presets |
EDGE (Cluster Edge)
| 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 |
{
"data": {
"attributes": {
"name": "mono",
"type": "mono",
"generalSettings": { },
"ingestSettings": { },
"playbackSettings": { },
"streamSecuritySettings": { },
"liveTranscodingSettings": { },
"dvrSettings": { },
"recordingSettings": { },
"streamKeyAliasSettings": { }
}
}
}
{
"data": {
"attributes": {
"name": "origin",
"type": "origin",
"generalSettings": { },
"streamingClusterSettings": { },
"ingestSettings": { },
"liveTranscodingSettings": { },
"recordingSettings": { }
}
}
}
{
"data": {
"attributes": {
"name": "transcode",
"type": "transcode",
"generalSettings": { },
"streamingClusterSettings": { },
"liveTranscodingSettings": { }
}
}
}
{
"data": {
"attributes": {
"name": "edge",
"type": "edge",
"generalSettings": { },
"streamingClusterSettings": { },
"playbackSettings": { },
"streamSecuritySettings": { },
"streamKeyAliasSettings": { },
"dvrSettings": { },
"recordingSettings": { }
}
}
}
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
Create ORIGIN Application
Create TRANSCODE Application
Create EDGE 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
}
}
}
}
}
{
"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
}
}
}
}
}
Create a free ticket and our support team will provide you necessary assistance.