Introduction
The aim of this document is to describe how to use the services the Isograd system offers, either to LTI consumers or via the API.
Quick start
LTI
Connexion
Isograd plateform is compatible with both LTI 1.1 and LTI 1.3 protocols
LTI 1.1
Your system should include an area to define LTI providers. In this area, you must:
- Give a name to Isograd LTI Provider
- Specify your client key
- Specify your client secret Your client key and your client secret will be provided by Isograd upon request.
LTI 1.3
What we require from you
What we will provide to you
Environments
There are two environments, one for testing and the other for production:
- Testing: https://recette.isograd.com/public/lti.php
- Production : https://app.isograd.com/public/lti.php
Use a service
Most of the calls made to Isograd LTI Services require custom parameters to indicate what you want to achieve. Your system should include the possibility to add custom parameters in your LTI messages.
Example
To manually test your requests, you can use the LTI Emulation tool accessible here: https://saltire.lti.app/platform. Below is an example of such a test:
API
Connexion
The authentication is done via OAuth. To get a token, you need to make a POST request to the following URL:
https://auth.isograd.com/oauth2/token?grant_type=client_credentials&scopes=usage
This call must contain two fields: client_id
and client_secret
. The content of these fields must be the two values Isograd’s team provided you with once your account is created.
Environments
There are two environments, one for testing and the other for production:
- Testing: https://recette.isograd.com/api/usage
- Production : https://app.isograd.com/api/usage
Use a service
To use a service, make a POST request to the URL of the chosen environment. The header must contain the field Authorization: Bearer <your_token>
.
Example
Here is a Python script retrieving an access token, and using the service to create a candidate
import requests
# Retrieve the access token
credentials = {
'client_id': 's0u2c72bman19nm2c45oi1fpea',
'client_secret': '1mio0273po6si9tvt2f3ld5t6o4hsg02epq71rlfdhlkombkv8ro',
}
auth_url = 'https://auth.isograd.com/oauth2/token?grant_type=client_credentials&scopes=usage'
r_token = requests.post(auth_url, data=credentials)
access_token = r_token.json()['access_token']
# Use the service
headers = {'Authorization': 'Bearer ' + access_token}
url_dev = 'https://recette.isograd.com/api/usage'
payload = {
'act_id': 1,
'gen_id': 3,
'ema': 'test@isograd.com',
'fst_nam': 'John',
'lst_nam': 'Doe',
}
r_action = requests.post(url_dev, data=payload, headers=headers)
print(r_action.json())
The returned JSON object is like so:
{
'error_message': null,
'success': true,
'can_id': 1381134,
'lgn_url': 'https://recette.isograd.com/continuelogin/CandidateContinueLogin?param=UVR1WjgwRXBwU0'
}
Actions
All your actions must contain a parameter act_id
that contains the action you want to do: these actions and the parameters that must be sent are described in this section. For every parameter, there will be an indication of whether or not it is required:
- 🟩 Required parameter
- 🔷 API: Required parameter LTI: parameter already sent via the LTI protocol, do not include it in the additional parameters
- 🟠 Optional parameter
The answer will be a JSON object, containing a boolean success
: if true
, additional properties are sent depending on the action. If false
, an error_code
and an error_message
will be included. Here are the general error messages (additional codes specific to each actions are provided later in this document)
error_code | error_message |
---|---|
103 | The property act_id is not valid |
105 | Property “{name of property}” is requested |
Candidate and tests
Create a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 1 |
gen_id | 🟩 | 1: male, 2: female, 3: not provided |
ema | 🔷 | Candidate’s email address |
fst_nam | 🔷 | Candidate’s first name |
lst_nam | 🔷 | Candidate’s last name |
lan_id | 🟠 | Language code. See the appendix |
ext_id | 🟠 | Your internal id for the candidate. In LTI, the LTI UserID is stored if no ext_id is provided |
dep_id | 🟠 | The id of a Group within Isograd system to which the candidate should be added. Must be empty if a ext_dep_id value is provided |
ext_dep_id | 🟠 | The id of a group within your system to which the candidate should be added. If no group with this id exists, it will be automatically created |
psw | 🟠 | The candidate’s password. If not provided, the system will generate one randomly |
no_psw_rst | 🟠 | If set to 1 the password will be hashed, it will not be displayed in registration emails and the candidate will not have to change it upon first login |
job_id | 🟠 | The id of the candidate’s job profile |
xtr_tim_fac | 🟠 | Percentage factor defining the additional time granted to a candidate (e.g., 0 for no extra time, 50 for +50% time, 100 for +100% time, 200 for +200% time), applied to both total test duration and in-application question time |
The response is a JSON object containing the following properties:
can_id
: unique integer id of the created candidate on Isograd’s platformlgn_url
: a url that can be used by the candidate to login into the platform without entering any credentials. This url is only valid for 30 minutes
Errors
error_code | error_message |
---|---|
201 | The candidate could not be created (probably because one of the parameters is not valid) |
202 | There is already a candidate with this email on your account. In such case, the response includes a can_id property with the id of the corresponding candidate. |
203 | Couldn’t find the mentioned dep_id in the account and can’t create candidate |
Add a test to a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 2: do not add the test if the candidate has an unfinished test for this tst_frm_id . 9: Create the test even if the candidate has an unfinished test. |
tst_frm_id | 🟩 | The test identifier. To get the list, log into the Isograd’s platform and click on “Help” in the left menu. For compatibility reasons this parameter may be named rea_tst_id until 31/12/2025. |
ema | 🔷 | Candidate’s email address |
nee_ful_scr | 🟠 | 1: Require full screen for the test |
html | 🟠 | 1: The response will be an HTML <a> tag (with a class attribute isograd_start_test_button ) |
redirect | 🟠 | 1: The response will be a HTTP 302 status redirecting to the URL of the test start page |
ses_id | 🟠 | The session ID to which the test has to be associated |
add_pro | 🟠 | 1: add remote proctoring to the test. Additional cost will apply. |
max_num_tst | 🟠 | The maximum numbers of tests with this tst_frm_id the candidate is allowed to take |
max_num_tst_per | 🟠 | The maximum numbers of tests with this tst_frm_id the candidate is allowed to take every X day(s) |
rtn_pag | 🟠 | The URL of the page to which candidates will be redirected after submitting their feedback (or their results if they are allowed to see them) |
cal_bac_pag | 🟠 | A URL to which the plateform will submit a GET request when the test is complete(before displaying the feedbacks/results page) |
cpf_id | 🟠 | The ID of the “Compte Personnel de Formation” file associated to this test |
nb_test_by_credit | 🟠 | Use multi pack of credits (2,3,4) |
The response will be a JSON object (unless html
or redirect
are set to 1) containing the following properties:
tst_url
: the URL that will automatically start the specified testpla_tst_id
: integer ID of this test for this candidate in Isograd’s platform
Note: if the candidate has an unfinished test and act_id
is set to 2
, the response will contains the unfinished test’s details.
Errors
error_code | error_message |
---|---|
106 | This tst_frm_id is not allowed |
107 | This candidate does not exist |
301 | You have no more credits for this type of test |
402 | The candidate has already taken max_num_tst for this tst_frm_id |
💡 Note: Most systems connecting to the Isograd platform will set the optional
redirect
parameter to true as it allows to have the standard expected behaviour: the candidate clicks on a link in the LMS and the test starts automatically.
Create a candidate and take test
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 8 |
The system will perform successively the Create Candidate and Add a Test actions described above. Consequently, the return structure will be similar to Add a Test action and all the parameters required or optional in the Add Test and Create Candidate actions may be provided.
Add/remove online proctoring to a test
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 16: add online proctoring, 17: remove online proctoring |
pla_tst_id | 🟩 | ID of the test that was returned when the test was created |
The response will be a JSON object containing no specific property.
Errors
error_code | error_message |
---|---|
303 | You have no proctoring credit left |
Delete a test
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 23 |
pla_tst_id | 🟩 | ID of the test that was returned when the test was created |
The response will be a JSON object containing no specific property.
Errors
error_code | error_message |
---|---|
304 | The test is already started or does not exist |
Add a confirmation test to a completed test
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 58 |
pla_tst_id | 🟩 | ID of the test for which a confirmation test shoul be created (the test has to be already completed) |
redirect | 🟠 | If set to 1: The response will be a HTTP 302 status redirecting to the URL of the test start page |
The response will be a JSON object (unless redirect
is set to 1) containing the following properties:
tst_url
: the URL to start the confirmation test.
Update a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 51 |
can_id | 🟩 | ID of the candidate that was returned when the candidate was created |
gen_id | 🟠 | 1: male, 2: female, 3: not provided |
ema | 🟠 | Candidate’s email address |
fst_nam | 🟠 | Candidate’s first name |
lst_nam | 🟠 | Candidate’s last name |
lan_id | 🟠 | Language code. See the appendix |
Delete a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 24 |
can_id | 🟠 | ID of the candidate to be deleted, must be provided except if ema is provided |
ema | 🟠 | ema of the candidate to be deleted, must be provided except if can_id is provided |
The response will be a JSON object containing only a success property.
Emails
Send registration email
This action enables to send a registration email to the candidate immediately or in the future. A specific email sender may be provided.
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 42 |
pla_tst_ids | 🟠 | The pla_tst_ids of the tests for which the registration email will be sent. Please note that if you dont fill this field and the candidate is registered for multiple assessments, the email content will include all the pending tests to which the candidate is registered |
can_id | 🟠 | The can_id returned when the candidate was created |
mai_tem_id | 🟩 | The id of the mail template that you want to use (can be found in the URL while editing the template on the plateform) |
sen_dat | 🟠 | The date on which the email should be send, format should be YYYY-MM-DD |
for_sen | 🟠 | If the value is 1 and a sen_dat is provided and if it is today or in the past then send the email immediately |
ema_sen | 🟠 | An approved email sender with a verified status |
A can_id or a pla_tst_id must be provided, if both are provided, the pla_tst_id will be used.
The response JSON only includes a success field
Results
Get PDF results
Parameter | Required | Value | |
---|---|---|---|
act_id | 🟩 | 6 | |
tst_frm_id | 🟩 | The test identifier. For compatibility reasons this parameter may be named rea_tst_id until 31/12/2025. | |
ema | 🔷 | Candidate’s email address | |
pla_tst_id | 🟠 | The ID that was returned when the test was created. If this parameter is not provided, the system will look for the last test taken. | |
lan_id | 🟠 | Language code used for the report. See the appendix | |
redirect | 🟠 | 1: if you wish to receive a HTTP 302 status redirecting you to the URL of the PDF report |
The response will be a JSON object (unless redirect
is set to 1) containing the following properties:
pdf_url
: the URL of the PDF report
Errors
error_code | error_message |
---|---|
106 | This value for tst_frm_id is not authorized |
107 | Candidate does not exist |
501 | Candidate has not taken this test |
502 | Test is not finished |
601 | Test must be an assessment |
Get results as a JSON
Parameter | Required | Value | |
---|---|---|---|
act_id | 🟩 | 4 | |
tst_frm_id | 🟩 | The test identifier. For compatibility reasons this parameter may be named rea_tst_id until 31/12/2025. | |
ema | 🔷 | Candidate’s email address | |
pla_tst_id | 🟠 | The ID that was returned when the test was created. If this parameter is not provided, the system will look for the last test taken. |
The response will be a JSON object containing the following properties:
gra_typ_id
: an integer representing the grade type (see the possible values below)num_val
: a number representing the numeric value of the grademax_val
: a number representing the maximum value corresponding to thegra_typ_id
txt_des
: a text description of the grade (e.g. “550/1000” or “Intermediate – 3/5”)no_sto_tim_spe
: the difference expressed in seconds between the start time and the end time of the test. (This time may not correspond to the time spent by the candidate on the test as he or she may have the option in some cases to stop the test and restart it later).
The potential values for gra_typ_id
are:
Value | Description |
---|---|
1 | Level on a 1 to 5 scale |
2 | Score on 1000 computed through Item Response Theory |
3 | Score on 1000 computed by averaging scores on each question |
4 | Number of correct answers |
5 | Range of score 1-350, 350-700, 700-1000 computed using IRT |
15 | Score on 100 computed by averaging scores on each question |
Get results details as a JSON
Parameter | Required | Value | |
---|---|---|---|
act_id | 🟩 | 5 | |
tst_frm_id | 🟩 | The test identifier. For compatibility reasons this parameter may be named rea_tst_id until 31/12/2025. | |
ema | 🔷 | Candidate’s email address | |
pla_tst_id | 🟠 | The ID that was returned when the test was created. If this parameter is not provided, the system will look for the last test taken. | |
des_lan_id | 🟠 | Language code used for the details. See the appendix |
The response will be a JSON object containing the following properties:
des_lan_id
: the language used the result details. If no description is available in the requested language, English will be used by default.result_details
: an array where the keys are the skill IDs and values are an array composed of values whose keys are:des
: skill description- (for tests based on IRT)
level
: Decimal number representing the level obtained by the candidate. A value of -1 means the candidate has not been tested on this skill. - (for tests based on IRT)
level_des
: Brief text description of the candidate’s skills at this level. - (for tests based on IRT)
scalemin
: Minimum value of level - (for tests based on IRT)
scalemax
: Maximum value of level - (for tests NOT based on IRT)
successrate
: Success rate on questions belonging this skill. This is a decimal value equal to -1 or between 0 and 1. A value of -1 means the candidate has not been tested on this skill.
Get test status
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 10 |
pla_tst_id | 🟩 | The ID that was returned when the test was created |
The response will be a JSON object containing the following properties:
sta_id
: an integer representing the status of the test:- 1: not started
- 2: started
- 3: completed
- 4: marking pending (for tests that include manual marking)
Errors
error_code | error_message |
---|---|
501 | This pla_tst_id does not exist |
Administration
Create a session
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 11 |
des | 🟩 | Description of the session |
sta_dat | 🟩 | Starting date of the session (format YYYY-MM-DD hh:mm) |
end_dat | 🟩 | End date of the session (format YYYY-MM-DD hh:mm) |
psw | 🟠 | Password of the session |
The response will be a JSON object containing the following properties:
ses_id
: An integer representing the unique ID of the session
Anonymize a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 12 |
ema | 🟩 | The email of the candidate |
Their first name, last name and email address will be replaced by numbers in Isograd’s database. This also affects their diploma(s).
The response will be a JSON object containing no specific property.
Log-in as an administrator
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 13 |
use_ema_for_adm | 🟠 | 1: if you want want to login as a specific administrator. If not set, the system will pick a random administrator |
ema | 🟠 | The admin email if use_ema_for_adm is set to 1 |
⚠️ Be very careful not to provide access to this request to candidates as they would access your account on the platform and would be able to create candidates, see results, add tests, etc.
⚠️ This method, like all others, includes an optional
sub_com_id
parameter for customers who use sub accounts. If the parametersub_com_id
is not provided, the sub account administrator will be logged as a master account administrator which could raise serious data confidentiality issue.
The response will be a HTTP redirection to the Admin module
Log-in as a candidate
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 38 |
ema | 🔷 | Candidate email |
The response will be a HTTP redirection to the candidate’s account page, where they can access their:
- Tests to take
- Diplomas
- Assessment reports
- Questions and correct answers for assessment tests.
Get available tests list
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 14 |
lan_id | 🟠 | Code of the candidate’s language. See the appendix |
The response will be a JSON object containing the following properties:
tests
: An array of the IDs of the allowed tests.
Get available credits
Parameter | Required | Value |
---|---|---|
act_id | 🟩 | 15 |
The response will be a JSON object containing the following properties:
credits
: an array of that contains for each type of credits the following properties:des
: credit type descriptionamount
: credit amount
Appendices
Language codes
The following values must be used to specify languages:
- 1: French
- 2: English
- 3: German
- 4: Dutch
- 5: Spanish
- 6: Italian
- 7: Greek
- 8: Arabic
Distributor accounts
Distributor accounts can perform actions on sub accounts that belong to them using the credentials of the distributor account. In such case an additional parameter sub_com_id
can be added to the request to specify on which sub account the action should be performed.
This integer sub_com_id
can be added to all actions described in the section Action.
LTI - Grades via Basic Outcome Service
Isograd LTI provider service can return grades through the LTI 1.1 Basic Outcome Service. This allows your system to receive the grade of the candidate automatically at the end of the test. If you wish to receive the grade through Basic Outcome Service, please contact Isograd support to request its activation on your account.
LTI Basic Outcome Service only allows a grade as a decimal number between 0 and 1. The different grade types are converted into a decimal number between 0 and 1 according to the below rules:
- LEVEL_GRADE_TYPE = 1, the level divided by 10
- SCORE_GRADE_TYPE = 2, the score divided by 1000
- AVERAGE_GRADE_TYPE = 3, the score divided by 1000
- NUM_CORRECT_GRADE_TYPE = 4, the percentage of correct answers that is: number of correct answers / number of questions
- RANGE_GRADE_TYPE = 5, the middle value of the relevant range divided by 1000
- ON_100_AVERAGE_GRADE_TYPE = 15, the score divided by 1000 </div>