Application developer manual
Overview :headding-anchor:overview
Adobe Learning Manager is a cloud-hosted, learner-centric, and self-service learning management solution. Customers can access Learning Manager resources programmatically using the Learning Manager API to integrate it with other enterprise applications. The API can also be used by Adobe partners to enhance the value proposition of Learning Manager, by extending its functionality or by integrating it with other applications or services.
Usage scenario :headding-anchor:usagescenario
Using Learning Manager API, developers can build self-contained applications that extend the functionality of Learning Manager or integrate Learning Manager with other enterprise applications workflows. You can develop a web application, desktop client or a mobile app using any technology of your choice. As a developer you can access your application data from within Learning Manager. The deployment of the application that you develop is external to the Learning Manager platform and you have full control over the software development lifecycle as the application evolves. Typically, applications are developed by a customer organization for use with their Learning Manager account, and these applications are private to that specific customer organization. Also, Adobe partners can build generic applications with Learning Manager API, that can be used by a large set of Learning Manager customers.
Learning Manager API :headding-anchor:apidescription
The Learning Manager API is based on principles of REST, and exposes key elements of the Learning Manager Object Model to application developers through HTTP. Before knowing the details of the API endpoints and the HTTP methods, developers can become familiar with the various Learning Manager objects, their attributes and inter-relationships. Once the models are understood, it will be useful to get a basic understanding of the structure of API requests and responses, and a few common programming terms that we use generically across the API.
For details of the various API endpoints and methods, refer to the Learning Manager API documentation.
Learner APIs
Adobe Learning Manager - Learner APIs allow you to create a custom learning experience for your users. The usage of these APIs need a valid user token and are to be used only for the purpose of workflows where there is a fully licensed/registered Learner.
The non-logged in use cases require special handling.
Reach out to the Solution Architecture team, in case you have any questions on the appropriate use of these APIs and ensure that a Solution Architect has vetted a solution before you deploy it.
API authentication :headding-anchor:apiauthentication
When writing an application that makes API calls to Learning Manager, you have to register your application using the Integration Admin app.
Learning Manager APIs use OAuth 2.0 framework to authenticate and authorize your client applications.
Procedure
1. Set up your application
You can set up your application with client id and client secret to use the proper end points. Once you register your application, you can get the clientId and clientSecret. Get URL should be used in browser as it authenticates the Learning Manager users using their pre-configured accounts such as SSO, Adobe ID, and so on.
GET https://learningmanager.adobe.com/oauth/o/authorize?client_id=<Enter your clientId>&redirect_uri=<Enter a url to redirect to>&state=<Any String data>&scope=<one or more comma separated scopes>&response_type=CODE.
After successful authentication, your browser redirects to the redirect_uri mentioned in the above URL. A parameter code is appended along with the redirect uri.
2. Get refresh token from code
POST https://learningmanager.adobe.com/oauth/token Content-Type: application/x-www-form-urlencoded
Body of the post request:
client_id:
<enter your clientid>
&
client_secret:
<enter your clientsecret>
&
code:
<code from step 1></code>
</enter>
</enter>
3. Obtain an access token from refresh token
URL to obtain access token:
POST https://learningmanager.adobe.com/oauth/token/refresh Content-Type: application/x-www-form-urlencoded
Body of the post request:
client_id:
<enter your clientid>
&
client_secret:
<enter your clientsecret>
&
refresh_token:
<refresh token>
</refresh>
</enter>
</enter>
URL to verify access token details
GET https://learningmanager.adobe.com/oauth/token/check?access_token=<access_token>
Usage limitation
An access token is valid for seven days. After a day, you have to generate a new access token using refresh token. If you generate a new access token from refresh token while an existing access token is still valid, the existing token is returned.
Some of the frequently used terms in Learning Manager API are explained below for your reference.
Includes
Developers can access a single API object model and also multiple models associated with that model. To access the subsequent related models, you need to understand the relationship of each model with other models. Includes parameter enables developers to access the dependant models. You can use comma separator to access multiple models. For sample usage and more details on includes, refer to sample API model section in this page.
API request
The API requests can be made by making a HTTP Request. Depending upon the end point and method developer may have a choice of various HTTP verbs such as GET, PUT, POST, DELETE, PATCH, etc. For some requests query parameters can be passed. When making a request for a specific data model, the user can also request for related models as described in the JSON API specifications. The structure of a typical API Request is described in sample model usage.
API response
When an API request is made by a client, a SON document is obtained according to the JSON API specification. The response also contains the HTTP Status code, which the developer can verify to perform the appropriate next steps in his application logic. The structure of a typical API Response is described in sample model usage.
Errors
When an API request fails, an Error response is obtained. The HTTP Status code returned in the response indicates the nature of error. Error codes are represented with numbers for each model in the API reference. 200, 204, 400 and 404 are some of the common errors represented in APIs indicating HTTP access issues.
Fields
API object’s attributes and its relationships are collectively called Fields. Refer to JSON API for more information. You can use Fields as a parameter while making API calls to fetch one or more specific attributes from the model. In absence of the Fields parameter, the API call fetches all the available attributes from the model. For example, in the following API call, fields[skill]=name fetches you the name attribute of the skill model alone.
https://learningmanager.adobe.com/primeapi/v2/users/{userId}/userSkills/{id}?include=skillLevel.skill&fields[skill]=name
Pagination
Sometimes, an API request results in a long list of objects to be returned in the response. In such cases, the pagination attribute enables the developer to fetch the results sequentially in terms of multiple pages, where each page contains a range of records. For example, pagination attribute in Learning Manager enables you to set the maximum number of records to be displayed in a page. Also, you can define the range value of records to be displayed on page.
Sorting
Sorting is allowed in API models. Based on the model, choose the type of sorting to be applied for the results. Sorting can be applied in ascending or descending order. For example, if you specify code sort=name
, then it is ascending sort by name. If you specify code sort=-name
, it is descending sort by name. Refer to JSON API spec for more information.
API usage illustration :headding-anchor:samplemodel
Let us consider a scenario where a developer wants to get skill name, max points assigned for skill level and points earned by the learner for that skill.
A userSkill model in Learning Manager APIs consists of id, type, dateAchieved, dateCreated, pointsEarned as default attributes. So, when a developer uses GET method to acquire details of userSkill model, the current data pertaining to the default attributes is shown in the response output.
But, in this scenario, the developer wants to get the skill name, and points of skill level for the user. Learning Manager API enables you to access this related information using relationship fields and include parameter. The associated models for userSkill are obtained in relatioships tag. You can get the details of each associated models by calling these models along with the userSkill. To get this information, use code include
parameter with dot (period) separated values for each of the associated models. You can use comma as separator to request another model like user include=skillLevel.skill,course
API Call
https://learningmanagerqe1.adobe.com/primeapi/v1/users/%7buserId%7d/userSkills/%7bid%7d?include=skillLevel.skill&fields%5bskill%5d=name&fields%5bskillLevel%5d=maxCredits&fields%5buserSkill%5d=pointsEarned
For example userId can be 746783 and the userSkills id: 746783_4426_1.
Response of API call
\{
"links": {"self": "https://learningmanager.adobe.com/primeapi/v2/users/746783/userSkills/746783_4426_1?include=skillLevel.skill&fields[userSkill]=pointsEarned&fields[skillLevel]=maxCredits&fields[skill]=name"},
"data": {
"id": "746783_4426_1",
"type": "userSkill",
"attributes": {"pointsEarned": 5},
"links": {"self": "https://learningmanager.adobe.com/primeapi/v2/users/746783/userSkills/746783_4426_1"}
},
"included": [
{
"id": "4426",
"type": "skill",
"attributes": {"name": "Java"},
"links": {"self": "https://learningmanager.adobe.com/primeapi/v2/skills/4426"}
},
{
"id": "4426_1",
"type": "skillLevel",
"attributes": {"maxCredits": 10}
}
]
}
Learning Manager models :headding-anchor:models
The Learning Manager API allows developers to access Learning Manager objects as RESTful resources. Each API endpoint represents a resource, typically an object instance like Badge, or a collection of such objects. The developers then use the HTTP verbs such as PUT, GET, POST and DELETE to perform the CRUD operations on those objects (collections).
The following diagram represents the various elements of the Learning Manager Object Model in V1 API.
The following table describes various elements of the Learning Manager V1 object model:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 7-row-3 8-row-3 9-row-3 10-row-3 11-row-3 12-row-3 13-row-3 14-row-3 15-row-3 16-row-3 17-row-3 18-row-3 19-row-3 20-row-3 html-authored no-header | ||
---|---|---|
Serial No | Learning Manager Object | Description |
1. | user | User is the key model in Learning Manager. Users are typically the internal or external learners of an organization who consume learning objects. However they may play some other roles such as author and Manager along with learner role. User id, type, email are some of the inline attributes. |
2. | course | Course is one of the learning objects supported in Learning Manager, that consists of one or more modules. |
3. | module | Module is a building block to create learning objects in Learning Manager. Modules can be of four different types such as Class room, virtual class room, activity and self-paced. Use this module model to get the details of all modules in an account. |
4. | certification | Certification is awarded to learners based on successful completion of courses. Courses are required in the application before you use certifications. |
5. | learning program | Learning programs are uniquely designed courses meeting specific learning requirements of users. Typically, learning programs are used to drive learning goals spanning across individual courses. |
6. | badge | Badge is a token of accomplishment that learners get when they reach specific milestones as they progress within a course. |
7. | skill | Skills model consists of levels and credits. Skills can be acquired by learners after relevant course completion. |
8. | certificationEnrollment | This model provides details of an enrollment by a user to a single certification. |
9. | courseEnrollment | This model provides details of an enrollment by a user to a single course. |
10. | courseInstance | A course can have one or many instances associated with it. You can get Course instance |
11. | courseSkill | A courseSkill model specifies the progress of a single skill that is achieved by completing a course. |
12. | courseModule | A courseModule model specifies how a module is included in a course. For instance, whether the module is used for pretest or for content. |
13. | learningProgramInstance | A learning program can consist of multiple instances imbibing similar properties of a learning program or customized instances. |
14. | job aid | Job aid is a learning content accessible to learners without any enrollment or completion criteria. You can fetch, updated date, state, id information along with its related models such as job aid version, authors and skill level. |
15. | jobAidVersion | Job aid can have one or many versions associated to it based on number revisions in content and number of uploads. This model provides details of a single job aid version. |
16. | learningProgramInstanceEnrollment | Learning program consists of one or many instances. Learners can enroll to a learning program instance by themselves or assigned by administrator. This model provides details of an enrollment by a user to a single learning program instance. |
17. | moduleVersion | A module can have one or many versions based on its revised content uploads. Use this model to obtain specific info about any single module version. |
18. | skillLevel | A skill level comprises of one or many courses to be consumed in order to acquire a level along with its associated credits. |
19. | userBadge | UserBadge relates a single badge with a single user. It contains details such as when was it achieved, assertionUrl and so on. |
20. | userSkill | UserSkill indicates how much of a single skill level is achieved by a single user. |
Following are the various elements of the Learning Manager class diagram in V2 API.
table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 8-row-2 9-row-2 10-row-2 11-row-2 12-row-2 13-row-2 14-row-2 15-row-2 16-row-2 17-row-2 html-authored | |
---|---|
Learning Manager Object | Description |
account | Encapsulates the details of a Learning Manager customer. |
badge |
Badge is a token of accomplishment that learners get when they reach specific milestones as they progress within a course. |
catalog |
Catalog is a collection of learning objects. |
user |
User is the key model in Learning Manager. Users are typically the internal or external learners of an organization who consume learning objects. However, they may play some other roles such as author and Manager along with learner role. User id, type, email are some of the inline attributes. |
resource | This is used to model each content resource that a module seeks to encapsulate. All resources encapsulated within an ``loResource are equivalent in terms of the learning objective, but they differ from each other in terms of delivery type or content locale. |
userNotification | This model contains notification information pertaining to a learner. |
userSkill | UserSkill indicates how much of a single skill level is achieved by a single user. |
userBadge | UserBadge relates a single badge with a single user. It contains details such as when was it achieved, assertionUrl and so on. |
skill | Skills model consists of levels and credits. Skills can be acquired by learners after relevant course completion. |
skillLevel | A skill level comprises of one or many courses to be consumed in order to acquire a level along with its associated credits. |
learningObject | A Learning Object is an abstraction for various kinds of objects which users can enroll into and learn from. Currently Learning Manager has the four types of Learning Objects – Course, Certification, Learning Program and Job Aid. |
learningObjectInstance | A specific instance of a learning object. |
learningObjectResource | This is equivalent to the concept of module . A course is composed of one of more modules. In Learning Manager, a module can be delivered in a variety of equivalent ways. Therefore the loResource essentially encapsulates all those equivalent resources. |
loResourceGrade | This encapsulates the outcome of the user consuming a specific resource in the context of a learning object he is enrolled into. It has information such as the duration spent by user in the resource, percentage progress made by the user, pass/fail status and the score obtained by the user in any associated quiz. |
calendar | A calendar object is a list of upcoming classroom or virtual classroom courses that the user can enroll into. |
l1FeedbackInfo | L1 Feedback encapsulates the answers provided by a learner for the feedback questions associated with Learning Objects. Typically this is collected after the user completes a Learning Object if configured to collect such feedback from learners. |
enrollment | This abstraction encapsulates the details pertaining to the transaction representing the assignment of a specific user to a specific learning object instance. |
List of object attributes and relationships.
Attributes
dateCreated
gamificationEnabled
id
locale
loginUrl
logoUrl
name
subdomain
themeData
timeZoneCode
Relationships
contentLocales(localizationMetadata)
gamificationLevels(gamificationLevel)
timeZones(timeZone)
uiLocales(localizationMetadata)
id
imageUrl
name
state
dateCreated
dateUpdated
description
id
isDefault
isInternallySearchable
isListable
name
state
id
names
color
name
points
Attributes
authorNames
dateCreated
datePublished
dateUpdated
effectivenessIndex
enrollmentType
id
imageUrl
isExternal
isSubLoOrderEnforced
loType
state
tags
Relationships
authors(user)
enrollment(learningObjectInstanceEnrollment)
instances(learningObjectInstance)
prerequisiteLOs(learningObject)
skills(learningObjectSkill)
subLOs(learningObject)
supplementaryLOs(learningObject)
supplementaryResources(resource)
Attributes
completionDeadline
dateCreated
enrollmentCount
id
isDefault
seatLimit
state
validity
Relationships
badge(badge)
l1FeedbackInfo(feedbackInfo)
learningObject(learningObject)
loResources(learningObjectResource)
localizedMetadata(localizationMetadata)
subLoInstances(learningObjectInstance)
Attributes
dateCompleted
dateEnrolled
dateStarted
hasPassed
id
progressPercent
score
state
Relationships
learner(user)
learnerBadge(userBadge)
learningObject(learningObject)
loInstance(learningObjectInstance)
loResourceGrades(learningObjectResourceGrade)
Attributes
externalReporting
id
loResourceType
resourceType
version
Relationships
learningObject(learningObject)
loInstance(learningObjectInstance)
localizedMetadata(localizationMetadata)
resources(resource)
Attributes
dateCompleted
dateStarted
dateSuccess
duration
hasPassed
id
progressPercent
score
Relationships
loResource(learningObjectResource)
credits
id
Relationships
learningObject(learningObject)
skillLevel(skillLevel)
Attributes
id
reason
Relationships
learningObject(learningObject)
authorDesiredDuration
completionDeadline
contentStructureInfoUrl
contentType
contentZipSize
contentZipUrl
dateCreated
dateStart
desiredDuration
downloadUrl
extraData
hasQuiz
hasToc
id
instructorNames
isDefault
locale
location
name
onlyQuiz
reportingInfo
reportingType
seatLimit
Attributes
description
id
name
state
Relationships
levels(skillLevel)
id
level
maxCredits
name
Relationships
badge(badge)
skill(skill)
Attributes
avatarUrl
bio
contentLocale
email
fields
id
name
pointsEarned
profile
roles
state
timeZoneCode
uiLocale
Relationships
account(account)
manager(user)
Attributes
assertionUrl
dateAchieved
id
modelType
Relationships
badge(badge)
learner(user)
model(learningObject)
Attributes
course
courseType
dateStart
enrolled
id
month
quarter
Relationships
containerLO(learningObject)
course(learningObject)
actionTaken
channel
dateCreated
id
message
modelIds
modelNames
modelTypes
read
role
Attributes
dateAchieved
dateCreated
id
pointsEarned
Relationships
learnerBadge(userBadge)
learningObject(learningObject)
skillLevel(skillLevel)
user(user)
Application development process :headding-anchor:registration
Pre-requisites :headding-anchor:prerequisites
As a developer you have to create a trial account on Learning Manager, so that you can have full access to all the roles within that account. To be able to write an application, a developer has to create some users and courses and get the account to a reasonable state so that the application being developed can have access to some sample data.
Create client id and secret :headding-anchor:createclientidandsecret
-
In Integration Admin login, click Applications on the left pane.
Select Applications on Integration Admin
-
Click Register at the upper-right corner of the page to register your application details. Registration page appears.
Register the application
It is mandatory to fill up all the fields in this page.
Application Name: Enter your application name. It is not mandatory to use the same application name, it can be any valid name.
URL: If you know the exact URL where the application is hosted, you can mention it. If you are not aware, then you can mention your company URL. Valid URL name is mandatory in this field.
Redirect Domains: Enter the domain name of the application where you want the Learning Manager application to redirect after OAuth authentication. You can mention multiple URLs here but you have to use the valid URLs such as
http://google.com
,http://yahoo.com
and so on.Description: Enter the brief description for your application.
Scopes: Choose one of the four available options to define the scope of your application. Based on your choice mentioned here, Learning Manager API endpoint are accessible for your application. For example, If you chose Learner role read access, then all the Learning Manager learner API end points are read-only accessible to your application.
For this account only?
Yes - if you choose Yes, then the application is not visible to other account administrators.
No - if you choose No, other account admins can also access this application but they need to use the application id to access this application. Application id is generated and displayed in Learning Manager application Edit mode.If you choose Admin role read and write access as scope while registering the application and choose Admin role read access while authoring the APIs, you can still have write access for the application as the app registration scope supersedes the authorization workflow.
-
Click Register at the upper-right corner after filling up the details in the registration page.
Application development and testing :headding-anchor:applicationdevelopmentandtesting
The Learning Manager API can be used by developers to build any application. Developers have to ensure that their accounts consist of some valid users and courses. They can create a few dummy users and courses and simulate activity in the trial account, so that they can test functionality of the application.
Application deployment :headding-anchor:applicationdeployment
We recommend that the Learning Manager Administrator or an Integration Administrator for the production account, to take ownership of making the application available to users within their organization. Once the application has been tested and is considered ready for production, inform the administrator of the production account. Ideally, the administrators want to generate a new client-id and client-secret for the application in the production account, and perform the necessary steps to incorporate them inside the application in a secure manner. The actual procedure for deploying applications varies from enterprise to enterprise, and the Learning Manager Administrator of your organization has to take support from the IT/IS department within your organization to complete the deployment.
External application approval :headding-anchor:externalapplicationapproval
You can add external applications by clicking Approve at the upper-right corner of the Applications page. Provide the external application id and click Save.
Add and approve an external application