Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
version: v2.0
title: Wowza Video REST API Reference Documentation Real Time API
license:
name: Terms of Use
url: https://www.wowza.com/legal/terms-of-use
description: "API lifecycle phase: [Current](https://www.wowza.com/docs/wowza-video-rest-api-lifecycle-management#api-lifecycle0)\n\n\n<table>\n<tr style=\"background-color:lightgrey;\"><td>\n<strong>Want to take the API for a test run?</strong>\n\nAll you'll need is a [Wowza Video subscription](https://www.wowza.com/pricing), or [free trial](https://www.wowza.com/free-trial), for the API access token. Then, fork [our collection in Postman](https://www.postman.com/wowzavideo/workspace/wowza-video-rest-api) and you'll be\nmaking calls to our REST API in minutes!\n\nSee [Trial the Wowza Video REST API using Postman](https://www.wowza.com/docs/trial-the-wowza-video-rest-api-using-postman) for more information.\n</td>\n</tr>\n</table>\n\n\nThis reference documentation provides details about the operations, parameters, and request and response schemas for every resource and endpoint in the Wowza Video REST API.\nSamples appear in the right column. Sample requests are presented in cURL (Shell) and JavaScript; some samples also include just the JSON object. Response samples are all JSON. \nExamples in cURL use environment variables so you can easily copy and paste them. To learn more, see [Using cURL](https://wowza.com/docs/how-to-use-the-wowza-video-rest-api#curl).\n\n\nReference documentation is available for every version of the API. Use the **Version** menu at the top of the page to access the reference doc for a different version of the API.\n\n<blockquote><strong>Note</strong>: If you haven't moved over to the new Wowza Video UI experience, you won't be able to access v2.0 of the API. We're migrating customers iteratively. See <a href=\"https://developer.wowza.com/docs/wowza-video/upgrade-to-wowza-video/\">Upgrade to the Wowza Video 2.0 REST API</a> for more information.</blockquote>\n"
servers:
- url: https://api.video.wowza.com/api/v2.0
tags:
- name: real_time
description: 'Operations related to Real-Time Streaming at Scale. If your audience is fewer than 300 viewers or you want to deliver a stream in near real time alongside other delivery protocols, <a href="https://www.wowza.com/docs/deliver-webrtc-streams-to-viewers-using-the-wowza-video-rest-api">use our WebRTC solution</a>.
<blockquote>To enable and purchase capacity for Real-Time Streaming at Scale for your account and access the <tt>/real_time</tt> operations, contact 720.279.8163 or <a href="https://www.wowza.com/professional-services#get-a-quote">schedule a call</a>.</blockquote>'
x-displayName: Real-Time Streams
paths:
/real_time:
post:
summary: Create a real-time stream
description: This operation creates a real-time stream.
operationId: createRealTimeStream
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"POST\" \\\n \"${WV_HOST}/api/v2.0/real_time\" \\\n -d $'{\n \"real_time_stream\": {\n \"name\": \"My Real-Time Stream\"\n }\n}'\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n method: 'POST',\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nconst req = https.request(options, function(res) {\n var body = '';\n res.on('data', function(data) {\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\nreq.write(JSON.stringify({\n \"real_time_stream\": {\n \"name\": \"My Real-Time Stream\"\n }\n}));\nreq.end();\n"
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/real_time_stream_create'
description: Provide the details of the real-time stream to create in the body of the request.
required: true
responses:
'201':
description: Success
content:
application/json:
schema:
type: object
required:
- real_time_stream
properties:
real_time_stream:
$ref: '#/components/schemas/real_time_stream'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error422'
get:
summary: Fetch all real-time streams
description: This operation shows limited details for all of your real-time streams. For detailed information, fetch a single real-time stream.
operationId: listRealTimeStreams
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"GET\" \\\n \"${WV_HOST}/api/v2.0/real_time\"\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nhttps.get(options, function(res) {\n var body = '';\n res.on('data', function(data){\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\n"
parameters:
- $ref: '#/components/parameters/filter'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/per_page'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/real_time_streams'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
/real_time/{id}:
get:
summary: Fetch a real-time stream
description: This operation shows the details of a specific real-time stream.
operationId: showRealTimeStream
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"GET\" \\\n \"${WV_HOST}/api/v2.0/real_time/2adffc17\"\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time/2adffc17';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nhttps.get(options, function(res) {\n var body = '';\n res.on('data', function(data){\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\n"
parameters:
- name: id
in: path
required: true
description: The unique alphanumeric string that identifies the real-time stream.
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- real_time_stream
properties:
real_time_stream:
$ref: '#/components/schemas/real_time_stream'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'410':
description: Gone
content:
application/json:
schema:
$ref: '#/components/schemas/Error410'
patch:
summary: Update a real-time stream
description: This operation updates a real-time stream.
operationId: updateRealTimeStream
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"PATCH\" \\\n \"${WV_HOST}/api/v2.0/real_time/2adffc17\" \\\n -d $'{\n \"real_time_stream\": {\n \"name\": \"MyRealTimeStream\"\n }\n}'\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time/2adffc17';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname',\n path: path,\n method: 'PATCH',\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nconst req = https.request(options, function(res) {\n var body = '';\n res.on('data', function(data) {\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\nreq.write(JSON.stringify({\n \"real_time_stream\": {\n \"name\": \"MyRealTimeStream\"\n }\n}));\nreq.end();\n"
parameters:
- name: id
in: path
required: true
description: The unique alphanumeric string that identifies the real-time stream.
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/real_time_stream_update'
description: Provide the details of the real-time stream to update in the body of the request.
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- real_time_stream
properties:
real_time_stream:
$ref: '#/components/schemas/real_time_stream'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'410':
description: Gone
content:
application/json:
schema:
$ref: '#/components/schemas/Error410'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error422'
delete:
summary: Delete a real-time stream
description: This operation deletes a real-time stream.
operationId: deleteRealTimeStream
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"DELETE\" \\\n \"${WV_HOST}/api/v2.0/real_time/2adffc17\"\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time/2adffc17';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n method: 'DELETE',\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nhttps.get(options, function(res) {\n // no data being returned, just: 204 NO CONTENT\n console.log(res.statusCode);\n}).on('error', function(e) {\n console.log(e.message);\n});\n"
parameters:
- name: id
in: path
required: true
description: The unique alphanumeric string that identifies the real-time stream.
schema:
type: string
responses:
'204':
description: No Content
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'410':
description: Gone
content:
application/json:
schema:
$ref: '#/components/schemas/Error410'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error422'
/real_time/{id}/state:
get:
summary: Fetch the state of a real-time stream
description: This operation shows the current state of a real-time stream.
operationId: showRealTimeStreamState
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"GET\" \\\n \"${WV_HOST}/api/v2.0/real_time/2adffc17/state\""
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time/2adffc17/state';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nhttps.get(options, function(res) {\n var body = '';\n res.on('data', function(data){\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\n"
parameters:
- name: id
in: path
required: true
description: The unique alphanumeric string that identifies the real-time stream.
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- real_time
properties:
real_time:
type: object
title: real_time
properties:
state:
type: string
description: The state of the real-time stream.
example: stopped
enum:
- started
- stopped
- disabled
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'410':
description: Gone
content:
application/json:
schema:
$ref: '#/components/schemas/Error410'
/real_time/{id}/stop:
put:
summary: Stop a real-time stream
description: This operation stops a real-time stream.
operationId: stopRealTimeStream
tags:
- real_time
x-codeSamples:
- lang: Shell
source: "// Using cURL\ncurl -H \"Authorization: Bearer ${WV_JWT}\" \\\n \n -H \"Content-Type: application/json\" \\\n -X \"PUT\" \\\n \"${WV_HOST}/api/v2.0/real_time/2adffc17/stop\"\n"
- lang: JavaScript
source: "// Using Node.js\nconst https = require('https');\nconst crypto = require('crypto');\nvar hostname = 'api.video.wowza.com'\nvar path = '/api/v2.0/real_time/2adffc17/stop';\n//For security, never reveal API token in client-side code\nvar wvJWT = 'Bearer [your JWT]';\n\nconst options = {\n hostname: hostname,\n path: path,\n method: 'PUT',\n headers: {\n 'Authorization': wvJWT,\n 'Content-Type': 'application/json'\n }\n};\nconst req = https.request(options, function(res) {\n var body = '';\n res.on('data', function(data) {\n body += data;\n });\n res.on('end', function() {\n console.log(JSON.parse(body));\n });\n}).on('error', function(e) {\n console.log(e.message);\n});\nreq.end();"
parameters:
- name: id
in: path
required: true
description: The unique alphanumeric string that identifies the real-time stream.
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- real_time_stream
properties:
real_time_stream:
type: object
title: real_time_stream
properties:
state:
type: string
description: The state of the real-time stream.
example: stopped
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'410':
description: Gone
content:
application/json:
schema:
$ref: '#/components/schemas/Error410'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error422'
'423':
description: Locked
content:
application/json:
schema:
$ref: '#/components/schemas/Error423'
components:
schemas:
Error423:
type: object
description: ''
required:
- meta
properties:
meta:
type: object
title: meta
description: ''
properties:
status:
type: integer
description: ''
example: ''
format: int32
code:
type: string
description: ''
example: ''
title:
type: string
description: ''
example: ''
message:
type: string
description: ''
example: ''
description:
type: string
description: ''
example: ''
links:
type: array
description: ''
example: ''
items: {}
example:
Example Response 1:
meta:
status: 423
code: ERR-423-StreamAlreadyStopped
title: Stream Already Stopped Error
message: The request couldn't be processed. The stream has already been stopped.
description: ''
links: []
real_time_stream_update:
type: object
description: ''
properties:
real_time_stream:
type: object
title: real_time_stream
description: ''
required:
- name
properties:
name:
type: string
description: 'A descriptive name for the real-time stream. Maximum 255 characters.
<blockquote><strong>Note:</strong> If you record a real-time stream, the name is used to for the recording file name. To avoid file management issues in storage, Wowza Video removes or replaces special characters in file names, so the recording file name might vary from the name you provided here.</blockquote>'
example: ''
description:
type: string
description: An optional description of the real-time stream.
example: ''
enable_secure_viewer:
type: boolean
description: 'Require viewers to pass a security token for playback.
**Example:** <code>"enable_secure_viewer": false</code>'
expires_on:
type: string
description: 'The date and time the security token expires. Specify **YYYY-MM-DD HH:MM:SS**, where **HH** is a 24-hour clock in UTC. If you don''t specify **HH:MM:SS**, the token expires at 12AM UTC on the specified day.
Required when *enable_secure_viewer* is **true**.
**Example:** <code>"expires_on": "2021-10-27 23:08:55 UTC"</code>'
format: date-time
region:
type: string
description: 'An option to set the regional server the stream is distributed through. Select the region closest to your broadcast location for the most reliable stream. If you select the auto option, Wowza Video selects the region based on the publisher''s location.
**Default:** phoenix
**Example:** <code>"region": amsterdam</code>'
example: ''
enum:
- phoenix
- amsterdam
- singapore
- bangalore
- auto
reference_id:
type: string
description: 'A unique, alphanumeric ID returned in real-time stream webhook payloads. Setting a *reference_id* is useful if you have an ID in your system or application you want to associate with real-time stream events that trigger webhooks. Maximum 70 characters. Can only contain: a-z A-Z 0-9 !@#$%^&*()-_+=:;,.?~|
You can''t use brackets or quotation marks.
See <a href="https://www.wowza.com/docs/wowza-video-webhook-event-reference-documentation">Wowza Video Webhook Event Reference Documentation</a> to learn about webhooks.
Available from version 1.12.
**Example:** <code>"reference_id": "mySystemID_01"</code>'
player:
type: object
description: "The **player** object is deprecated in 2.0. Create and update player configurations in the user interface. \n\nAny values you send using the **player** object will be ignored.\n\nThe following fields have been moved outside of the **player** object and reside within the **real_time_stream** object where you can still access them through the API:\n * **logo_image**\n * **logo_position**\n * **video_poster_image**\n * **remove_video_poster_image**\n * **remove_logo_image**\n * **width**"
properties:
plugins:
type: object
description: Configuration of the plugins.
properties:
airplay:
type: boolean
description: 'If **true**, enables Airplay functionality in the player which allows you to cast to an Airplay device. The default is **false**.
**Example:** <code>"airplay": false</code>'
example: ''
chromecast:
type: boolean
description: 'If **true**, enables Chromecast functionality in the player which allows you to cast to a Chromecast device. The default is **false**.
**Example:** <code>"chromecast": false</code>'
example: ''
customizations:
type: object
description: Configuration of the player customizations.
properties:
play_icon:
type: string
description: "A play icon that is displayed on the video preview. The default, **solid**, uses the standard play (solid triangle) icon. **outlined** uses an alternate (outlined triangle) play icon. **ring** uses an alternate (small solid triangle enclosed in a circle) play icon.\n\n \nDefault: **solid**\n\n**Example:** <code>\"play_icon\": \"solid\"</code>"
example: solid
enum:
- solid
- outlined
- ring
thin_timeline:
type: boolean
description: 'If **true**, displays a thinner control bar than the default in the video. The default is **false**.
**Example:** <code>"thin_timeline": false</code>'
example: ''
drag_handle:
type: boolean
description: 'If **true**, displays a drag handle on the progress bar. The default is **false**.
**Example:** <code>"drag_handle": false</code>'
example: ''
volume:
type: boolean
description: 'If **true**, displays a volume button on the video. The default is **true**.
**Example:** <code>"volume": true</code>'
example: ''
mute:
type: boolean
description: 'If **true**, displays a mute button on the video. The default is **true**.
**Example:** <code>"mute": true</code>'
example: ''
fullscreen:
type: boolean
description: 'If **true**, displays a fullscreen button on the video. The default is **true**.
**Example:** <code>"fullscreen": true</code>'
example: ''
show_player_title:
type: boolean
description: 'If **true**, displays a preview title on the video. The default is **false**.
**Example:** <code>"show_player_title": false</code>'
example: ''
color:
type: string
description: 'The color of the timeline and volume bar of the player. You can set the color of your choice by passing a hex code for that specific color.
**Example:** <code>"color": "4d4d4d"</code>'
example: ''
video_poster_image:
type: string
description: 'The path to a GIF, JPEG, or PNG poster image that appears in the player before the stream begins. Poster image files must be 2.5 MB or smaller.
**Example:** <code>"video_poster_image": "[Base64-encoded string representation of GIF, JPEG, or PNG file]"</code>'
example: ''
logo_image:
type: string
description: 'A Base64-encoded string representation of a GIF, JPEG, or PNG logo file that appears partially transparent in a corner of the player throughout playback. Logo file must be 2.5 MB or smaller.
**Example:** <code>"logo_image": "[Base64-encoded string representation of GIF, JPEG, or PNG file]"</code> '
example: ''
logo_position:
type: string
description: 'The corner of the player in which you want the player logo to appear. The default is **top-left**.
**Example:** <code>"logo_position": "top-right"</code>'
example: ''
enum:
- top-left
- top-right
- bottom-left
- bottom-right
remove_logo_image:
type: boolean
description: 'If **true**, removes the logo file from the player. The default is **false**.
**Example:** <code>"remove_logo_image": true</code>'
example: true
remove_video_poster_image:
type: boolean
description: 'If **true**, removes the poster image. The default is **false**.
**Example:** <code>"remove_video_poster_image": true</code>'
example: true
width:
type: integer
description: 'The width, in pixels, of a fixed-size player. The default is **640**.
**Example:** <code>"width": 640</code>'
example: ''
format: int32
player_id:
type: string
description: "(Available from version 2.0) The unique alphanumeric string that identifies the player configuration to use for this stream. \n \n \nWhen you pass a player configuration ID, Wowza Video uses that player configuration to customize and style the player. If you don't pass a value, the default player configuration for the account is used.\n\nCreate and edit player configurations in the user interface. The ID is on the **General** tab for the player configuration.\n\n**Default**: Default player configuration\n\n**Example**: 2205b4e8-b160-43c2-868d-d88698a4e850"
video_poster_image:
type: string
description: 'The path to a GIF, JPEG, or PNG poster image that appears in the player before the stream begins. Poster image files must be 2.5 MB or smaller.
**Example:** <code>"video_poster_image": "[Base64-encoded string representation of GIF, JPEG, or PNG file]"</code>'
example: ''
logo_image:
type: string
description: "A Base64-encoded string representation of a GIF, JPEG, or PNG logo file that appears partially transparent in a corner of the player throughout playback. Logo file must be 2.5 MB or smaller.\n \n\n**Example:** <code>\"logo_image\": \"[Base64-encoded string representation of GIF, JPEG, or PNG file]\"</code> "
example: ''
logo_position:
type: string
description: 'The corner of the player in which you want the player logo to appear. The default is **top-left**.
**Example:** <code>"logo_position": "top-right"</code>'
example: ''
enum:
- top-left
- top-right
# --- truncated at 32 KB (77 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wowza/refs/heads/main/openapi/wowza-real-time-api-openapi.yml