jump

API for Exam Scores and Reports

OnlineExamMaker enables users get exam scores, exam status, students answers and other information via API.

Note: OnlineExamMaker API is only available for Premium users, if you want to request data from OnlineExamMaker API, please upgrade your account to Premium member.

1. Get exam score of a single candidate or all candidates

Get exam score of a single candidate or all candidates:

GET https://api.onlineexammaker.com/api/v1/student/queryresults

Parameter:

code=authorization code&time=current timestamp&eid=exam id&loginValues=exam verification information&start=0&limit=30

Parameter description:

  • code: Verification code is unique to each OnlineExamMaker account, Premium users can get it in "System Settings" -> "API & SSO Settings" in OnlineExamMaker dashoboard. (Related tutorial: How to get verification code for API?)
  • time: Current timestamp, for example: 1638768935.
  • start: Paging parameter.
  • limit: The quantity of queries. The maximum number of queries is 100.
  • loginValues: If you need to query the test records of a single candidate, you must use it with eid.
  • eid: If you need to query the test records of a single candidate, you need to use it with loginValues.

  • Authorization: Please put Token in the request header, you can view the sample code for details. In simple terms: we concatenate the current timestamp and your code, and encrypt them with MD5.

If the operation is successful, the return value is:

{
    "data":[
        {
            "viewResult":"https://api.onlineexammaker.com/transgetresult?tid=xxx\u0026token=xxx", //Test paper details link, the symbol '&' should be replaced with '\u0026'
            "score":"2",//Score
            "passed":"0",//Pass the exam or not
            "status":"1",
            "startTime":"1639647217",//Exam start tiem
            "endTime":"1639647236",//Exam end tiem
            "sid":"170597",
            "loginValue":"n11",//login field
            "name":"n11",//candidate name
            "eid":"107264"//exam id
        },
        {
            "viewResult":"https://api.onlineexammaker.com/transgetresult?tid=xxx\u0026token=xxx",
            "score":"1",
            "passed":"0",
            "status":"1",
            "startTime":"1639647122",
            "endTime":"1639647132",
            "sid":"170597",
            "loginValue":"n11",
            "name":"n11",
            "eid":"107264"
        }
    ],
    "status":"ok",
    "total":1877
}

If the operation fails, the return value is:


Interface usage examples:

package main

import (
    "crypto/md5"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "strconv"
    "time"
)

const (
    Code = "xxx"
)

func main() {
    host := "https://api.onlineexammaker.com"
    resource := "/api/v1/student/queryresults"

    client := &http.Client{}
    fullPath := host + resource

    req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
    time64 := time.Now().UTC().Unix()
    ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
    req.Header.Set("Authorization", ParseToken)

    q := req.URL.Query()
    q.Add("code", Code)
    q.Add("time", strconv.Itoa(int(time64)))

    q.Add("start", "0")
    q.Add("limit", "2")
    //   ↑↑Get all candidates' exam data↑↑

    // ↓↓Get the exam taken record of a single candidate↓↓
    // q.Add("loginValues", "n11")
    // q.Add("eid", "107264")

    q.Add("time", strconv.Itoa(int(time64)))

    req.URL.RawQuery = q.Encode()

    resp, err := client.Do(req)
    if err != nil {
        log.Println(err)
        return
    }

    defer resp.Body.Close()

    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println(err)
        return
    }

    // fmt.Println(string(b))
    f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
    f.Write(b)
}

2. Get the list of exams

Get the list of exams

GET https://api.onlineexammaker.com/api/v1/student/getexams

Parameter:

code=authorization code&time=current timestamp&sid=student id&gid=candidate id&catid=exam category id&keyword=search keyword&userId=user id&start=0&limit=30

Parameter description:

  • code: Verification code is unique to each OnlineExamMaker account, Premium users can get it in "System Settings" -> "API & SSO Settings" in OnlineExamMaker dashoboard. (Related tutorial: How to get verification code for API?)
  • time: Current timestamp, for example: 1638768935.
  • start: Paging parameter.
  • limit: The quantity of queries. The maximum number of queries is 100.
  • sid: Candidate id.
  • gid: Candidate group id.
  • keyword: Exam title keyword.
  • userId: User id.

If the operation is successful, the return value is:

{
    "data": [
        {
            "title": "Online English Vocabulary Test on OnlineExamMaker.com",
            "description": "How many words do you know? Get an estimate in minutes with this simple test.",
            "status": "Permanent",
            "attempts": "Unlimited",
            "available": 1,
            "eid": "3504",
            "category": "Lauguage Learning",
            "stuTimes": 0,
            "totalTimes": 0,
            "createTime": "1691473157",
            "img": "https://fs.onlineexammaker.com/papercover/company/company_1.png",
            "url": "http://10.0.50.159:9874/doexam/aWoeKL89V5.html",
            "total_score": 1,
            "pass_score": 0.6,
            "starttime": 1691473140,
            "endtime": 1691473140
        },
        {
            "title": "English Grammar Level Test on OnlineExamMaker.com",
            "description": "Take our free English grammar level test and find your English level. ",
            "status": "Permanent",
            "attempts": "Unlimited",
            "available": 1,
            "eid": "3503",
            "category": "Lauguage Learning",
            "stuTimes": 0,
            "totalTimes": 1,
            "createTime": "1688708778",
            "img": "https://fs.onlineexammaker.com/papercover/teacher/teacher_4.png",
            "url": "http://10.0.50.159:9874/doexam/EDobq5Lr78.html",
            "total_score": -5,
            "pass_score": -3,
            "starttime": 1688709240,
            "endtime": 1688709240
        }
    ],
    "status": "ok",
    "total": 3
}

If the operation fails, the return value is:


Interface usage examples:

package main

import (
    "crypto/md5"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "strconv"
    "time"
)

const (
    Code = "xxx"
)

func main() {
    host := "https://api.onlineexammaker.com"
    resource := "/api/v1/student/getexams"

    client := &http.Client{}
    fullPath := host + resource

    req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
    time64 := time.Now().UTC().Unix()
    ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
    req.Header.Set("Authorization", ParseToken)

    q := req.URL.Query()
    q.Add("code", Code)
    q.Add("time", strconv.Itoa(int(time64)))
    q.Add("sid", "1")
    q.Add("eid", "2")
    q.Add("gid", "3")
    q.Add("catid", "4")
    q.Add("keyword", "5")
    q.Add("userId", "6")
    q.Add("start", "0")
    q.Add("limit", "30")

    req.URL.RawQuery = q.Encode()

    resp, err := client.Do(req)
    if err != nil {
        log.Println(err)
        return
    }

    defer resp.Body.Close()

    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println(err)
        return
    }

    // fmt.Println(string(b))
    f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
    f.Write(b)
}