Skip to content

Watch time by topic

GET/v1/organization/{orgId}/marketing/results/topic-watch-time

US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com

Which topics keep people watching longest across your webinars. Live watch time is each attendee's minutes in the room divided by the webinar's scheduled length; on demand is the furthest each viewer got in the recording. Medians only. A webinar with two topics counts toward each. Topics with fewer than 5 people are left out and counted in suppressed. Defaults to the last 12 months. Read-only. Requires read:marketing. Also at GET /v1/marketing/results/topic-watch-time.

Request example

Terminal window
curl --request GET \
--url 'https://public-api.sessionboard.com/v1/organization/{orgId}/marketing/results/topic-watch-time' \
--header 'x-access-token: <api-token>'

Try it

Authorization

Your token stays in this page. It is sent only to the region above and is never saved; it is gone when you leave or reload the page.

Path parameters
Query parameters
GET

Authorizations

  • x-access-tokenstringheader

    Organization API token. Generate from Organization Settings → API Tokens.

  • AuthorizationBearer <token>headeror

    OAuth 2.1 access token. Obtained via the OAuth PKCE flow at /oauth/token.

Send one of these. See Authentication.

Path parameters

  • orgIdstringpathrequired

    Your organization ID. Any other organization returns 404.

Query parameters

  • eventIdintegerquery

    One webinar. Leave out for every webinar in the period.

  • fromstring<date>query

    Start of the period, YYYY-MM-DD.

  • tostring<date>query

    End of the period, YYYY-MM-DD, inclusive.

  • sortstringquery

    Order of topics.

    Allowed values
    "live", "on_demand", "people"
    Default
    "live"

Responses

200application/json

OK

  • payloadWebinarTopicWatchTimeReport

    Fields every webinar report carries.

    Show child attributes
    • org_kindstring | null

      Company, association or event organizer. null until your organization sets it; labels are then neutral.

      Allowed values
      "corporate", "association", "organizer", null
    • labelsOrgKindLabels

      Your organization's own words, chosen by org_kind. Use them for every word about people, organizations and money. For example people_known is Customers for a company, Members for an association and Exhibitors and sponsors for an event organizer.

      Show child attributes
      • kind_namestring
        Example
        "Association"
      • people_knownstring
        Example
        "Members"
      • people_known_onestring
        Example
        "Member"
      • people_otherstring
        Example
        "Nonmembers"
      • organizationsstring
        Example
        "Member organizations"
      • organization_onestring
        Example
        "Member organization"
      • ownerstring
        Example
        "Staff contact"
      • system_of_recordstring
        Example
        "AMS"
      • questions_titlestring
        Example
        "Joining and renewal questions nobody has followed up"
      • outcomes_titlestring
        Example
        "Membership from people who attended"
      • createdstring
        Example
        "Became members"
      • closedstring
        Example
        "Renewed"
      • becamestring
        Example
        "Lapsed members back"
      • in_the_roomstring
        Example
        "In the room: annual dues of members who attended"
    • periodobject
      Show child attributes
      • fromstring<date>
      • tostring<date>
    • as_ofstring<date-time> | null

      When the CRM or AMS was last read. null when nothing is connected.

    • not_trackedobject[]

      What this report cannot measure, one plain sentence each.

      Show child attributes
      • keystring
      • reasonstring
    • truncatedboolean

      true when the list was capped; <list>_total then gives the full count.

    • orgobject
      Show child attributes
      • webinarsinteger
      • median_live_sharenumber | null
      • median_on_demand_percentnumber | null
    • topics_totalinteger
    • topicsobject[]
      Show child attributes
      • topicobject
        Show child attributes
        • idstring
        • namestring
      • webinarsinteger
      • peopleinteger
      • liveobject | null
        Show child attributes
        • attendeesinteger
        • median_minutesnumber
        • median_sharenumber

          Share of the scheduled length, 0 to 1.

      • on_demandobject | null
        Show child attributes
        • viewersinteger
        • median_percentnumber
        • completed_sharenumber
      • vs_orgobject
        Show child attributes
        • live_pointsnumber | null
        • on_demand_pointsnumber | null
      • top_webinarsobject[]
        Show child attributes
        • event_idinteger
        • namestring
        • median_sharenumber
    • suppressedobject
      Show child attributes
      • topicsinteger
      • reasonstring

403

  • SCOPE_REQUIRED — the token lacks read:marketing (reads) or write:marketing (writes).
  • ORG_WIDE_TOKEN_REQUIRED — the token is restricted to particular events; this operation reads the whole organization.
  • FORBIDDEN — the organization's plan does not include Marketing, or the token's user cannot change goals (writes need an organization admin or the organization settings permission).

404

The event is not in your organization.

Response examples

{
"payload": {
"org_kind": "corporate",
"labels": {
"kind_name": "Association",
"people_known": "Members",
"people_known_one": "Member",
"people_other": "Nonmembers",
"organizations": "Member organizations",
"organization_one": "Member organization",
"owner": "Staff contact",
"system_of_record": "AMS",
"questions_title": "Joining and renewal questions nobody has followed up",
"outcomes_title": "Membership from people who attended",
"created": "Became members",
"closed": "Renewed",
"became": "Lapsed members back",
"in_the_room": "In the room: annual dues of members who attended"
},
"period": {
"from": "2026-01-15",
"to": "2026-01-15"
},
"as_of": "2026-01-15T09:30:00Z",
"not_tracked": [
{
"key": "<string>",
"reason": "<string>"
}
],
"truncated": true,
"org": {
"webinars": 123,
"median_live_share": 123.45,
"median_on_demand_percent": 123.45
},
"topics_total": 123,
"topics": [
{
"topic": {
"id": "<string>",
"name": "<string>"
},
"webinars": 123,
"people": 123,
"live": {
"attendees": 123,
"median_minutes": 123.45,
"median_share": 123.45
},
"on_demand": {
"viewers": 123,
"median_percent": 123.45,
"completed_share": 123.45
},
"vs_org": {
"live_points": 123.45,
"on_demand_points": 123.45
},
"top_webinars": [
{
"event_id": 123,
"name": "<string>",
"median_share": 123.45
}
]
}
],
"suppressed": {
"topics": 123,
"reason": "<string>"
}
}
}