TagMangoTagMango Docs
Course

Get Course Reporting

GET
/api/v1/external/courses/{courseId}/reporting

Returns live analytics for a single course. Numbers in the docs are examples only — your response reflects real progress data for the course.

Data source: MongoDB progress documents (course-level stubs + chapter progress). Fan apps must send:

  • PUT /progress with catalogVisit: true when a learner opens the course from the catalog
  • PUT /progress with secondsWatched during playback for watch time

Response wrapper: { success, message, data: { enrollment, progress, catalog, watchTime, metadata } }

SectionKey fields
enrollmenttotalEnrolled (subscribers), initiated (started learning), catalogBounced (clicked only)
progressaverageProgressPercent, distribution (always 6 buckets), completionTrend (by day)
cataloguniqueClickers, totalClicks, bouncedClickers
watchTimetotalSeconds, averageSecondsPerStudent, isEstimated
metadatacategory, courseDurationMinutes

Optional startDate / endDate filter progress rows by updatedAt (does not affect totalEnrolled).

AuthorizationBearer <token>

In: header

Path Parameters

courseId*string

Course object id

Query Parameters

startDate?string

Start date for filtering data

Formatdate-time
endDate?string

End date for filtering data

Formatdate-time

Header Parameters

x-whitelabel-host*string

Host name of the dashboard, ex: mydomain.tagmango.com

Response Body

application/json

application/json

application/json

curl -X GET "https://api-prod-new.tagmango.com/api/v1/external/courses/66c4964c11e7fef26751f3a7/reporting" \  -H "x-whitelabel-host: string"
{
  "enrollment": {
    "totalEnrolled": 120,
    "totalActiveLearners": 45,
    "initiated": 80,
    "inProgress": 35,
    "completed": 20,
    "catalogVisited": 90,
    "catalogBounced": 10
  },
  "progress": {
    "averageProgressPercent": 42.5,
    "distribution": [
      {
        "label": "26% - 50%",
        "count": 12,
        "percent": 15
      }
    ],
    "completionTrend": [
      {
        "period": "2026-06-01",
        "count": 3
      }
    ]
  },
  "catalog": {
    "uniqueClickers": 90,
    "totalClicks": 150,
    "bouncedClickers": 10
  },
  "watchTime": {
    "totalSeconds": 36000,
    "averageSecondsPerStudent": 450,
    "isEstimated": true
  },
  "metadata": {
    "category": {
      "name": "Marketing"
    },
    "courseDurationMinutes": 90
  }
}
{
  "code": 400,
  "type": "Bad request",
  "statusMessage": "BAD_REQUEST",
  "message": "Invalid request",
  "success": false
}
{
  "code": 401,
  "type": "Unauthorized",
  "statusMessage": "UNAUTHORIZED",
  "message": "Invalid token",
  "success": false
}