Course
Get Course 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 /progresswithcatalogVisit: truewhen a learner opens the course from the catalog- Chapter progress on
PUT /progress(watch time is estimated as Σ(chapter progress% × chaptertotalDuration))
Response wrapper: { success, message, data: { enrollment, progress, catalog, watchTime, metadata } }
| Section | Key fields |
|---|---|
| enrollment | totalEnrolled (subscribers), initiated (started learning), catalogBounced (clicked only) |
| progress | averageProgressPercent, distribution (always 6 buckets), completionTrend (by day) |
| catalog | uniqueClickers, totalClicks, bouncedClickers |
| watchTime | totalSeconds, averageSecondsPerStudent, isEstimated (Σ chapter progress% × chapter duration) |
| metadata | category, courseDurationMinutes |
Optional startDate / endDate filter progress rows by updatedAt (does not affect totalEnrolled).
Authorization
bearer AuthorizationBearer <token>
In: header
Path Parameters
courseId*string
Course object id
Query Parameters
startDate?string
Start date for filtering data
Format
date-timeendDate?string
End date for filtering data
Format
date-timeHeader Parameters
x-whitelabel-host*string
Host name of the dashboard, ex: mydomain.tagmango.com
Response Body
application/json
application/json
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",
"success": false,
"message": "Invalid request",
"result": "Invalid request"
}{
"code": 401,
"type": "Unauthorized",
"statusMessage": "UNAUTHORIZED",
"message": "Invalid token",
"result": "Invalid token",
"success": false
}{
"code": 403,
"type": "Forbidden",
"statusMessage": "FORBIDDEN",
"errorCode": "WORKSHOP_MANGO_FORBIDDEN",
"message": "You can not access this api with a TagMango account, only available for whitelabel hosts",
"result": "You can not access this api with a TagMango account, only available for whitelabel hosts",
"success": false
}{
"code": 429,
"type": "Too Many Requests",
"statusMessage": "TOO_MANY_REQUESTS",
"message": "Request limit exceeded. try after 10 seconds",
"result": "Request limit exceeded. try after 10 seconds",
"success": false
}