For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
StatusSupportDiscussionsLog inSign Up
Docs HomeAPI ReferenceVideo on DemandAI FeaturesLive StreamingVideo PlayerVideo DataCloud PlayoutRecipes
Docs HomeAPI ReferenceVideo on DemandAI FeaturesLive StreamingVideo PlayerVideo DataCloud PlayoutRecipes
  • Get started
    • Introduction
    • How Video Data works
  • Web players
    • Monitor the FastPix player
    • Monitor the Shaka player
    • Monitor HLS.js
    • Monitor Video.js
    • Monitor DASH.js
  • Android players
    • Monitor AndroidX Media3
    • Monitor ExoPlayer
    • Monitor Brightcove Player
    • Monitor Bitmovin Player
    • Monitor Kaltura Player
    • Monitor THEOPlayer
  • iOS and cross-platform players
    • Monitor AVPlayer (iOS)
    • Monitor React Native
    • Monitor Better Player (Flutter)
  • Smart TV players
    • Monitor Samsung Tizen
    • Monitor LG webOS
  • Concepts
    • Understand data definitions
    • What Video Data do we capture
    • Audience metrics
    • Quality of experience (QoE) metrics
    • Playback metrics
    • Video startup metrics
    • Stability metrics
    • Render quality metrics
  • Working with video data
    • Explore the dashboard
    • Build workflows with the API
    • Find out why viewers drop off
    • Identify top-performing content
    • Pass custom metadata to metrics
    • Use custom dimensions
    • Troubleshoot playback errors
LogoLogo
StatusSupportDiscussionsLog inSign Up
On this page
  • Step 1: Identify low-engagement segments
  • Step 2: Fetch views from the low-engagement region
  • Step 3: Client-side filtering for short sessions
  • Step 4: Diagnose issues in short view sessions
  • Step 5: Segment the error for deeper analysis
  • Step 6: Comparing error percentages by ASN
  • See also
Working with video data

Find out why viewers drop off

Use FastPix Video Data APIs to identify the causes of viewer churn — from low-engagement segments down to root-cause errors.

Was this page helpful?
Previous

Identify top-performing content

Use FastPix Video Data APIs to find your most-watched videos and break engagement down by device type.

Next
Built with

Business question: Identify causes of viewer churn.

Here’s the API workflow below:


Step 1: Identify low-engagement segments

Use the list breakdown values endpoint with the playing_time metric to find regions/devices with poor engagement:

Request Example
$curl --request GET \
> --url 'https://api.fastpix.io/v1/data/metrics/playing_time/breakdown?timespan[]=7:days&limit=10&offset=1&groupBy=country&orderBy=views&sortOrder=asc' \
> --header 'accept: application/json' \
> --user '{Access_Token}:{Secret_Key}'

The response data shows India (IN) as a low-engagement region because of low total content playing time.

Response
1{
2 "success": true,
3 "metadata": {
4 "aggregation": "view_end"
5 },
6 "data": [
7 {
8 "views": 500,
9 "value": 57165,
10 "totalWatchTime": 83208,
11 "totalPlayingTime": 57165,
12 "field": "IN"
13 },
14 {
15 "views": 4980,
16 "value": 2624467,
17 "totalWatchTime": 913048,
18 "totalPlayingTime": 2624467,
19 "field": "US"
20 }
21 ],
22 "pagination": {
23 "totalRecords": 2,
24 "currentOffset": 1,
25 "offsetCount": 1
26 },
27 "timespan": [
28 1712915263,
29 1713520063
30 ]
31}

Step 2: Fetch views from the low-engagement region

Use list video views endpoint with a country=IN filter to retrieve all views from the region “India”:


Request Example
$curl --request GET \
> --url 'https://api.fastpix.io/v1/data/viewlist?timespan[]=7:days&filterBy[]=country:IN&limit=10&offset=1&orderBy=view_end&sortOrder=asc' \
> --header 'accept: application/json' \
> --user '{Access_Token}:{Secret_Key}'

This API request returns views with viewWatchTime included in each entry (even if not filterable).


Response
1{
2 "success": true,
3 "data": [
4 {
5 "viewId": "92752c49-1bce-4cf8-bea4-5c2c2ac7575d",
6 "operatingSystem": "MacOS",
7 "application": "Chrome",
8 "viewStartTime": "2024-04-15T04:43:44",
9 "viewEndTime": "2024-04-15T04:44:05",
10 "videoTitle": "Champion Engagement Model: Best practices for identifying and engaging your champion",
11 "errorCode": null,
12 "errorMessage": null,
13 "errorId": null,
14 "country": "IN",
15 "viewWatchTime": 10016,
16 "QoeScore": 0.9559243591134252
17 },
18 {
19 "viewId": "aa3f20e4-6065-4c7c-aed5-c7f8d127bcba",
20 "operatingSystem": "MacOS",
21 "application": "Chrome",
22 "viewStartTime": "2024-04-15T11:31:48",
23 "viewEndTime": "2024-04-15T11:32:30",
24 "videoTitle": "How to reduce time-to-value for your customers",
25 "errorCode": null,
26 "errorMessage": null,
27 "errorId": null,
28 "country": "IN",
29 "viewWatchTime": 31926,
30 "QoeScore": 0.9585203020685126
31 },
32 {
33 "viewId": "687b3a54-6646-4343-bfbe-459742042f54",
34 "operatingSystem": "MacOS",
35 "application": "Chrome",
36 "viewStartTime": "2024-04-16T09:20:34",
37 "viewEndTime": "2024-04-16T09:21:24",
38 "videoTitle": "How to Approach an Irate Customer With Mimecast's Alice Jeffery",
39 "errorCode": null,
40 "errorMessage": null,
41 "errorId": null,
42 "country": "IN",
43 "viewWatchTime": 13493,
44 "QoeScore": 0.47256304495379314
45 },
46 {
47 "viewId": "c1464fdb-f3f8-4ccd-8914-94e1851e8459",
48 "operatingSystem": "MacOS",
49 "application": "Chrome",
50 "viewStartTime": "2024-04-16T09:22:42",
51 "viewEndTime": "2024-04-16T09:22:45",
52 "videoTitle": "How to Approach an Irate Customer With Mimecast's Alice Jeffery",
53 "errorCode": null,
54 "errorMessage": null,
55 "errorId": null,
56 "country": "IN",
57 "viewWatchTime": 1,
58 "QoeScore": 0.5
59 }
60 ],
61 "pagination": {
62 "totalRecords": 500,
63 "currentOffset": 1,
64 "offsetCount": 25
65 },
66 "timespan": [
67 1712915263,
68 1713520063
69 ]
70}

Step 3: Client-side filtering for short sessions

Manually filter the response to isolate sessions with low viewWatchTime (e.g., <30 seconds).

Example client-side filtering:

1low_engagement_views = [
2 view for view in response["data"]
3 if view["viewWatchTime"] < 30000
4]

Step 4: Diagnose issues in short view sessions

You can use the get video view details endpoint to inspect individual sessions:

$curl --request GET \
> --url https://api.fastpix.io/v1/data/viewlist/92752c49-1bce-4cf8-bea4-5c2c2ac7575d \
> --header 'accept: application/json' \
> --user '{Access_Token}:{Secret_Key}'

Response
1{
2 "success": true,
3 "data": {
4 "asnId": 18209,
5 "asnName": "AS18209 Atria Convergence Technologies Ltd.,",
6 "averageBitrate": 2807994,
7 "browserName": "Chrome",
8 "cdn": "Cloudflare",
9 "city": "Hyderābād",
10 "continent": "AS",
11 "country": "India",
12 "countryCode": "IN",
13 "deviceManufacturer": "Apple",
14 "deviceModel": "Macintosh",
15 "deviceType": "Desktop",
16 "errorCode": "networkError",
17 "errorMessage": "fragLoadError",
18 "exitBeforeVideoStart": false,
19 "playbackScore": 0,
20 "qualityOfExperienceScore": 0,
21 "region": "Telangana",
22 "stabilityScore": 1,
23 "startupScore": 0.9247485839787308,
24 "videoTitle": "Knives Out",
25 "viewHasError": true,
26 "viewId": "b910582b-d0ef-49c6-9219-2d7f5c622ec2",
27 "watchTime": 23338,
28 "events": [
29 { "event_name": "playerReady", "player_playhead_time": 0 },
30 { "event_name": "viewBegin", "player_playhead_time": 0 },
31 { "event_name": "play", "player_playhead_time": 0 },
32 { "event_name": "playing", "player_playhead_time": 0 },
33 {
34 "event_name": "requestFailed",
35 "event_details": {
36 "hostname": "cdn.fastpix.io",
37 "error": "fragLoadError",
38 "type": "manifest"
39 },
40 "player_playhead_time": 408009
41 },
42 {
43 "event_name": "error",
44 "event_details": {
45 "player_error_message": "fragLoadError",
46 "player_error_code": "networkError"
47 },
48 "player_playhead_time": 585000
49 },
50 { "event_name": "viewCompleted", "player_playhead_time": 413988 }
51 ]
52 }
53}

Step 5: Segment the error for deeper analysis

Based on the diagnosis of individual sessions, network errors are rampant. So the best idea would be to filter these views. To apply appropriate filter one can use listing the dimensions and it will list all the available dimensions.


Request
$curl --request GET \
> --url https://api.fastpix.io/v1/data/dimensions \
> --header 'accept: application/json'

Response
1{
2 "success": true,
3 "data": [
4 "browser_name",
5 "browser_version",
6 "os_name",
7 "device_type",
8 "player_name",
9 "video_title",
10 "video_id",
11 "fp_playback_id",
12 "asn_name",
13 "cdn",
14 "video_source_hostname",
15 "country",
16 "region",
17 "viewer_id",
18 "error_code",
19 "exit_before_video_start",
20 "video_startup_failed",
21 "playback_failed"
22 ]
23}

From the response, you have all the dimensions to segment the data further. But, since you might want to further drill into the errors, you would need the error_code dimension for the next steps.


PLEASE NOTE

If you are already aware of the dimensions, then you can ignore this step or restrain from repeating this step again.


Step 6: Comparing error percentages by ASN

Since we already know that the issue is network errors we will check which ASN is facing more issue by breaking the error percentages across the ASN values using the list breakdown values API.

Here you can use the playback_failure_percentage metric ID and get the breakdown values for all the views with error_code as network_error. Further to know the error percentage across different ASN, use groupBy=asn.


Request
$curl --request GET \
> --url 'https://api.fastpix.io/v1/data/metrics/playback_failure_percentage/breakdown?filterby[]=error_code:network_error&limit=10&offset=1&groupBy=asn&orderBy=views&sortOrder=asc' \
> --header 'accept: application/json'

Response
1{
2 "success": true,
3 "metadata": {
4 "aggregation": "view_end"
5 },
6 "data": [
7 {
8 "views": 6,
9 "value": 0.6,
10 "totalWatchTime": 255397,
11 "totalPlayingTime": 1190975,
12 "field": "AS18209 Atria Convergence Technologies Ltd.,"
13 },
14 {
15 "views": 4,
16 "value": 0.4,
17 "totalWatchTime": 296827,
18 "totalPlayingTime": 1290034,
19 "field": "US23207 LB Network Technologies,"
20 }
21 ],
22 "pagination": {
23 "totalRecords": 2,
24 "currentOffset": 1,
25 "offsetCount": 1
26 },
27 "timespan": [
28 1740393396,
29 1742985396
30 ]
31}

This response shows two ASN names with the error percentages as 60% (0.6) and 40% (0.4) along with the total number of views affected by the error.

Outcome: If fragLoadError rises from missing files, encoding issues, or server misconfigurations, fixing those problems should take priority over CDN optimization. However, if network-related issues like latency, congestion, or routing inefficiencies are contributing factors, then optimizing your CDN setup for ASN AS18209 Atria Convergence Technologies Ltd., can help mitigate these problems and improve playback reliability.


See also

  • Build workflows with the API — overview of API-driven workflows
  • Identify top-performing content — another worked example
  • What Video Data do we capture — every dimension, event, and metric we capture