Analytics APIGuides

Daily player report

Views, plays, retention, clicks and sales of a player, day by day, in one request

POST /sessions/stats_by_day returns one row per day with everything a performance report needs: views, plays, how far people watched, how many reached the pitch, clicks and sales. This guide builds a weekly report for one player.

You need the player's ID. If you don't have it, find it first.

Request the days

curl -X POST 'https://analytics.vturb.com/sessions/stats_by_day' \
  -H "X-Api-Token: $VTURB_API_TOKEN" \
  -H 'X-Api-Version: v1' \
  -H 'User-Agent: my-integration/1.0' \
  -H 'Content-Type: application/json' \
  -d '{
    "player_id": "64a5c8072e6fd10009828db2",
    "start_date": "2026-09-01 00:00:00",
    "end_date": "2026-09-07 23:59:59",
    "timezone": "America/Sao_Paulo"
  }'
  • start_date and end_date are required, written YYYY-MM-DD HH:MM:SS and read in timezone. Without timezone they are read in UTC, and the days are cut at UTC midnight.
  • video_duration and pitch_time, in seconds, are optional. Without them, or with 0, the API uses the length of the player's video and the pitch time set on the player. Send them to measure against something else, such as a pitch you are about to move.
  • When the player has no pitch time and you send none, the pitch is second 0: every session reaches it, and over_pitch_rate is 100.

Read the response

Rows come in date order and start no earlier than the day before the player was created. From there, a day without activity still gets its row, with zeros.

200 OK (one of seven rows)
[
  {
    "date_key": "2026-09-01",
    "total_viewed": 1530,
    "total_viewed_session_uniq": 1310,
    "total_viewed_device_uniq": 1201,
    "total_started": 702,
    "total_started_session_uniq": 600,
    "total_started_device_uniq": 540,
    "total_finished": 98,
    "total_finished_session_uniq": 90,
    "total_finished_device_uniq": 85,
    "total_clicked": 61,
    "total_clicked_session_uniq": 52,
    "total_clicked_device_uniq": 49,
    "engagement_rate": "38.47",
    "total_over_pitch": 160,
    "total_under_pitch": 380,
    "over_pitch_rate": "29.62",
    "play_rate": "44.96",
    "total_conversions": 27,
    "overall_conversion_rate": 5,
    "total_amount_usd": 0,
    "total_amount_brl": 537300,
    "total_amount_eur": 0
  }
]

Each count comes three ways: every event (total_viewed), unique sessions (_session_uniq) and unique devices (_device_uniq).

FieldWhat it measures
total_viewed*Views: the player was loaded on the page
total_started*Plays: the viewer pressed play
total_finished*The video was watched to the end
total_clicked*Clicks on the player's calls to action that take the viewer out of the page
play_rateThe share of unique views that pressed play: total_started_device_uniq ÷ total_viewed_device_uniq × 100
engagement_rateHow far people watched, on average, as a share of video_duration
total_over_pitch, total_under_pitchSessions that reached pitch_time, and those that left before it
over_pitch_ratePitch retention: the share of sessions that reached the pitch
total_conversionsSessions with an initial sale credited to the player
overall_conversion_rateSales per unique play: total_conversions ÷ total_started_device_uniq × 100
total_amount_usd, _brl, _eurThe amount sold in each currency, as an integer in cents (537300 is 5,373.00). It adds up every purchase credited to the player, order bumps included, not only the initial sales of total_conversions

Rates are percentages truncated, not rounded, to two decimals. engagement_rate, over_pitch_rate and play_rate come as strings, such as "29.62"; overall_conversion_rate comes as a number. Sales and their amounts fall on the day of the click that led to them.

Add the period total

For the summary line of the report, POST /sessions/stats takes the same body and returns one object with the same fields, without date_key, for the whole range. Use it instead of adding the days up: rates and unique counts cannot be summed across days.

Keep it within your quota

Each request counts against your plan's query quota. A daily report per player is one request; for many players, spread the requests out and check GET /quota/usage when you are near the limit.

Next: see where viewers leave and what happens at the pitch, or compare the traffic sources behind these numbers.

On this page