Migrate getCoursesStats

This guide covers transitioning from the v1 getCoursesStats endpoint to the more efficient v2 consolidated endpoint.

šŸ’”

Key changes

  • Consolidation: The getCoursesStats, getUserCourseStats, getUserCourses, and getCourseStats v1 endpoints are now merged into the single, more efficient List all courses statistics v2 endpoint.
  • Pagination: The v2 endpoint is paginated and returns 500 courses statistics per page.

Documentation links

Here are the links to the API reference for:

Endpoint mapping

Here's the direct correlation between the v1 and v2 endpoint URLs:

  • API v1: /api/v2/courses/stats
  • API v2: /api/v1/courses/stats

Behavior changes

Thanks to API v2 pagination mechanism, there is no more limitation on the number of statistics to be fetched through this endpoint.

Input changes

This section details the specific alterations to the input requirements between API versions.

API v1 input example

curl --location -g 'https://{{host}}/api/v1/courses/stats?company={{company}}&apiKey={{apiKey}}'

API v2 input example

curl --request GET \
     --url https://app.staging.360learning-dev.com/api/v2/courses/stats \
     --header '360-api-version: v2.0' \
     --header 'accept: application/json'

Main input differences

Change type

API v1

API v2

Modified
Query parameters

createdAtBefore / createdAtAfter (Optional): Timestamp filters, in the formatYYYY-MM-DDTHH:mm:ss.sssZ.

completedAt (Optional): Modified name, functionality, syntax, and date format. Now, this single filter combines the functionalities of completedAtBefore and completedAtAfter. It filters courses by completion date range using the LHS bracket notation. The date format is now YYYY-MM-DD.

Removed
Query parameters

firstActivityAtBefore / firstActivityAtAfter (Optional): Removed and not replaced in v2.


Removed
Query parameters

lastActivityAtBefore / lasstActivityAtAfter (Optional): Removed and not replaced in v2.


Output changes

This section details the specific alterations to the successful output returned between API versions.

API v1 output example

[
  {
    "course": {
      "_id": "62e29a923c24c589a7f21aa5",
      "name": "Welcome to the team!"
    },
    "stats": [
      {
        "attempts": [
          {
            "_id": "63a430d158dedd7933ef84c1",
            "progress": 0,
            "firstActivity": "2022-12-22T10:26:25.648Z",
            "lastActivity": "2022-12-22T10:45:26.896Z",
            "path": "639af419b8a1da7e76278f4e",
            "pathSession": "63a430ae7901ab0524815225",
            "globalTime": 1133849
          }
        ],
        "user": {
          "_id": "62bdbc00291a605543f24386",
          "mail": "[email protected]"
        }
      }
    ]
  }
]

API v2 output example

[
  {
    "_id": "507f1f77bcf86cd799439011",
    "versionNumber": 0,
    "lang": "bg",
    "firstActivityAt": "2025-06-30T13:23:56.059Z",
    "lastActivityAt": "2025-06-30T13:23:56.059Z",
    "timeSpent": 0,
    "progress": 0,
    "score": 0,
    "completedAt": "2025-06-30T13:23:56.059Z",
    "pathId": "507f1f77bcf86cd799439011",
    "pathSessionId": "507f1f77bcf86cd799439011",
    "courseId": "507f1f77bcf86cd799439011",
    "userId": "507f1f77bcf86cd799439011"
  }
]

Main output differences

API v2 output has been flattened: no more sub-objects in the response body, you only get raw attempts.

API v2 introduces pagination for the List all courses statistics endpoint. Instead of returning all stats in a single response, it now returns a maximum of 500 course statistics per page. To retrieve subsequent pages, you need to follow the URL provided in the Link header of the response.

Change type

API v1

API v2

Removed
Output property

course.name: Removed and not replaced in v2.


Removed
Output property

user.mail: Removed and not replaced in v2.


Added
Output property


score : (Optional) Score of the attempt (if applicable)

Added
Output property


lang : (Optional) Language of the course attempted by the learner (if applicable)

Added
Output property


versionNumber : (Optional) Version of the course attempted by the learner (if applicable)

Modified
Output property

course._id: Course unique identifier.

courseId: (Required) Course unique identifier.

Modified
Output property

user._id: User unique identifier.

userId: (Required) User unique identifier.

Modified
Output property

path: Path unique identifier.

pathId: (Optional) Path unique identifier.

Modified
Output property

pathSession: Path session unique identifier.

pathSessionId: (Optional) Path session unique identifier.

Modified
Output property

globalTime: Time spent (in millis) by the learner on this attempt.

timeSpent: (Required) Time spent (in millis) by the learner on this attempt.