Migrate getExternalCourse (using external ID)
This guide details how to migrate from the v1 getExternalCourse (using external ID) endpoint to the new v2 architecture. To replicate the v1 response, your integration must now perform a two-step "join" operation.
Key changesDecoupled data model: In API v2, you must call 2 endpoints to retrieve the full dataset previously available in a single v1 call.
- Step 1: Call the Retrieve an external course v2 endpoint using the
externalId. This response includes acourseIdfield.- Step 2: Use that
courseIdto call the Retrieve a course v2 endpoint, and get course attributes.
Documentation links
Here are the links to the API reference for:
- API v1
- API v2:
- Step 1: Retrieve an external course
- Step 2: Retrieve a course
Step 1: Retrieve an external course metadata
The first step is to call the Retrieve an external course v2 endpoint. This identifies the content via its integration and external IDs and retrieves the internal 360Learning course ID required for the second step.
Endpoint mapping (Step 1):
- API v1:
/api/v1/externalContents/groups/:groupId/externalPlatforms/:externalPlatform/courses/:externalId - API v2:
/api/v2/integrations/{integrationId}/courses/{externalId}
Input changes (Step 1)
API v1 input example
curl --location -g 'https://app.360learning.com/api/v1/externalContents/groups/62be0535045424d93edaad7b/externalPlatforms/myPlatform/courses/l3ssup3rh3r0s'API v2 input example (Step 1)
curl --request GET \
--url https://app.360learning.com/api/v2/integrations/507f1f77bcf86cd799439011/courses/a3215H-7 \
--header '360-api-version: v2.0' \
--header 'accept: application/json' \
--header 'authorization: Bearer access_token'Main input differences (Step 1)
Change type | API v1 | API v2 |
|---|---|---|
Removed |
| |
Removed |
| |
Added |
| |
Added |
|
Output changes (Step 1)
API v1 output example
{
"id": "6463973f9b19ff7b9ca674e9",
"authorId": "62bdbc00293a604543f44386",
"archived": false,
"title": "Machine Learning Crash Course",
"description": "Learn the basics of machine learning.",
"language": "en",
"courseDuration": 10,
"skills": [
"63970d8ec2675a57f2b3f509"
],
"externalId": "l3ssup3rh3r0s",
"externalPlatform": "myPlatform",
"groupId": "62be0535045424d93edaad7b",
"authors": [
"John Doe"
],
"alternativeLanguages": [
"fr"
],
"launchUrl": "https://player.mylearningplatform.com/ql/fg-q6dfax2e_6ys",
"mobileLaunchUrl": "https://player.mylearningplatform.com/mobile/fg-q6dfax2e_6ys",
"thumbnailUrl": "https://upload.wikimedia.org/wikipedia/commons/0/07/Wikipedia_logo_%28svg%29.svg",
"difficultyLevel": "beginner",
"contentType": "course",
"numberOfVideos": 1,
"sources": [
{
"name": "Wikipedia",
"logo": "https://en.wikipedia.org/static/images/icons/wikipedia.png"
}
],
"subjects": [
"Machine learning"
]
}API v2 output example (Step 1)
{
"defaultLang": "en",
"externalId": "l3ssup3rh3r0s",
"launchUrl": "https://player.mylearningplatform.com/ql/fg-q6dfax2e_6ys",
"name": "Machine Learning Crash Course",
"sources": [
{
"name": "Wikipedia",
"logoUrl": "https://en.wikipedia.org/static/images/icons/wikipedia.png"
}
],
"subjects": [
"Machine Learning",
"IT"
],
"contentType": "course",
"description": "Learn the basics of machine learning.",
"difficultyLevel": "beginner",
"duration": 10,
"imageUrl": "https://player.mylearningplatform.com/image/l3ssup3rh3r0s",
"mobileLaunchUrl": "https://player.mylearningplatform.com/mobile/launch/l3ssup3rh3r0s",
"authorId": "62bdbc00293a604543f44386",
"courseId": "6463973f9b19ff7b9ca674e9",
"translations": [
{
"lang": "fr",
"translatedFields": {
"description": "Apprenez les bases de l'apprentissage automatique.",
"launchUrl": "https://player.mylearningplatform.com/launch/l3ssup3rh3r0s/fr",
"mobileLaunchUrl": "https://player.mylearningplatform.com/mobile/launch/l3ssup3rh3r0s/fr",
"name": "Cours intensif sur l'apprentissage automatique",
"subjects": [
"Apprentissage automatique",
"TI"
]
}
}
]
}Main output differences (Step 1)
After calling Retrieve an external course, you must extract the courseId from the response body. This ID is the unique 360Learning identifier required to call Retrieve a course.
Change type | API v1 | API v2 |
|---|---|---|
Removed |
| Found in Step 2. |
Removed |
| Use List all tags in a course to get the list of tags (previously known as skills) associated with the course. |
Removed |
| Found in Step 2. |
Removed |
| Found in Step 2. |
Removed |
| Replaced by users' internal IDs in v2. Use Retrieve a user to get full users' information. |
Removed |
| |
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Step 2: Retrieve a course metadata
Once you have the courseId from the Step 1 response, call the Courses endpoint to retrieve platform-specific attributes
Endpoint mapping (Step 2)
- API v1:
/api/v1/externalContents/groups/:groupId/externalPlatforms/:externalPlatform/courses/:externalId - API v2:
/api/v2/courses/{courseId}
Input changes (Step 2)
API v1 input example
curl --location -g 'https://app.360learning.com/api/v1/externalContents/groups/62be0535045424d93edaad7b/externalPlatforms/myPlatform/courses/l3ssup3rh3r0s'API v2 input example (Step 2)
curl --request GET \
--url https://app.360learning.com/api/v2/courses/6463973f9b19ff7b9ca674e9 \
--header '360-api-version: v2.0' \
--header 'accept: application/json' \
--header 'authorization: Bearer access_token'Main input differences (Step 2)
Change type | API v1 | API v2 |
|---|---|---|
Removed |
| |
Removed |
| |
Added |
| |
Added |
|
Output changes (Step 2)
API v1 output example
{
"id": "6463973f9b19ff7b9ca674e9",
"authorId": "62bdbc00293a604543f44386",
"archived": false,
"title": "Machine Learning Crash Course",
"description": "Learn the basics of machine learning.",
"language": "en",
"courseDuration": 10,
"skills": [
"63970d8ec2675a57f2b3f509"
],
"externalId": "l3ssup3rh3r0s",
"externalPlatform": "myPlatform",
"groupId": "62be0535045424d93edaad7b",
"authors": [
"John Doe"
],
"alternativeLanguages": [
"fr"
],
"launchUrl": "https://player.mylearningplatform.com/ql/fg-q6dfax2e_6ys",
"mobileLaunchUrl": "https://player.mylearningplatform.com/mobile/fg-q6dfax2e_6ys",
"thumbnailUrl": "https://upload.wikimedia.org/wikipedia/commons/0/07/Wikipedia_logo_%28svg%29.svg",
"difficultyLevel": "beginner",
"contentType": "course",
"numberOfVideos": 1,
"sources": [
{
"name": "Wikipedia",
"logo": "https://en.wikipedia.org/static/images/icons/wikipedia.png"
}
],
"subjects": [
"Machine learning"
]
}API v2 output example (Step 2)
{
"name": "Machine Learning Crash Course",
"sourceLang": "en",
"authorId": "62bdbc00293a604543f44386",
"groupId": "62be0535045424d93edaad7b",
"coAuthorIds": [
"507f1f77bcf86cd799439011"
],
"description": "Learn the basics of machine learning.",
"duration": 10,
"_id": "6463973f9b19ff7b9ca674e9",
"createdAt": "2026-04-22T15:04:00.725Z",
"defaultLang": "en",
"modifiedAt": "2026-04-22T15:04:00.725Z",
"status": "published",
"translations": [
{
"lang": "fr",
"published": true,
"translatorIds": [
"507f1f77bcf86cd799439011"
],
"translatedFields": {
"name": "Machine Learning",
"description": "Ce module vous apprend les bases de Machine Learning !"
}
}
],
"type": "external",
"externalPlatform": "myPlatform",
"currentVersionNumber": 0,
"collaborativeLearning": true
}Main output differences (Step 2)
Change type | API v1 | API v2 |
|---|---|---|
Removed |
| Replaced by |
Removed |
| Found in Step 1. |
Removed |
| Found in Step 1. |
Removed |
| Found in Step 1. |
Removed |
| Found in Step 1 as |
Removed |
| Found in Step 1. |
Removed |
| Found in Step 1. |
Removed |
| |
Removed |
| |
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Modified |
|
|
Added |
| |
Added |
| |
Added |
| |
Added |
| |
Added |
| |
Added |
|
Updated 22 days ago
