# Create a live app

The first step to using [Wowza Streaming Engine™](/content/products/streaming-engine/index.html) media server software is to create a live streaming application. This article demonstrates how to create and manage a streaming app using the Wowza Streaming Engine (WSE) REST API.

## Prerequisites

WSE 4.3.0 or later

## Create an app

To create a new live app, send a POST request to the [create app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/postapplicationconfig) endpoint. [Authenticate the request](/content/docs/how-to-change-the-authentication-method-for-the-wowza-streaming-engine-rest-api/index.html) with your username and password. Include the app name as a path parameter and set the `appType` to `Live` in the body of the request. In the example below, we create a new live app called `myLiveApp`.

### Example cURL request

```
curl -X POST \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/myLiveApp \
  -u {username}:{password} \
  -d '\n    {\n      "restURI": "http://localhost:8087/v2/servers/{serverName}/vhosts/{vhostName}/applications/myLiveApp",
      "name": "testlive",
      "appType": "Live",
      "clientStreamReadAccess": "*",
      "clientStreamWriteAccess": "*",
      "description": "A basic live application",
      "streamConfig": {
        "restURI": "http://localhost:8087/v2/servers/{serverName}/vhosts/{vhostName}/applications/testlive/streamconfiguration",
        "streamType": "live"
      }
    }'
```

### Example 201 response

```
{
  "success": true,
  "message": "Application (myLiveApp) created successfully."
}
```

### Add password authentication

To create a live password-authenticated app, send a POST request to the [create app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/postapplicationconfig) endpoint. Include the app name as a path parameter and the `securityConfig` object and the `ModuleCoreSecurity` module in the body of the request. The example below creates a new live app called `secureLiveApp`.

### Example cURL request

```
curl -X POST \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/secureLiveApp \
  -u {username}:{password} \
  -d '{\n    "appType": "Live",\n    "securityConfig": {\n      "clientStreamWriteAccess" : "*",\n      "publishRequirePassword": true,\n      "publishAuthenticationMethod": "digest"\n    },\n    "modules": {\n      "moduleList": [\n        {\n          "order": 0,\n          "name": "ModuleCoreSecurity",\n          "description": "Core Security Module for Applications",\n          "class": "com.wowza.wms.security.ModuleCoreSecurity"\n        }\n      ]\n    }\n  }'
```

### Example 201 response

```
{
  "success": true,
  "message": "Application (secureLiveApp) created successfully."
}
```

### Enable live stream packetizer

To create a live-stream app, send a POST request to the [create app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/postapplicationconfig) endpoint. Include the app name as a path parameter and the `streamConfig` object in the body of the request. The example below creates a new app called `liveStreamApp` using the `cupertinostreamingpacketizer` live-stream packetizer.

### Example request

```
curl -X POST \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp \
  -u {username}:{password} \
    -d'\n    {\n      "name": "testlive",\n      "appType": "Live",\n      "description": "A live application with password authentication and packetizers",\n      "streamConfig": {\n      "streamType": "live",\n      "liveStreamPacketizer": [\n          "cupertinostreamingpacketizer"\n        ]\n      },\n      "securityConfig": {\n        "secureTokenVersion": 0,\n        "clientStreamWriteAccess": "*",\n        "publishRequirePassword": true,\n        "publishPasswordFile": "",\n        "publishRTMPSecureURL": "",\n        "publishIPBlackList": "",\n        "publishIPWhiteList": "",\n        "publishBlockDuplicateStreamNames": false,\n        "publishValidEncoders": "",\n        "publishAuthenticationMethod": "digest",\n        "playMaximumConnections": 0,\n        "playRequireSecureConnection": false,\n        "secureTokenSharedSecret": "",\n        "secureTokenUseTEAForRTMP": false,\n        "secureTokenIncludeClientIPInHash": false,\n        "secureTokenHashAlgorithm": "",\n        "secureTokenQueryParametersPrefix": "",\n        "secureTokenOriginSharedSecret": "",\n        "playIPBlackList": "",\n        "playIPWhiteList": "",\n        "playAuthenticationMethod": "none"\n      },\n    "modules": {\n      "moduleList": [\n        {\n          "order": 0,\n          "name": "base",\n          "description": "Base",\n          "class": "com.wowza.wms.module.ModuleCore"\n        }, {\n          "order": 1,\n          "name": "logging",\n          "description": "Client Logging",\n          "class": "com.wowza.wms.module.ModuleClientLogging"\n        }, {\n          "order": 2,\n          "name": "flvplayback",\n          "description": "FLVPlayback",\n          "class": "com.wowza.wms.module.ModuleFLVPlayback"\n        }, {\n          "order": 3,\n          "name": "ModuleCoreSecurity",\n          "description": "Core Security Module for Applications",\n          "class": "com.wowza.wms.security.ModuleCoreSecurity"\n        }\n      ]\n    }\n  }'
```

### Example 201 response

```
{
  "success": true,
  "message": "Application (liveStreamApp) created successfully."
}
```

## Retrieve app list

To retrieve a list of all existing applications send a GET request to the [get app list](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/getapplicationsconfig) endpoint.

### Example request

```
curl -X GET \
  -H 'Accept:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications \
  -u {username}:{password}
```

### Example 200 response

```
{
  "serverName": "_defaultServer_",
  "applications": [\
    {\
      "id": "liveStreamApp",\
      "href": "/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp",\
      "appType": "live",\
      "dvrEnabled": false,\
      "drmEnabled": false,\
      "transcoderEnabled": false,\
      "streamTargetsEnabled": false\
    },\
    {\
      "id": "secureLiveApp",\
      "href": "/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/secureLiveApp",\
      "appType": "live",\
      "dvrEnabled": false,\
      "drmEnabled": false,\
      "transcoderEnabled": false,\
      "streamTargetsEnabled": false\
    }\
  ]
}
```

## Update an app

To update an existing application, send a PUT request to the [update app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/putapplicationconfig) endpoint. Include the name of the app to be updated as a path parameter and any updated settings in the body of the request. The example below updates the `liveStreamApp` application to include the MPEG-DASH packetizer.

### Example request

```
curl -X PUT \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp \
  -d'\n  {\n    "name":" liveStreamApp",\n    "appType": "Live",\n    "streamConfig": {\n      "streamType": "live",\n      "liveStreamPacketizer": [\n        "cupertinostreamingpacketizer",\n        "mpegdashstreamingpacketizer"\n      ]\n    }\n  }'
```

### Example 200 response

```
{
  "success": true,
  "message": "Saved"
}
```

### Add custom properties to an application

To add a custom module to an application, send a PUT request to the [advanced update app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/putapplicationconfigadv) endpoint. The example below updates the `liveStreamApp` application to include a custom module called `MyCustomModule` and a custom property called `myCustomProperty`.

### Example request

```
curl -X PUT \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  -u {username}:{password} \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp/adv \
  -d '{\n  "version": "1430682096000",\n  "modules": [\
    {\
      "class" : "com.wowza.wms.module.ModuleCore",\
      "description" : "Base",\
      "name" : "base",\
      "order" : 0\
    },\
    {\
      "class" : "com.wowza.wms.module.ModuleClientLogging",\
      "description" : "Client Logging",\
      "name" : "logging",\
      "order" : 1\
    },\
    {\
      "class" : "com.wowza.wms.module.ModuleFLVPlayback",\
      "description" : "FLVPlayback",\
      "name" : "flvplayback",\
      "order" : 2\
    },\
    {\
      "class" : "com.wowza.wms.security.ModuleCoreSecurity",\
      "description" : "Core Security Module for Applications",\
      "name" : "ModuleCoreSecurity",\
      "order" : 3\
    },\
    {\
      "class": "com.my.custom.path.MyCustomModule",\
      "description": "Module Custom Module",\
      "name": "MyCustomModule",\
      "order": 4\
    }\
  ],\
  "advancedSettings": [\
    {\
        "enabled": false,\
        "canRemove": true,\
        "name": "debugAACTimecodes",\
        "value": "false",\
        "defaultValue": "false",\
        "type": "Boolean",\
        "sectionName": "cupertinostreamingpacketizer",\
        "section": "/Root/Application/LiveStreamPacketizer",\
        "documented": true\
    },\
    {\
      "enabled": false,\
      "canRemove": true,\
      "name": "debugMP3Timecodes",\
      "value": "false",\
      "defaultValue": "false",\
      "type": "Boolean",\
      "sectionName": "cupertinostreamingpacketizer",\
      "section": "/Root/Application/LiveStreamPacketizer",\
      "documented": true\
    },\
    {\
      "enabled": false,\
      "canRemove": true,\
      "name": "cupertinoChunkDurationTarget",\
      "value": "0",\
      "defaultValue": "10000",\
      "type": "Integer",\
      "sectionName": "cupertinostreamingpacketizer",\
      "section": "/Root/Application/LiveStreamPacketizer",\
      "documented": true\
    },\
    {\
      "enabled": true,\
      "canRemove": false,\
      "name": "myCustomProperty",\
      "value": "myValue",\
      "defaultValue": null,\
      "type": "String",\
      "sectionName": "Application",\
      "section": "/Root/Application",\
      "documented": false\
    }\
  ]\
}'
```

### A successful request will update your app's `Application.xml` file to include the custom modules and properties shown below.

### Application.xml snippet

```
<Modules>
    <Module>
        <Name>MyCustomModule</Name>
        <Description>Module Custom Module</Description>
        <Class>com.my.custom.path.MyCustomModule</Class>
    </Module>
</Modules>
<!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
<Properties>
    <Property>
        <Name>myCustomPropertyName</Name>
        <Value>myValue</Value>
        <Type>String</Type>
    </Property>
</Properties>
```

## Delete an app

To delete an existing application, send a DELETE request to the [delete app](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/deleteapplicationconfig) endpoint. Include the name of the app to be deleted as a path parameter and any updated settings in the body of the request. The example below deletes the `liveStreamApp` application.

### Example request

```
curl -X DELETE \
  -H 'Accept:application/json; charset=utf-8' \
  -H 'Content-Type:application/json; charset=utf-8' \
  -u {username}:{password} \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp
```

### Example 200 response

```
{
  "success": true,
  "message": "Application (liveStreamApp) deleted successfully"
}
```

## Start, shutdown, restart or copy an app

With the [application action](https://developer.wowza.com/docs/wowza-engine/rest-api/openapi/applications/putapplicationaction) endpoint you can start, shutdown, restart or copy an existing application.

### Example request

```
curl -X PUT \
  -H 'Accept:application/json; charset=utf-8' \
  http://localhost:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/liveStreamApp/actions/restart \
  -u {username}:{password}
```
