Skip to main content

Get Summary

Retrieve students, visits, lesson completion, and average progress for one date window, plus the window of the same length right before it. See Analytics.

Request​

GET /players/{id}/analytics/summary

Path Parameters​

ParameterTypeRequiredDescription
idstringYesCourse UUID. See Identifiers.

Query Parameters​

ParameterTypeDefaultDescription
datestringallA preset or an inclusive range YYYY-MM-DD,YYYY-MM-DD. See Date Window.

Example Request​

curl -X GET "https://app.easy.tools/api/v1/players/8f3c1a62-d047-4e89-9b25-1c6a4d8e0f71/analytics/summary?date=2026-10-01,2026-10-28" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"

Response​

Success Response (200)​

{
"data": {
"date_range": { "from": "2026-10-01", "to": "2026-10-28", "timezone": "America/New_York" },
"students_count": 5,
"visits_count": 20,
"lesson_completions_count": 30,
"progress_percent": 25,
"lessons_count": 10,
"previous": {
"date_range": { "from": "2026-09-03", "to": "2026-09-30", "timezone": "America/New_York" },
"students_count": 3,
"visits_count": 9,
"lesson_completions_count": 12,
"progress_percent": 10
}
}
}

With date omitted, or date=all, the window runs from 2021-01-01 through today and previous is null:

{
"data": {
"date_range": { "from": "2021-01-01", "to": "2026-10-28", "timezone": "America/New_York" },
"students_count": 12,
"visits_count": 40,
"lesson_completions_count": 42,
"progress_percent": 35,
"lessons_count": 10,
"previous": null
}
}

Response Fields​

data has the fields described in Summary Object. students_count and visits_count count inside the window. lesson_completions_count and progress_percent run from the course start through the end of the window. previous ends the day before date_range.from.

Error Responses​

Not Found Error (404)​

See Identifiers.

{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found"
}
}

Validation Error (422 Unprocessable Entity)​

{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid",
"details": {
"date": ["date must start on or before its end"]
}
}
}

An unknown preset or a date that does not exist uses the same envelope, with details.date listing the accepted values.

Bad Gateway Error (502)​

Easycart answered, but not with a result the API can use.

{
"error": {
"code": "UPSTREAM_ERROR",
"message": "EasyCart rejected the request"
}
}

Service Unavailable Error (503)​

Easycart is unreachable or failing. Retry later.

{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "EasyCart is unavailable"
}
}

Authentication, permission, and rate-limit errors are described in Authorization.