What's changed
This topic covers REST API changes that occurred between the release of v1.10 and v1.11. These changes fall into two categories:
- Changes present only in v1.11.
- Changes that originate from the development of v1.11, but also retroactively apply to earlier versions of the API. These are non-breaking changes unless otherwise communicated by Wowza.
Highlights:
- Added a new Analytics section with viewers, ingest, engagement, and popularity endpoints that let you gather analytics data for your streams.
- Added player customizations and plugins which allow you to customize your player appearance and enable casting to Airplay and Chromecast devices.
Only in v1.11
Over the course of development, we made the following changes to the REST API from v1.10 to v1.11. These changes are present in v1.11 only.
New endpoints
In v1.11 of the API, we added the following endpoints.
-
GET /analytics/viewers/account
– View live and historic viewer data for the account over a given time. To get data for current viewer data for all the live streams and VOD streams, do not sendto
andfrom
. Useinclude
values to return data includingcountries
,devices
,renditions
, andtrend
.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/viewers/account?
from=2023-04-14T10:31:54.486Z&to=2023-07-13T10:31:54.486Z&
include=countries,renditions,devices,trend"
{
"account": {
"viewers": 7,
"countries": [
{
"code": "US",
"viewers": 4
},
{
"code": "DE",
"viewers": 3
}
],
"renditions": [
{
"name": 720,
"viewers": 7
}
],
"devices: [
{
name: Desktop,
viewers;: 7
}
],
trend: [
{
sampled_at: 2023-05-26T12:01:00.000Z,
viewers: 7
},
{
sampled_at: 2023-06-26T12:02:00.000Z,
viewers: 7
},
]
},
limits: {
from: 2023-04-14T10:31:54.486Z,
to: 2023-07-13T10:31:54.486Z
}
}
-
GET /analytics/viewers/live_streams/{id}
– View live and historic viewer data for a specific live stream. To get data for current viewers for a live stream, do not sendto
andfrom
. Useinclude
values to return data includingcountries
,devices
,renditions
, andtrend
. If you don’t sendinclude
values, the total number of viewers is returned.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/viewers/live_streams/tvctq36g?
from=2023-04-14T10:31:54.486Z&to=2023-07-13T10:31:54.486Z&include=countries,renditions,devices,trend"
"live_stream": {
"id": "tvctq36g",
"viewers: 7,
"countries": [
{
"code": "US",
"viewers": 4
},
{
"code": "DE",
"viewers": 3
}
],
"renditions": [
{
"name": 720,
"viewers": 7
}
],
"devices": [
{
"name": "Desktop",
"viewers": 7
}
],
"trend": [
{
"sampled_at": 2023-05-26T12:01:00.000Z,
"viewers": 7
},
{
"sampled_at": 2023-06-26T12:01:00.000Z,
"viewers": 7
}
]
},
"limits": {
"from": 2023-04-14T10:31:54.486Z,
"to": 2023-07-13T10:31:54.486Z
}
-
GET /analytics/viewers/vod_streams/{id}
- View live and historic viewer data for a specific VOD stream. To get viewer data for current live streams, do not sendto
andfrom
. Useinclude
values to return data includingcountries
,devices
,renditions
, andtrend
. If you don’t sendinclude
values, the total number of viewers is returned.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/viewers/vod_streams/tvctq36g?
from=2023-04-14T10:31:54.486Z&to=2023-07-13T10:31:54.486Z&
include=countries,renditions,devices,trend"
"vod_stream": {
"id": "tvctq36g",
"viewers": 7,
"countries": [
{
"code": "US",
"viewers": 4
},
{
"code": "DE",
"viewers": 3
}
],
"renditions": [
{
name: 720,
viewers: 7
}
],
"devices": [
{
"name": "Desktop",
"viewers": 7
}
],
"trend": [
{
"sampled_at": 2023-05-26T12:01:00.000Z,
"viewers": 7
},
{
"sampled_at": 2023-06-26T12:01:00.000Z,
"viewers": 7
}
]
},
"limits": {
"from": 2023-04-14T10:31:54.486Z,
"to": 2023-07-13T10:31:54.486Z
}
-
GET/analytics/viewers/stream_targets/{id}
- View live and historic viewer data for a specific stream target. To get viewer data for current viewers on a stream target, do not sendto
andfrom
. Useinclude
values to return data includingcountries
,devices
,renditions
, andtrend
. If you don’t sendinclude
values, the total number of viewers is returned.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/viewers/stream_targets/tvctq36g?
from=2022-04-14T10:31:54.486Z&to=2022-07-13T10:31:54.486Z&
include=countries,renditions,devices,trend"
"stream_target": {
"id": "tvctq36g",
"viewers": 7,
"countries": [
{
"code": "US",
"viewers": 4
},
{
"code": "DE",
"viewers": 3
}
],
"renditions": [
{
"name": 720,
"viewers": 7
}
],
"devices": [
{
"name": "Desktop",
"viewers": 7
}
],
"trend": [
{
"sampled_at": 2022-04-26T12:01:00.000Z,
"viewers": 7
},
{
"sampled_at": 2022-05-26T12:01:00.000Z,
"viewers": 7
}
]
},
"limits": {
"from": 2022-04-14T10:31:54.486Z,
"to": 2022-07-13T10:31:54.486Z
}
}
-
GET /analytics/ingest/live_streams/{id}
- View ingest data for a specific live stream. The ingest metrics inlude the stream health metrics for a stream.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/ingest/live_streams/tvctq36g?
from=2022-04-14T10:31:54.486Z&to=2022-07-13T10:31:54.486Z&
include=trend"
{
"live_stream": {
"id": "tvctq36g",
"audio_codec": {
"status": "normal",
"text": "",
"units": "" ,
"value": "aac"
},
"bits_in_rate": {
"status": "normal",
"text": "",
"units": "Kbps",
"value": 317.3
},
"bytes_in_rate": {
"status": "normal",
"text": "",
"units": "KBps",
"value": 317.3
},
"connected": {
"status": "normal",
"text": "",
"units": "",
"value": "Yes"
},
"frame_size": {
"status": "warning",
"text": "Configured frame size is different from what Wowza Video is receiving from the source: 1280x720.",
units: "",
value: 1280x720
},
frame_rate: {
status: normal,
text: ,
units: FPS,
value: 30
},
height: {
status: warning,
text: Configured height is different from what Wowza Video is receiving from the source: 720.,
units: px,
value: 720
},
keyframe_interval: {
status: normal,
text: ,
units: GOP,
value: 69
},
"video_codec": {
"status": "normal",
"text": "",
"units": "",
"value": "h264"
},
"width": {
"status": "warning",
"text": "Configured width is different from what Wowza Video is receiving from the source: 1280.",
"units": "px",
"value": 1280
},
"stream_target_status": [
{
"status": "normal",
"text": "",
"units": "",
"value": "Active",
"id": "3lftlf1r_fcm6d98"
}
],
"trend": {
"bits_in_rate": 317.3,
"created_at": 2023-03-30T22:42:57.000Z,
"frame_rate": 30,
"height": 1030,
"keyframe_interval": 1030,
"width": 1030
}
},
"limits": {
"from": 2023-03-01T18:15:40.310Z,
"to": 2023-04-01T18:15:40.310Z
}
}
-
GET /analytics/engagement/vod_streams/{id}
- View the engagement data for a specific VOD stream. Engagement data provides insight into how many plays your stream received and the duration of each play. If you do not send thefrom
andto
parameters, the last 7 days’ worth of data is returned. Use theinclude
query parameter to specify whether you want to return trend data.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/popularity/vod_streams/tvctq36g?
from=2022-04-14T10:31:54.486Z&to=2022-07-13T10:31:54.486Z&
include=trend"
{
"vod_stream": {
"id": "tvctq36g",
"play_rate": 0.2,
"completion_rate": 0.42,
"avg_seconds_watched": 302,
"avg_percentage_watched": 67,
"total_seconds_watched": 77699,
"trend": [
{
"percent": 12,
"viewers": 7
},
{
"percent": 13,
"viewers": 7
}
]
},
"limits": {
"from": "2022-04-14T10:31:54.486Z",
"to": "2022-07-13T10:31:54.486Z"
}
}
-
GET /analytics/popularity/live_streams/{id}
- View the popularity data for a specific live stream. Popularity data provides insight into how many times your stream is displayed to a viewer and how many times it's played. If you don't sendto
andfrom
query parameters, the last 7 days worth of data is returned. Use theinclude
query parameter to specify whether you want to return trend data.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/popularity/live_streams/tvctq36g?
from=2022-04-14T10:31:54.486Z&to=2022-07-13T10:31:54.486Z&
include=trend"
{
"live_stream": {
"id": "tvctq36g",
"plays": 2,
"displays": 2,
"trend": [
{
"sampled_at": "2022-01-26T12:59:00.000Z",
"viewers": 7
},
{
"sampled_at": "2022-01-26T13:00:00.000Z",
"viewers": 7
}
]
},
"limits": {
"from": "2022-04-14T10:31:54.486Z",
"to": "2022-07-13T10:31:54.486Z"
}
}
-
GET /analytics/popularity/vod_streams/{id}
- View the popularity data for a specific VOD stream. Popularity data provides insight into how many times your stream is displayed to a viewer and how many times it's played. If you don't sendto
andfrom
query parameters, the last 7 days worth of data is returned. Use theinclude
query parameter to specify whether you want to return trend data.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/analytics/popularity/vod_streams/tvctq36g?
from=2022-04-14T10:31:54.486Z&to=2022-07-13T10:31:54.486Z&
include=trend"
{
"vod_stream": {
"id": "tvctq36g",
"plays": 2,
"displays": 2,
"trend": [
{
"sampled_at": "2022-01-26T12:59:00.000Z",
"viewers": 7
},
{
"sampled_at": "2022-01-26T13:00:00.000Z",
"viewers": 7
}
]
},
"limits": {
"from": "2022-04-14T10:31:54.486Z",
"to": "2022-07-13T10:31:54.486Z"
}
}
-
GET /usage/real_time_streams/summary
- This endpoint returns a summary of CDN usage for all real-time streams in the account.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "GET" \
"${WV_HOST}/api/${WV_VERSION}/usage/real_time_streams/summary"
{
"summary": {
"bytes_in": 987467984710,
"bytes_out": 1583413248468
},
"limits": {
"from": "2023-05-07T00:00:00.000Z",
"to": "2023-05-26T00:00:00.000Z"
}
}
-
PUT /real_time/stop/{id}
- Querying this enpoint stops a real-time stream.
// Using cURL
curl -H "Authorization: Bearer ${WV_JWT}" \
-H "Content-Type: application/json" \
-X "PUT" \
"${WV_HOST}/api/${WV_VERSION}/real_time/2adffc17/stop"
{
"real_time_stream": {
"state": "stopped"
}
}
Updated endpoints
While developing v1.11 of the API, we made changes to the following endpoints:
- Livestreams
- Players
- Assets
Livestreams
We added customizations
and plugins
for the following live stream endpoints, allowing you to customize the player appearance and enable casting to Airplay and Chromecast devices.
-
POST /live_streams
-
GET /live_streams/{id}
-
PATCH /live_streams/{id}
POST /live_streams
{
"live_stream": {
"aspect_ratio_height": 720,
"aspect_ratio_width": 1280,
"billing_mode": "pay_as_you_go",
"broadcast_location": "us_west_oregon",
"encoder": "other_webrtc",
"name": "My Live Stream",
"transcoder_type": "transcoded"
}
}
Response
{
"live_stream": {
…
}
POST /live_streams
{
"live_stream": {
"aspect_ratio_height": 720,
"aspect_ratio_width": 1280,
"billing_mode": "pay_as_you_go",
"broadcast_location": "us_west_oregon",
"encoder": "other_webrtc",
"name": "My Live Stream",
"transcoder_type": "transcoded"
}
}
Response
{
"live_stream": {
…
"player": {
"customizations": {
"play_icon": "solid",
"thin_timeline": false,
"drag_handle": false,
"volume": true,
"mute": true,
"fullscreen": true,
"show_player_title": false,
"color": "4d4d4d"
},
"countdown": true,
"countdown_at": "2020-02-01T17:00:00.000Z",
"embed_code": null,
"hls_playback_url": "https://wowzasubdomain.wowza.com/1/TWhoL3BiZnJXMFhmNzZVN3JrZDAwUT09/ZmYxSXRrTERrUlk9/hls/live/playlist.m3u8",
"id": "kwb6pwnv",
"logo_image_url": "https://prod.s3.amazonaws.com/uploads/player/logo_image/23424/5bad28.jpg",
"logo_position": "top-right",
"plugins": {
"airplay": false,
"chromecast": false
},
}
Players
We’ve added customizations
and plugins
for the following endpoints which allow you to customize the player appearance and enable casting to Airplay and Chromecast devices.
-
GET /players/{id}
-
PATCH /players/{id}
GET /players/{id}
{
"live_stream": {
"id": "2adffc17",
}
}
Response
{
"player": {
"countdown": true,
"countdown_at": "2020-02-01T17:00:00.000Z",
"created_at": "2020-01-29T17:16:21.968Z",
"embed_code": null,
"hls_playback_url": "https://wowzasubdomain.wowza.com/1/TWhoL3BiZnJXMFhmNzZVN3JrZDAwUT09/ZmYxSXRrTERrUlk9/hls/live/playlist.m3u8",
"hosted_page": {
"enabled": true,
"description": "My Hosted Page Description",
"logo_image_url": "https://prod.s3.amazonaws.com/uploads/player/hosted_page_logo_image/23424/5bad28.jpg",
"sharing_icons": false,
"title": "My Hosted Page",
"url": "https://player.video.wowza.com/hosted/e8dk5bf6/player.html"
},
"id": "e8dk5bf6",
"logo_image_url": "https://prod.s3.amazonaws.com/uploads/player/logo_image/23424/5bad28.jpg",
"logo_position": "top-right",
"responsive": false,
"transcoder_id": "6Qbymbbq",
"type": "wowza_flowplayer",
"updated_at": "2020-01-31T16:08:26.990Z",
"video_poster_image_url": "https://prod.s3.amazonaws.com/uploads/player/video_poster_image/23424/5bad28.jpg",
"width": 640
}
}
GET /players/{id}
{
"live_stream": {
"name": "My Updated Live Stream",
"recording": true
}
}
Response
{
"player": {
"customizations": {
"play_icon": "solid",
"thin_timeline": false,
"drag_handle": false,
"volume": true,
"mute": true,
"fullscreen": true,
"show_player_title": false,
"color": "4d4d4d"
},
"countdown": true,
"countdown_at": "2020-02-01T17:00:00.000Z",
"created_at": "2020-01-29T17:16:21.968Z",
"embed_code": null,
"hls_playback_url": "https://wowzasubdomain.wowza.com/1/TWhoL3BiZnJXMFhmNzZVN3JrZDAwUT09/ZmYxSXRrTERrUlk9/hls/live/playlist.m3u8",
"hosted_page": {
"enabled": true,
"description": "My Hosted Page Description",
"logo_image_url": "https://prod.s3.amazonaws.com/uploads/player/hosted_page_logo_image/23424/5bad28.jpg",
"sharing_icons": false,
"title": "My Hosted Page",
"url": "https://player.video.wowza.com/hosted/e8dk5bf6/player.html"
},
"id": "e8dk5bf6",
"logo_image_url": "https://prod.s3.amazonaws.com/uploads/player/logo_image/23424/5bad28.jpg",
"logo_position": "top-right",
"plugins": {
"airplay": false,
"chromecast": false
},
"responsive": false,
"transcoder_id": "6Qbymbbq",
"type": "wowza_flowplayer",
"updated_at": "2020-01-31T16:08:26.990Z",
"video_poster_image_url": "https://prod.s3.amazonaws.com/uploads/player/video_poster_image/23424/5bad28.jpg",
"width": 640
}
}
Assets
We've chaned the name of playback_enabled
to published
for the following endpoints.
-
GET /assets
-
GET /assets/{id}
-
PATCH /assets/{id}
GET /assets
{
"assets":
}
Response
{
"assets": [
{
"id": "wdjfqvsv",
"name": "MyAsset",
"created_at": "2020-01-29T17:16:21.849Z",
"updated_at": "2020-01-31T16:06:47.849Z",
"playback_enabled": true,
"thumbnail_url": "https://objectstorage.us-ashburn-1.oraclecloud.com/n/idcrz33q3xdo/b/recordings-qa-S7I69eYn/o/abcd1234/recording_0pfxrlw2/0pfxrlw2_thumbnail.jpg.jpg",
"state": "completed",
"processing_percentage": 0.1,
"file_size": 1570024,
"playback_url": "https://wowzasubdomain/1/RmlPcnpsM0Z1Nzd2/SFhkUXlv/hls/live/playlist.m3u8",
"download_url": "https://objectstorage.us-ashburn-1.oraclecloud.com/n/idcrz33q3xdo/b/recordings-qa-S7I69eYn/o/abcd1234/recording_0pfxrlw2/MyAsset.mp4",
"file_name": "MyFile.mp4"
},
…
]
}
GET /assets
{
"assets":
}
Response
{
"assets": [
{
"id": "wdjfqvsv",
"name": "MyAsset",
"created_at": "2020-01-29T17:16:21.849Z",
"updated_at": "2020-01-31T16:06:47.849Z",
"published": true,
"thumbnail_url": "https://objectstorage.us-ashburn-1.oraclecloud.com/n/idcrz33q3xdo/b/recordings-qa-S7I69eYn/o/abcd1234/recording_0pfxrlw2/0pfxrlw2_thumbnail.jpg.jpg",
"state": "completed",
"processing_percentage": 0.1,
"file_size": 1570024,
"playback_url": "https://wowzasubdomain/1/RmlPcnpsM0Z1Nzd2/SFhkUXlv/hls/live/playlist.m3u8",
"download_url": "https://objectstorage.us-ashburn-1.oraclecloud.com/n/idcrz33q3xdo/b/recordings-qa-S7I69eYn/o/abcd1234/recording_0pfxrlw2/MyAsset.mp4",
"file_name": "MyFile.mp4"
},
…
]
}
-
Added
reason
toGET /asset/{id}
andGET /assets
to show why an asset failed the processing phase. -
Added
reason
toGET /vod_streams/{id}
andGET /vod_streams
to show why a VOD asset failed the processing phase. -
Hosted pages and player embed codes are automatically generated for your assets once they're uploaded to Asset Management. You can view and edit this information using the following endpoints:
-
PATCH /assets/{id}
-
GET /assets/{id}
-
Deprecated endpoints
We've deprecated the following /usage
endpoints to provide you with a more unified experience with the new /analytics
endpoints. In the table below, you can find the new endpoints corresponding to respective deprecated endpoints that provide you with the necessary data.
Deprecated endpoint | New endpoint |
---|---|
GET /usage/accounts/trend |
GET /usage/account |
GET /usage/accounts/live |
GET /analytics/viewers/account |
GET /usage/accounts/countries |
GET /analytics/viewers/account |
GET /usage/transcoders/{id}/trend |
GET /usage/transcoders/{id} |
GET /usage/transcoders/{id}/live |
GET /analytics/live_streams/{id} |
GET /usage/transcoders/{id}/countires |
GET /analytics/live_streams |
GET /usage/stream_targets/{id}/countries |
GET /analytics/viewers/stream_targets/{id} |
GET /usage/stream_targets/{id}/renditions |
GET /analytics/viewers/stream_targets/{id} |
GET /usage/stream_targets/{id}/live |
GET /analytics/viewers/stream_targets/{id} |
GET /usage/vod_streams/egress |
|
GET /usage/vod_streams/egress/{id} |
GET /usage/vod_streams/{id} |
GET /usage/vod_streams/egress/summary |
GET /usage/vod_streams/summary |
GET /usage/vod_streams/{id}/trend |
GET /usage/vod_streams/{id} |
GET /usage/vod_streams/{id}/live |
GET /analytics/viewers/vod_streams/{id} |
GET /usage/vod_streams/{id}/countries |
GET /analytics/viewers/vod_streams/{id} |
GET /usage/vod_streams/{id}/renditions |
GET /analytics/viewers/vod_streams/{id} |
GET /live_streams/{id}/stats |
GET /analytics/ingest/live_streams/{id} |
GET /transcoders/{id}/stats |
GET /analytics/ingest/live_streams/{id} |
GET /transcoders/{id}/uptimes/{id}/metrics/current |
GET /analytics/ingest/live_streams/{id} |
GET /transcoders/{id}/uptimes/{id}/metrics/historic |
GET /analytics/ingest/live_streams/{id} |
In v1.11 and earlier versions
After the release of version 1.11 and during the development of version 1.11, we made the following changes to 1.11 that also retroactively change earlier versions of the API. You might already be aware of these changes as they've been released and the changes communicated through the Wowza Video REST API release notes, but you might still consider them as you upgrade to version 1.11.
-
We've changed the rendition naming in
/usage
for stream targets and VOD streams. A rendition name is now the smaller number of the resolution in which an asset was streamed. A resolution is [width] x [height] . In the following example, the rendition name in the old response sample is the bitrate (combined audio and video bitrate). In the updated response sample, it is the smaller number of the resolution.
{
"renditions": [
{
"name": "448",
"unique_viewers": 14,
"viewing_time": 222,
"bytes": 22886,
"zones": [
{
"name": "global",
"type": "fastly",
"bytes": 22886
}
]
}
{
"renditions": [
{
"name": "360",
"unique_viewers": 14,
"viewing_seconds": 222,
"avg_viewing_seconds": 16,
"viewing_bytes": 22886,
"zones": [
{
"name": "global",
"type": "fastly",
"viewing_bytes": 22886
}
]
}
-
We have added new values to the region parameter to improve real-time streaming at scale. The available regions are
phoenix
,singapore
,bangalore
, andauto
. Existing streams that use the deprecated values ofamericas
andemea
are automatically re-routed.americas
will go tophoenix
andemea
will go toamsterdam
. Use the updated region parameter inPOST /real_time
. -
You can change the region for real-time streams using
PATCH /real_time/ID
.