Storm docs logo
Search the docs.../
Explore Storm Products

Application Create

Creates a new streaming application.

Request

PropertyValue
MethodPOST
URL/api/applications
Content-Typeapplication/json
AuthenticationBearer Token
Request
Code iconbash
curl -X POST "{BASE_URL}/api/applications" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}'

Request Body

ParameterTypeRequiredDescription
data.attributes.namestringYesApplication name (unique)
data.attributes.type"mono" | "origin" | "transcode" | "edge"YesApplication type

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

Response Body

Successful Response (201)

ParameterTypeDescription
data.namestringApplication name
data.type"mono" | "origin" | "transcode" | "edge"Application type
messagestringResponse status message

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

Metadata

ParameterTypeDescription
meta.executionTimeintegerRequest processing time in milliseconds
meta.generatedAtintegerResponse generation timestamp (Unix timestamp in ms)

Username Already Exists (409)

Successful Response (200)
Code iconjson
{
  "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"
}
Successful Response (200)
Code iconjson
{
  "message": "Application name already exists: {appName}"
}

Error Response (4xx/5xx)

ParameterTypeDescription
messagestringHuman-readable error message
Code iconjson
{
  "message": "Error message"
}

Application Types

MONO (Standalone)

SettingRequiredDescription
generalSettingsYesGeneral application settings
ingestSettingsYesStream ingest configuration
playbackSettingsYesPlayback and viewer settings
streamSecuritySettingsYesToken protection and domain access
liveTranscodingSettingsYesLive transcoding presets
dvrSettingsYesDVR/time-shift settings
recordingSettingsYesRecording configuration
streamKeyAliasSettingsYesStream key alias discovery

ORIGIN (Cluster Origin)

SettingRequiredDescription
generalSettingsYesGeneral application settings
streamingClusterSettingsYesCluster connection configuration
ingestSettingsYesStream ingest configuration
liveTranscodingSettingsYesLive transcoding presets
recordingSettingsYesRecording configuration

TRANSCODE (Cluster Transcoder)

SettingRequiredDescription
generalSettingsYesGeneral application settings
streamingClusterSettingsYesCluster connection configuration
liveTranscodingSettingsYesLive transcoding presets

EDGE (Cluster Edge)

SettingRequiredDescription
generalSettingsYesGeneral application settings
streamingClusterSettingsYesCluster connection configuration
playbackSettingsYesPlayback and viewer settings
streamSecuritySettingsYesToken protection and domain access
streamKeyAliasSettingsYesStream key alias discovery
dvrSettingsYesDVR/time-shift settings
recordingSettingsYesRecording configuration
Code iconjson
{
  "data": {
    "attributes": {
      "name": "mono",
      "type": "mono",
      "generalSettings": { },
      "ingestSettings": { },
      "playbackSettings": { },
      "streamSecuritySettings": { },
      "liveTranscodingSettings": { },
      "dvrSettings": { },
      "recordingSettings": { },
      "streamKeyAliasSettings": { }
    }
  }
}
Code iconjson
{
  "data": {
    "attributes": {
      "name": "origin",
      "type": "origin",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "ingestSettings": { },
      "liveTranscodingSettings": { },
      "recordingSettings": { }
    }
  }
}
Code iconjson
{
  "data": {
    "attributes": {
      "name": "transcode",
      "type": "transcode",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "liveTranscodingSettings": { }
    }
  }
}
Code iconjson
{
  "data": {
    "attributes": {
      "name": "edge",
      "type": "edge",
      "generalSettings": { },
      "streamingClusterSettings": { },
      "playbackSettings": { },
      "streamSecuritySettings": { },
      "streamKeyAliasSettings": { },
      "dvrSettings": { },
      "recordingSettings": { }
    }
  }
}

Settings Reference

General Settings

ParameterTypeDescription
generalSettings.descriptionstringApplication description
generalSettings.broadcastLimitintegerMaximum number of streams
generalSettings.statIntervalintegerStatistics update interval (sec)
generalSettings.autoThumbnail.enabledbooleanEnable automatic thumbnails
generalSettings.autoThumbnail.intervalintegerThumbnail generation interval (sec)
generalSettings.autoThumbnail.thumbWidthintegerThumbnail width in pixels
generalSettings.autoThumbnail.thumbHeightintegerThumbnail height in pixels

Ingest Settings

ParameterTypeDescription
ingestSettings.allowStreamIngestbooleanDetermines whether stream publishing (ingest) is allowed
ingestSettings.autoStreamPublishbooleanSpecifies whether newly ingested streams are automatically published (visible to viewers) or remain unpublished until explicitly set to PUBLISHED
ingestSettings.allowStreamOverwritebooleanSpecifies whether an existing stream can be replaced by another stream with the same name or ID
ingestSettings.authorizationEnabledbooleanEnable 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.

ParameterTypeDescription
ingestSettings.requestURLstringAuthorization API URL (use ${streamKey} placeholder)
ingestSettings.apiKeystringAPI key for authorization requests
  • Authorization Type: "file" (XML File)

    Validates stream ingest against an XML file with authorized keys.

ParameterTypeDescription
ingestSettings.fileURLstringPath to authorization XML file
  • Authorization Type: "local" (Local Users/Tokens)

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

ParameterTypeDescription
ingestSettings.authUsersarrayList of authorized users
ingestSettings.authUsers[].usernamestringUsername
ingestSettings.authUsers[].passwordstringPassword

Playback Settings

ParameterTypeDescription
playbackSettings.totalViewerLimitinteger | nullTotal viewer limit (null = unlimited)
playbackSettings.streamViewerLimitintegerViewer limit per stream
playbackSettings.frameBufferSizeintegerFrame buffer size
playbackSettings.harnessTypesstring[]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

ParameterTypeDescription
streamSecuritySettings.tokenProtectionEnabledbooleanEnable token protection
streamSecuritySettings.hashAlgorithmstringHash algorithm for tokens
streamSecuritySettings.tokenLifespanintegerToken lifespan in seconds
streamSecuritySettings.secretstringSecret key for token signing
streamSecuritySettings.domainAccessRightsarrayDomain access rules
streamSecuritySettings.domainAccessRights[].type"allow" | "deny"Rule type
streamSecuritySettings.domainAccessRights[].domainstringDomain pattern ("*" for all)

Live Transcoding Settings

ParameterTypeDescription
liveTranscodingSettings.enabledbooleanEnable live transcoding
liveTranscodingSettings.enabledPresetsstring[]List of enabled preset names

DVR Settings

ParameterTypeDescription
dvrSettings.enabledbooleanEnable DVR
dvrSettings.cacheSizeintegerDVR cache size in seconds

Recording Settings

ParameterTypeDescription
recordingSettings.enabledbooleanEnable recording
recordingSettings.fileFormat"fMP4" | "FLV"Recording file format (required if enabled)
recordingSettings.savePathstringDirectory path for recordings (required if enabled)
recordingSettings.maxFileSizeintegerMaximum file size in MB
recordingSettings.maxFileDurationintegerMaximum file duration in seconds
recordingSettings.cacheSizeintegerCache size in seconds
recordingSettings.maxStorageSizeintegerMaximum total storage size in MB
recordingSettings.removeOldFilesbooleanAutomatically remove old files when storage is full

Stream Key Alias Settings

ParameterTypeDescription
streamKeyAliasSettings.enabledbooleanEnable stream key aliases
streamKeyAliasSettings.autoDiscovery.enabledbooleanEnable auto-discovery
streamKeyAliasSettings.autoDiscovery.requestURLstringDiscovery API URL (use ${streamKey} placeholder)
streamKeyAliasSettings.autoDiscovery.xApiKeystringAPI key for discovery requests
streamKeyAliasSettings.autoDiscovery.expireTimeintegerAlias cache expiration in seconds

Streaming Cluster Settings (ORIGIN/TRANSCODE)

ParameterTypeDescription
streamingClusterSettings.nodeHostnamestringThis node's hostname
streamingClusterSettings.nodePortintegerThis node's port
streamingClusterSettings.nodeIsSSLbooleanUse SSL for this node
streamingClusterSettings.nodePriorityintegerNode priority in cluster
streamingClusterSettings.clusterManagersarrayList of cluster managers
streamingClusterSettings.clusterManagers[].hostnamestringManager hostname
streamingClusterSettings.clusterManagers[].portintegerManager port
streamingClusterSettings.clusterManagers[].isSSLbooleanUse SSL for manager connection
streamingClusterSettings.clusterManagers[].priorityintegerManager priority
streamingClusterSettings.clusterManagers[].secretstringAuthentication secret

Streaming Cluster Settings (EDGE)

ParameterTypeDescription
streamingClusterSettings.nodeHostnamestringThis node's hostname
streamingClusterSettings.nodePortintegerThis node's port
streamingClusterSettings.nodeIsSSLbooleanUse SSL for this node
streamingClusterSettings.copyOnPublishbooleanCopy stream on publish
streamingClusterSettings.clusterManagersarrayList of cluster managers

Example Requests

Create MONO Application

Create ORIGIN Application

Create TRANSCODE Application

Create EDGE Application

Code iconjson
{
  "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
        }
      }
    }
  }
}
Code iconjson
{
  "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
      }
    }
  }
}
Code iconjson
{
  "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"]
      }
    }
  }
}
Code iconjson
{
  "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
        }
      }
    }
  }
}
Support Needed?

Create a free ticket and our support team will provide you necessary assistance.

Blog
Support
About us
Patents
Term of use
Privacy policy
Contact
©2026 Storm Streaming Media. All Rights Reserved.