List all courses: Migration guide

Transitioning from v1's getCourses to v2's List all courses endpoint involves several key changes. This guide details those changes, including modifications to request parameters, response formats, and overall functionality, to ensure a smooth migration.

💡

Key changes

  • Pagination: To improve performance, we've added pagination to this endpoint in v2. Now, you'll receive your results in pages of 500 items. For more information, see our Pagination guide.
  • Filtering: The API v2 uses the Left-Hand side (LHS) bracket notation in query parameters for filtering. For more information, see our Filtering guide.

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/v1/courses
  • API v2: /api/v2/courses

Input changes

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

API v1 input example

curl --location 'https://app.360learning.com/api/v1/courses?company={{company}}&apiKey={{apiKey}}&createdBefore=2025-01-01T00%3A00%3A00.000Z&modifiedAfter=2024-06-30T00%3A00%3A00.000Z&modifiedBefore=2024-07-30T00%3A00%3A00.000Z&createdAfter=2024-01-01T00%3A00%3A00.000Z'

API v2 input example

curl --request GET \
     --url 'https://app.360learning.com/api/v2/courses?createdAt[lt]=2025-01-01&createdAt[gte]=2024-01-01&modifiedAt[lt]=2024-07-30&modifiedAt[gte]=2024-06-30' \
     --header '360-api-version: v2.0' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer access_token'

Main input differences

Change typeAPI v1API v2
Modified
Query parameters
createdBefore / createdAfter (Optional): Timestamp filters, in the formatYYYY-MM-DDTHH:mm:ss.sssZ.createdAt (Optional): Modified name, functionality, syntax, and date format. Now, this single filter combines the functionalities of createdBefore and createdAfter. It filters courses by creation date range using the LHS bracket notation. The date format is now YYYY-MM-DD.
Modified
Query parameters
modifiedBefore / modifiedAfter (Optional): Timestamp filters, in the formatYYYY-MM-DDTHH:mm:ss.sssZ.modifiedAt (Optional): Modified name, functionality, syntax, and date format. Now, this single filter combines the functionalities of modifiedBefore and modifiedAfter. It filters courses by modification date range using the LHS bracket notation. The date format is now YYYY-MM-DD.
Added
Query parameter
-status (Optional): New query parameter to filter courses by status (archived, deleted, published).
Added
Query parameter
-type (Optional): New query parameter to filter courses by type (external, internal, scorm).

Output changes

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

API v1 output example

[
  {
    "_id": "58eb5c621a92bb4fb526b2b0",
    "author": "edouard.lansalut#[email protected]",
    "creationDate": "2018-04-16T13:19:01.000Z",
    "defaultLang": "fr",
    "description": "Description du module de démo",
    "lang": "en",
    "modificationDate": "2018-04-16T17:55:48.032Z",
    "name": "Module de démo",
    "sourceLang": "en",
    "status": "published",
    "type": "internal",
    "coAuthors": [
      "edouard.lansalut#[email protected]"
    ],
    "courseDuration": 15,
    "group": "57ec5cb81abbbb4fb526b2bd",
    "groupName": "Onboardess",
    "reactionScore": 100,
    "relevanceScore": 50,
    "translationsLangs": [
      {
        "lang": "fr",
        "published": true,
        "translators": [
          "edouard.lansalut#[email protected]"
        ]
      }
    ]
  }
]

API v2 output example

[
  {
    "_id": "507f1f77bcf86cd799439011",
    "authorId": "507f1f77bcf86cd799439011",
    "coAuthorIds": [
      "507f1f77bcf86cd799439011"
    ],
    "createdAt": "2025-03-21T09:34:01.971Z",
    "defaultLang": "bg",
    "groupId": "507f1f77bcf86cd799439011",
    "modifiedAt": "2025-03-21T09:34:01.971Z",
    "name": "Employee Onboarding",
    "sourceLang": "bg",
    "status": "archived",
    "translations": [
      {
        "lang": "fr",
        "published": true,
        "translatorIds": [
          "507f1f77bcf86cd799439011"
        ],
        "translatedFields": {
          "name": "Accueil des employés",
          "description": "Ce module vous apprend à intégrer un nouveau collaborateur !"
        }
      }
    ],
    "type": "external",
    "description": "This course will teach you how to onboard a new employee!",
    "duration": 0,
    "externalPlatform": "Udemy"
  }
]

Main output differences

Change typeAPI v1API v2
Removed
Output property
reactionScore: Removed from endpoint v2 version, not replaced.-
Removed
Output property
relevanceScore: Removed from endpoint v2 version, not replaced.-
Modified
Output property
author: Email.authorId: Renamed. Now contains the author 360Learning ID instead of the email.
Modified
Output property
creationDatecreatedAt: Renamed.
Modified
Output property
lang: Top-level property indicating the source language of a course (deprecated but retained in the API v1 for backward compatibility).sourceLang: Replaced the top-level and no longer supported lang.

Note: lang indicating the language of a translation within translations (formerly translationsLang) remains unchanged.
Modified
Output property
coAuthorscoAuthorIds: Renamed. Now contains an array with the IDs of the co-authors, instead of the emails.
Modified
Output property
modificationDatemodifiedAt: Renamed.
Modified
Output property
translationsLangstranslations: Renamed.
Modified
Output property
translationsLangs.translatorstranslations.translatorIds: Renamed. Now contains an array with the IDs of the translators instead of the emails.
Modified
Output property
groupIdgroup: Renamed.
Modified
Output property
courseDurationduration: Renamed.
Added
Output property
-translations.translatedFields: New parameter with the translated fields of the course.
Added
Output property
-translations.translatedFields.name: New parameter with the translated name of the course in the given language.
Added
Output property
-translations.translatedFields.description: New parameter with the translated description of the course in the given language