API Overview
📢 Important: For information on the SkillPanel API, take a look at the SkillPanel V3 API!
The REST API lets you interact with SkillCheck platform. You can use the API especially for:
- searching for an exam
- adding a candidate
- getting candidates list
- getting candidate details and results ## API Endpoint
All API URLs are relative to https://api.skillpanel.com/. For example, to get list of candidates you should
call /candidates endpoint at
https://api.skillpanel.com/candidates
API Key
Each request must contain an API Key passed as HTTP header: Devskiller-Api-Key. To get your personal API key, please navigate to the Settings -> Integrations menu in the SkillCheck administration panel, and acquire your key in the * API Access* section.
More details about acquiring the API Key can be found in our help https://help.skillpanel.com/space/TSG/2897543172/How+to+integrate+with+an+ATS
Content Type
This version of the API is using the HATEOAS approach based on the HAL - Hypertext Application Language standard.
Please ensure that you set Content-Type and Accept headers to the application/vnd.devskiller.v2.hal+json.
Rate Limits
Our API enforces rate limiting to ensure fair usage and stability of the service. The current rate limit configuration allows a maximum of 36 requests per 8-second period.
This means that if you make requests continuously, you are allowed to make a request approximately every 0.222 seconds. However, if you were to make 36 requests all at once, you would then need to wait 8 seconds before making the next request.
In case you exceed these limits, our API will return a 429 Too Many Requests HTTP status code.
Please design your application to adhere to these rate limits for optimal performance and to avoid service disruptions.
SkillCheck
Candidates & assessments
The Candidates resources is used manage the candidates.
Candidate object
This is an object representing the candidate.
Sample
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
Attributes
|
id
Type: String
Content: Standard
|
The candidate's id |
|
externalId
Type: String
Content: Standard
|
The candidate's external id |
|
email
Type: String
Content: Standard
|
The candidate's email address |
|
firstName
Type: String
Content: Standard
|
The candidate's first name |
|
lastName
Type: String
Content: Standard
|
The candidate's last name |
|
status
Type: String
Content: Standard
|
The candidate's status. Possible values: NEW, WAITING_FOR_ANSWERS, IN_EVALUATION, WAITING_FOR_DECISION, ACCEPTED, REJECTED, EXPIRED, CANCELED, ERROR |
|
tags
Type: Array
Content: Standard
|
The candidate's tags (array of strings) |
|
disableCommunication
Type: Boolean
Content: Standard
|
Should the outbound communication to the candidate be disabled |
|
assignedUser
Type: String
Content: Standard
|
Identifier of assigned user. Null if unassigned |
|
assignedTeam
Type: String
Content: Standard
|
Identifier of assigned team. Null if unassigned |
|
creationDate
Type: String
Content: Standard
|
Date when the candidate has been created |
|
customFields
Type: Object
Content: Standard
|
Custom fields associated with the candidate |
|
_embedded.assessments[]
Type: Array
Content: Extended
|
Collection of assessments: assessment object with standard content |
Links
|
self
|
Direct link to the candidate |
|
onlineReport
|
Link to the candidate report page |
|
pdfReport
|
Link to the candidate PDF report |
Creating a candidate
Request
POST /candidates HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false
}
$ curl 'https://api.skillpanel.com/candidates' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false
}'
$ echo '{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false
}' | http POST 'https://api.skillpanel.com/candidates' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 201 Created
Location: https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
POST /candidates
A POST request is used to create a new candidate.
Request Body:
|
email
Type: String
Required
|
The candidate's email address |
|
firstName
Type: String
Optional
|
The candidate's first name |
|
lastName
Type: String
Optional
|
The candidate's last name |
|
tags
Type: Array
Optional
|
The candidate's tags (array of strings) |
|
externalId
Type: String
Optional
|
Unique identifier of the candidate used in your system |
|
disableCommunication
Type: Boolean
Optional
|
Should the outbound communication to the candidate be disabled. Default: `false` |
Response Headers:
|
Location
|
URI of the created candidate |
Response Body:
The method returns the candidate object with standard content
Listing candidates
Request
GET /candidates?query=John&assignedUser=123&count=10&page=1&status=WAITING_FOR_ANSWERS&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/candidates?query=John&assignedUser=123&count=10&page=1&status=WAITING_FOR_ANSWERS&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/candidates?query=John&assignedUser=123&count=10&page=1&status=WAITING_FOR_ANSWERS&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"candidates" : [ {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
{
"_embedded" : {
"candidates" : [ {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
GET /candidates
A GET request will list all candidates.
Request parameters:
|
query
Optional
|
Search by name,email or token |
|
assignedUser
Optional
|
Identifies of the assigned user |
|
assignedTeam
Optional
|
Identifies of the assigned team |
|
status
Optional
|
Filter candidates by status. Add multiple status parameters to search for several statuses. |
|
tags
Optional
|
Filter candidates by tags. Add multiple tags parameters to search for several tags. |
|
startDate
Optional
|
Filter candidates by exam start date. |
|
count
Optional
|
Maximum number of candidates to get. Default: `10`, Max: `100` |
|
page
Optional
|
Number of the page to fetch, starting with `0`. Default: `0` |
Response Body:
|
page.number
Type: Number
Content: Standard
|
Number of the current page |
|
page.size
Type: Number
Content: Standard
|
Maximum number of elements for a page |
|
page.totalElements
Type: Number
Content: Standard
|
Total number of candidates matching criteria |
|
page.totalPages
Type: Number
Content: Standard
|
Total number of pages matching criteria |
|
_embedded.candidates
Type: Array
Content: Always
|
Arrays of candidates: candidate object with standard content |
Retrieving the candidate
Request
GET /candidates/1024138f-684f-4311-b539-774fd3ef3a9c HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
{
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
GET /candidates/{id}
A GET request will retrieve the details of a candidate
Response Body:
The method returns the candidate object with extended content
Deleting the candidate
Request
DELETE /candidates/2er4Hm3VwGW3J0lfwrvQYd HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
DELETE /candidates/{id}
A DELETE request will remove a candidate
Updating the candidate
Request
PATCH /candidates/2er4Hm3VwGW3J0lfwrvQYd HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"status": "ACCEPTED"
}
$ curl 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd' -i -X PATCH \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"status": "ACCEPTED"
}'
$ echo '{
"status": "ACCEPTED"
}' | http PATCH 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 202 Accepted
PATCH /candidates/{id}
A PATCH request is used for updating the candidate, e.g. accepting/rejecting or updating custom fields.
Request Body:
|
status
Type: String
Optional
|
The candidate's new status. Possible values: ACCEPTED,REJECTED |
|
customFields
Type: Object
Optional
|
Custom fields associated with the candidate. Values can be text or numeric, or null to remove the field |
Assessment object
Sample
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
Attributes
|
id
Type: String
Content: Standard
|
Assessment id |
|
status
Type: String
Content: Standard
|
Assessment status. Possible values: NEW, TOKEN_SENT, TOKEN_EXPIRED, TEST_STARTED, TEST_FINISHED, AUTO_ASSESSMENT_READY, ASSESSMENT_COMPLETED, ERROR, CANCELED |
|
token
Type: String
Content: Standard
|
Assessment token |
|
creationDate
Type: String
Content: Standard
|
Date when the assessment has been created |
|
startDate
Type: String
Content: Standard
|
Date when the candidates started the assessment |
|
finishDate
Type: String
Content: Standard
|
Date when the candidates finished the assessment |
|
expirationDate
Type: String
Content: Standard
|
Date when the assessment expires |
|
customFields
Type: Object
Content: Standard
|
Custom fields associated with the assessment |
|
timeTakenInSeconds
Type: Number
Content: Standard
|
Time in seconds spent by the candidate on the assessment |
|
timeLimitInSeconds
Type: Number
Content: Standard
|
Assessment time limit in seconds |
|
score.scoredPoints
Type: Number
Content: Standard
|
Scored points |
|
score.maxPoints
Type: Number
Content: Standard
|
Max points |
|
score.percentage
Type: Number
Content: Standard
|
Percentage result |
|
skills[].name
Type: String
Content: Extended
|
Name of the skill |
|
skills[].percentage
Type: Number
Content: Extended
|
Percentage result for the tasks related to the skill |
|
sections[].timeTakenInSeconds
Type: Number
Content: Extended
|
Time in seconds spent by the candidate in the section |
|
sections[].timeLimitInSeconds
Type: Number
Content: Extended
|
Time limit in seconds for the section |
|
sections[].score
Type: Object
Content: Extended
|
Score of the section with the structure same as the `score` of the assessment |
|
sections[].answers[].answerId
Type: String
Content: Extended
|
Id of the answer |
|
sections[].answers[].taskId
Type: String
Content: Extended
|
Id of the task |
|
sections[].answers[].title
Type: String
Content: Extended
|
Title of the task |
|
sections[].answers[].gitUrl
Type: String
Content: Extended
|
Link to git repository |
|
sections[].answers[].value
Type: Object
Content: Extended
|
Values entered by the candidate. Typically just one of the fields below will be filled |
|
sections[].answers[].value.text
Type: String
Content: Extended
|
Raw input, e.g. answer to essay or input |
|
sections[].answers[].value.choices
Type: Array
Content: Extended
|
All selected choices in multi-choice question |
|
sections[].answers[].value.gaps
Type: Array
Content: Extended
|
All entered value in code gap question |
|
sections[].answers[].value.comments
Type: Array
Content: Extended
|
All comments in code review question |
|
sections[].answers[].value.comments[].filename
Type: String
Content: Extended
|
Name of the file in which the comment was added |
|
sections[].answers[].value.comments[].rating
Type: String
Content: Extended
|
Rating of the comment. Possible values: UNRATED, ACCEPTED, REJECTED |
|
sections[].answers[].value.comments[].startLine
Type: Number
Content: Extended
|
First line of the code block selected for the comment |
|
sections[].answers[].value.comments[].endLine
Type: Number
Content: Extended
|
Last line of the code block selected for the comment |
|
sections[].answers[].value.comments[].text
Type: String
Content: Extended
|
Content of the comment |
|
sections[].answers[].type
Type: String
Content: Extended
|
Type of the task. Possible values: CHOICE, CODE_GAPS, CODE_REVIEW, DATABASE, DEVOPS, ESSAY, PROGRAMMING, TESTING |
|
sections[].answers[].difficulty
Type: String
Content: Extended
|
Difficulty of the task. Possible values: EASY, MEDIUM, HARD |
|
sections[].answers[].score
Type: Object
Content: Extended
|
Score of the section with the structure same as the `score` of the assessment |
|
_embedded.test.id
Type: String
Content: Extended
|
Test id |
|
_embedded.test.name
Type: String
Content: Extended
|
Test name |
|
_embedded.test._links.self.href
Type: String
Content: Extended
|
Link to the test |
Links
|
self
|
Direct link to the assessment |
|
candidateAccess
|
Link for the candidate to take the assessment |
|
onlineReport
|
Link to the assessment report page |
|
pdfReport
|
Link to the assessment PDF report |
|
candidateUrl
|
Link to candidate page |
Creating an assessment
Request
POST /candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate"
}
$ curl 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate"
}'
$ echo '{
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate"
}' | http POST 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 201 Created
Location: https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
POST /candidates/{candidateId}/assessments
A POST request is used to create an assessment. After successfully creating a candidate, an email with the invitation
will be send to the candidate.
Request Body:
|
testId
Type: String
Required
|
The id of the test |
|
validityInDays
Type: Number
Optional
|
Test validity in days |
|
note
Type: String
Optional
|
Note to include in the invitation email |
|
customFields
Type: Object
Optional
|
Custom fields associated with the assessment. Values can be text or numeric |
Response Headers:
|
Location
|
URI of the created assessment |
Response Body:
The method returns the assessment object with standard content
Retrieving the assessment
Request
GET /candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
GET /candidates/{id}/assessments/{assessmentId}
A GET request will retrieve the results for a candidate
Response Body:
The method returns the assessment object with extended content
Updating the assessment's custom fields
Request
PATCH /candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"customFields": {
"textField": "value",
"numericField": 0
}
}
$ curl 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d' -i -X PATCH \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"customFields": {
"textField": "value",
"numericField": 0
}
}'
$ echo '{
"customFields": {
"textField": "value",
"numericField": 0
}
}' | http PATCH 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
PATCH /candidates/{id}/assessments/{assessmentId}
A PATCH request is used for updating the assessment's custom fields.
Request Body:
|
customFields
Type: Object
Optional
|
Custom fields associated with the assessment. Values can be text or numeric, or null to remove the field |
Deleting the assessment
Request
DELETE /candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.skillpanel.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
DELETE /candidates/{id}/assessments/{assessmentId}
A DELETE request will remove an assessment
Grading assessment answers
Request
PUT /candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d/answers/b0c2e537-ab3d-4945-9238-e0fe9dffcfa5/score HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"scoredPoints": 5
}
$ curl 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d/answers/b0c2e537-ab3d-4945-9238-e0fe9dffcfa5/score' -i -X PUT \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"scoredPoints": 5
}'
$ echo '{
"scoredPoints": 5
}' | http PUT 'https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d/answers/b0c2e537-ab3d-4945-9238-e0fe9dffcfa5/score' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
PUT /candidates/{id}/assessments/{assessmentId}/answers/{answerId}/score
A PUT request will set the score for a given answer
Request Body:
|
scoredPoints
Type: Number
Required
|
New scored points value |
Invitations
You can work individually with candidates and assessment, but if you have a 1:1 candidate-assessment relation, you can prefer to work with invitations.
Creating an invitation
Request
POST /invitations HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false,
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate",
"testStartDate": "2021-10-19T13:05:00Z"
}
$ curl 'https://api.skillpanel.com/invitations' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false,
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate",
"testStartDate": "2021-10-19T13:05:00Z"
}'
$ echo '{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false,
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate",
"testStartDate": "2021-10-19T13:05:00Z"
}' | http POST 'https://api.skillpanel.com/invitations' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 201 Created
Location: https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "NEW",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : null,
"skills" : null,
"sections" : null,
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer"
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "NEW",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : null,
"skills" : null,
"sections" : null,
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer"
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
POST /invitations
A POST request is used to create an assessment. After successfully creating a candidate, an email with the invitation
will be send to the candidate.
Request Body:
|
email
Type: String
Required
|
The candidate's email address |
|
firstName
Type: String
Optional
|
The candidate's first name |
|
lastName
Type: String
Optional
|
The candidate's last name |
|
tags
Type: Array
Optional
|
The candidate's tags (array of strings) |
|
externalId
Type: String
Optional
|
Unique identifier of the candidate used in your system |
|
disableCommunication
Type: Boolean
Optional
|
Should the outbound communication to the candidate be disabled. Default: `false` |
|
testId
Type: String
Required
|
The unique identifier of the test |
|
validityInDays
Type: Number
Optional
|
Invitation validity in days |
|
note
Type: String
Optional
|
Additional note that should be included in the email to the candidate |
|
testStartDate
Type: String
Optional
|
The test can be accessed by candidate from date you set here |
|
customFields
Type: Object
Optional
|
Custom fields associated with the invitation. Values can be text or numeric |
Response Headers:
|
Location
|
URI of the created invitation |
Response Body:
The method returns two embedded objects:
Listing invitations
Request
GET /invitations?query=John&count=10&page=1&status=ASSESSMENT_COMPLETED&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/invitations?query=John&count=10&page=1&status=ASSESSMENT_COMPLETED&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/invitations?query=John&count=10&page=1&status=ASSESSMENT_COMPLETED&tags=Phoenix&tags=TeamLeader&startDate=2020-04-22' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"invitations" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
{
"_embedded" : {
"invitations" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "NEW",
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
GET /invitations
A GET request will list all invitations.
Request parameters:
|
query
Optional
|
Search by name,email or token |
|
status
Optional
|
Filter invitations by status. Add multiple status parameters to search for several statuses. |
|
tags
Optional
|
Filter invitations by tags. Add multiple tags parameters to search for several tags. |
|
startDate
Optional
|
Filter invitations by exam start date. |
|
count
Optional
|
Maximum number of invitations to get. Default: `10`, Max: `100` |
|
page
Optional
|
Number of the page to fetch, starting with `0`. Default: `0` |
Response Body:
The method returns list of two embedded objects:
Details of the invitation
Request
GET /invitations/5wxgYgs41BZoohKMdwrMKj HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/invitations/5wxgYgs41BZoohKMdwrMKj' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/invitations/5wxgYgs41BZoohKMdwrMKj' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "5wxgYgs41BZoohKMdwrMKj",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer"
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
}
}
{
"id" : "5wxgYgs41BZoohKMdwrMKj",
"_embedded" : {
"candidate" : {
"id" : "1024138f-684f-4311-b539-774fd3ef3a9c",
"firstName" : "John",
"lastName" : "Smith",
"email" : "john@smith.com",
"tags" : [ "Phoenix", "TeamLeader" ],
"disableCommunication" : false,
"externalId" : "553c8ceb",
"status" : "IN_EVALUATION",
"_embedded" : {
"assessments" : [ {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
} ]
},
"assignedUser" : "d493e6d3-6a6a-4cf2-8990-46366c75064f",
"assignedTeam" : "dc1087ed-97d5-43bc-ba31-5e8593fe3083",
"creationDate" : "2018-11-23T11:12:13Z",
"_links" : {
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 45,
"maxPoints" : 50,
"percentage" : 90
},
"skills" : [ {
"name" : "Java",
"percentage" : 90
}, {
"name" : "SQL",
"percentage" : 80
} ],
"sections" : [ {
"timeTakenInSeconds" : 480,
"timeLimitInSeconds" : 600,
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"answers" : [ {
"answerId" : "5jJb7A754Z2XTbUtnaynuQ",
"taskId" : "2tMX6eEu30TBTNGyFDdCx8",
"title" : "SQL Left joins",
"type" : "DATABASE",
"score" : {
"scoredPoints" : 20,
"maxPoints" : 20,
"percentage" : 100
},
"difficulty" : "EASY",
"gitUrl" : "https://git.devskiller.com/d2f17e98-90fa-44cb-ad3c-6ef70a193e72.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"answerId" : "79qsq1ghhYoqX3IIAsTJR4",
"taskId" : "3roXXLB3P9GGpB5wR4lYj9",
"title" : "Multithreading in Java",
"type" : "PROGRAMMING",
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"difficulty" : "MEDIUM",
"gitUrl" : "https://git.devskiller.com/6a670f01-8395-4027-a6f1-d112d62a9140.git",
"value" : {
"choices" : [ "Choice A", "Choice C" ],
"text" : "Entered query",
"gaps" : [ "public", "static", "void" ],
"comments" : [ {
"filename" : "Sample.java",
"rating" : "ACCEPTED",
"startLine" : 3,
"endLine" : 3,
"text" : "some comment"
} ]
}
} ]
} ],
"token" : "AAAA-AAAA-AAAA",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"expirationDate" : "2018-11-30T11:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer"
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.skillpanel.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.skillpanel.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://score.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
}
}
GET /invitations/{id}
A GET request will retrieve the details of an invitation
Response Body:
The method returns two embedded objects:
Deleting the invitation
Request
DELETE /invitations/5wxgYgs41BZoohKMdwrMKj HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/invitations/5wxgYgs41BZoohKMdwrMKj' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.skillpanel.com/invitations/5wxgYgs41BZoohKMdwrMKj' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
DELETE /invitations/{id}
A DELETE request will remove the invitation
Tasks
The Tasks resource is used to work with tasks
Upload a task archive
Request
PUT /tasks/cdeae232-3525-420c-95d3-30135086266f/zip HTTP/1.1
Content-Type: application/zip
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
[contents of the ZIP with source code]
$ curl 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f/zip' -i -X PUT \
-H 'Content-Type: application/zip' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '[contents of the ZIP with source code]'
$ echo '[contents of the ZIP with source code]' | http PUT 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f/zip' \
'Content-Type:application/zip' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"taskId" : "c45f63eb-d796-499e-b5bd-bd9fabc828d0"
}
{
"taskId" : "c45f63eb-d796-499e-b5bd-bd9fabc828d0"
}
PUT /tasks/{taskId}/zip
Endpoint is used to upload tasks based on source code archives, e.g. programming or devops.
{taskId} is the identifier of the preconfigured task. PUT /tasks/zip can be used instead if a code package contains metadata.yaml file.
Response Body:
|
taskId
Type: String
Content: Standard
|
Id of the task |
Response statuses:
202 |
The archive has been accepted. You can check the result of the build using Retrieve task details. |
422 |
Unable to process the ZIP file |
Import tasks from YAML
Request
PUT /tasks/yaml HTTP/1.1
Content-Type: application/yaml
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
yaml
$ curl 'https://api.skillpanel.com/tasks/yaml' -i -X PUT \
-H 'Content-Type: application/yaml' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d 'yaml'
$ echo 'yaml' | http PUT 'https://api.skillpanel.com/tasks/yaml' \
'Content-Type:application/yaml' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"created" : [ "554d4d4b-90ad-4227-ab89-368f1fee19b9", "609b8fdf-e584-4287-ae8a-2d3d8b7c2b64" ],
"updated" : [ "bcd591f2-822f-4c67-a7ed-85815d505888" ]
}
{
"created" : [ "554d4d4b-90ad-4227-ab89-368f1fee19b9", "609b8fdf-e584-4287-ae8a-2d3d8b7c2b64" ],
"updated" : [ "bcd591f2-822f-4c67-a7ed-85815d505888" ]
}
PUT /tasks/yaml
Endpoint is used to upload MCQ/CodeGaps/Essay tasks from the YAML file
Response Body:
|
created
Type: Array
Content: Standard
|
Ids of created tasks |
|
updated
Type: Array
Content: Standard
|
Ids of updated tasks |
Response statuses:
202 |
Import successful |
422 |
Unable to process the YAML file |
Retrieve task details
Request
GET /tasks/cdeae232-3525-420c-95d3-30135086266f HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f' -i -X GET \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"taskId" : "2caIjvVD7nf4ZtDARQgg5s",
"type" : "PROGRAMMING",
"title" : "Programming task sample",
"draft" : true,
"question" : "Create a calculator to add and subtract two different values",
"difficulty" : "EASY",
"tags" : [ "Java 17" ],
"duration" : "PT30M",
"points" : 10,
"projectType" : "MAVEN",
"projectTypeVersion" : "JAVA17",
"buildStatus" : "TEST_FAILURE",
"buildLog" : "Sample build log...",
"candidateTests" : {
"CalculatorTest" : {
"shouldSubtractTwoNumbers" : "FAIL",
"shouldAddTwoNumbers" : "FAIL"
}
},
"verificationTests" : {
"verify_pack.RandomNumbersTest" : {
"shouldSubtractTwoNumbers" : "FAIL",
"shouldAddTwoNumbers" : "FAIL"
}
}
}
{
"taskId" : "2caIjvVD7nf4ZtDARQgg5s",
"type" : "PROGRAMMING",
"title" : "Programming task sample",
"draft" : true,
"question" : "Create a calculator to add and subtract two different values",
"difficulty" : "EASY",
"tags" : [ "Java 17" ],
"duration" : "PT30M",
"points" : 10,
"projectType" : "MAVEN",
"projectTypeVersion" : "JAVA17",
"buildStatus" : "TEST_FAILURE",
"buildLog" : "Sample build log...",
"candidateTests" : {
"CalculatorTest" : {
"shouldSubtractTwoNumbers" : "FAIL",
"shouldAddTwoNumbers" : "FAIL"
}
},
"verificationTests" : {
"verify_pack.RandomNumbersTest" : {
"shouldSubtractTwoNumbers" : "FAIL",
"shouldAddTwoNumbers" : "FAIL"
}
}
}
GET /tasks/{taskId}
Response Body:
|
taskId
Type: String
Content: Standard
|
Id of the task |
|
type
Type: String
Content: Standard
|
Type of the task, e.g.: PROGRAMMING, DEVOPS |
|
title
Type: String
Content: Standard
|
Title of the task |
|
draft
Type: Boolean
Content: Standard
|
Whether the task contains unpublished changes |
|
question
Type: String
Content: Standard
|
Question of the task |
|
difficulty
Type: String
Content: Standard
|
Difficulty of the task. Possible values: EASY, MEDIUM, HARD |
|
points
Type: Number
Content: Standard
|
Suggested points for the task |
|
projectType
Type: String
Content: Standard
|
Type of the project, e.g. GOLANG, NODEJS |
|
projectTypeVersion
Type: String
Content: Standard
|
Specific version of the project type, e.g.: JAVA17, NODEJS18 |
|
tags
Type: Array
Content: Standard
|
Tags of the task |
|
duration
Type: String
Content: Standard
|
Duration of the task |
|
buildStatus
Type: String
Content: Standard
|
Build status of the task, possible values: SUCCESS, FAILURE, TEST_FAILURE, INTERNAL_ERROR, TIMEOUT. Null if the build is not finished. |
|
buildLog
Type: String
Content: Standard
|
Build log of the task |
|
candidateTests
Type: Object
Content: Standard
|
Results of candidate tests |
|
verificationTests
Type: Object
Content: Standard
|
Results of verification tests |
Publish a draft task
Request
POST /tasks/cdeae232-3525-420c-95d3-30135086266f/publish HTTP/1.1
Content-Type: application/zip
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
zip
$ curl 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f/publish' -i -X POST \
-H 'Content-Type: application/zip' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d 'zip'
$ echo 'zip' | http POST 'https://api.skillpanel.com/tasks/cdeae232-3525-420c-95d3-30135086266f/publish' \
'Content-Type:application/zip' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 204 No Content
POST /tasks/{taskId}/publish
Tests
The Tests resources is used to list test
List tests
Request
GET /tests?query=Java&count=10&page=1 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/tests?query=Java&count=10&page=1' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/tests?query=Java&count=10&page=1' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"tests" : [ {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
{
"_embedded" : {
"tests" : [ {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
GET /tests
A GET request will list all tests.
Request parameters:
|
query
Optional
|
Filter tests by query |
|
count
Optional
|
Maximum number of tests to get. Default: `10`, Max: `100` |
|
page
Optional
|
Number of the page to fetch, starting with `0`. Default: `0` |
Response Body:
|
page.number
Type: Number
Content: Standard
|
Number of the current page |
|
page.size
Type: Number
Content: Standard
|
Maximum number of elements for a page |
|
page.totalElements
Type: Number
Content: Standard
|
Total number of candidates matching criteria |
|
page.totalPages
Type: Number
Content: Standard
|
Total number of pages matching criteria |
|
_embedded.tests
Type: Array
Content: Standard
|
Arrays of tests |
|
_embedded.tests[].id
Type: String
Content: Standard
|
Test id |
|
_embedded.tests[].name
Type: String
Content: Standard
|
Test name |
|
_embedded.tests[].skills
Type: Array
Content: Standard
|
List of skills verified in the test |
|
_embedded.tests[].durationInMinutes
Type: Number
Content: Standard
|
Test duration in minutes |
|
_embedded.tests[].customFields
Type: Object
Content: Standard
|
Custom fields associated with the test |
Details of the test
Request
GET /tests/d2d55c15-cb0e-4328-8699-ad957ba239c5 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
GET /tests/{id}
A GET request will retrieve the details of an test
Response Body:
|
id
Type: String
Content: Standard
|
Test id |
|
name
Type: String
Content: Standard
|
Test name |
|
skills
Type: Array
Content: Standard
|
List of skills verified in the test |
|
durationInMinutes
Type: Number
Content: Standard
|
Test duration in minutes |
|
customFields
Type: Object
Content: Standard
|
Custom fields associated with the test |
Updating the test's custom fields
Request
PATCH /tests/d2d55c15-cb0e-4328-8699-ad957ba239c5 HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"customFields": {
"textField": "value",
"numericField": 0
}
}
$ curl 'https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5' -i -X PATCH \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"customFields": {
"textField": "value",
"numericField": 0
}
}'
$ echo '{
"customFields": {
"textField": "value",
"numericField": 0
}
}' | http PATCH 'https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
PATCH /tests/{id}
A PATCH request is used for updating the test's custom fields.
Request Body:
|
customFields
Type: Object
Optional
|
Custom fields associated with the test. Values can be text or numeric, or null to remove the field |
Creating a test using a predefined test
Request
POST /tests HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{
"predefinedTestId": "4pMQiiqQ7o5XfM2MekmEiq"
}
$ curl 'https://api.skillpanel.com/tests' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{
"predefinedTestId": "4pMQiiqQ7o5XfM2MekmEiq"
}'
$ echo '{
"predefinedTestId": "4pMQiiqQ7o5XfM2MekmEiq"
}' | http POST 'https://api.skillpanel.com/tests' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 201 Created
Location: https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"skills" : [ "Java", "SQL" ],
"durationInMinutes" : 60,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
POST /tests
A POST request is used to create a test.
Request Body:
|
predefinedTestId
Type: String
Required if there are no generatorCriteria
|
The id of the predefined tests which should be used as the template for the new test |
Response Headers:
|
Location
|
URI of the created test |
Creating a test using generator
Request
POST /tests HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json;charset=UTF-8
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{
"generatorCriteria": {
"skills": [
"Java"
],
"difficulties": [
"EASY",
"MEDIUM",
"HARD"
],
"taskTypes": [
"MULTI_CHOICE",
"PROGRAMMING",
"SQL",
"DEVOPS"
]
}
}
$ curl 'https://api.skillpanel.com/tests' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json;charset=UTF-8' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{
"generatorCriteria": {
"skills": [
"Java"
],
"difficulties": [
"EASY",
"MEDIUM",
"HARD"
],
"taskTypes": [
"MULTI_CHOICE",
"PROGRAMMING",
"SQL",
"DEVOPS"
]
}
}'
$ echo '{
"generatorCriteria": {
"skills": [
"Java"
],
"difficulties": [
"EASY",
"MEDIUM",
"HARD"
],
"taskTypes": [
"MULTI_CHOICE",
"PROGRAMMING",
"SQL",
"DEVOPS"
]
}
}' | http POST 'https://api.skillpanel.com/tests' \
'Content-Type:application/vnd.devskiller.v2.hal+json;charset=UTF-8' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 201 Created
Location: https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Middle Java",
"skills" : [ "Java" ],
"durationInMinutes" : 40,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
{
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Middle Java",
"skills" : [ "Java" ],
"durationInMinutes" : 40,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
POST /tests
A POST request is used to create a test.
Request Body:
|
generatorCriteria
Type: Object
Required if predefinedTestId is not specified
|
The criteria that will be used to generate a new test by randomly choosing tasks matching criteria |
|
generatorCriteria.skills
Type: Array
Required
|
The list of skills that should be tested by a generated test |
|
generatorCriteria.difficulties
Type: Array
Optional
|
The list of allowed difficulties (possible values: EASY, MEDIUM, HARD) |
|
generatorCriteria.taskTypes
Type: Array
Optional
|
The list of allowed task types (possible values: MULTI_CHOICE,ESSAY,PROGRAMMING,CODE_REVIEW,SQL,DEVOPS,CODE_GAPS,TESTING) |
Response Headers:
|
Location
|
URI of the created test |
Details of the test
Request
GET /tests/d2d55c15-cb0e-4328-8699-ad957ba239c5 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
Predefined Tests
The Predefined Tests resources is used to list predefined test
List predefined tests
Request
GET /predefined-tests?query=implement&skills=Java&skills=SQL&seniorityLevels=JUNIOR&seniorityLevels=MIDDLE&count=10&page=1 HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/predefined-tests?query=implement&skills=Java&skills=SQL&seniorityLevels=JUNIOR&seniorityLevels=MIDDLE&count=10&page=1' -i -X GET \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http GET 'https://api.skillpanel.com/predefined-tests?query=implement&skills=Java&skills=SQL&seniorityLevels=JUNIOR&seniorityLevels=MIDDLE&count=10&page=1' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"predefinedTests" : [ {
"id" : "f3f7c764-992e-497a-9b3c-6b9d13a80356",
"name" : "Senior Java Developer",
"seniorityLevel" : "SENIOR",
"skills" : [ "Java" ],
"durationInMinutes" : 30,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/predefined-tests/f3f7c764-992e-497a-9b3c-6b9d13a80356"
}
},
"description" : "Test for senior java developer"
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
{
"_embedded" : {
"predefinedTests" : [ {
"id" : "f3f7c764-992e-497a-9b3c-6b9d13a80356",
"name" : "Senior Java Developer",
"seniorityLevel" : "SENIOR",
"skills" : [ "Java" ],
"durationInMinutes" : 30,
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/predefined-tests/f3f7c764-992e-497a-9b3c-6b9d13a80356"
}
},
"description" : "Test for senior java developer"
} ]
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 1
}
}
GET /predefinedTests
A GET request will list all predefined tests.
Request parameters:
|
query
Optional
|
Search by name, description or skills |
|
skills
Optional
|
Filter tests by skills. Add multiple skills parameters to search for several skills. |
|
seniorityLevels
Optional
|
Filter tests by seniority level. Add multiple parameters to search for several seniority levels. Valid values: JUNIOR, MIDDLE, SENIOR |
|
count
Optional
|
Maximum number of tests to get. Default: `10`, Max: `100` |
|
page
Optional
|
Number of the page to fetch, starting with `0`. Default: `0` |
Response Body:
|
page.number
Type: Number
Content: Standard
|
Number of the current page |
|
page.size
Type: Number
Content: Standard
|
Maximum number of elements for a page |
|
page.totalElements
Type: Number
Content: Standard
|
Total number of candidates matching criteria |
|
page.totalPages
Type: Number
Content: Standard
|
Total number of pages matching criteria |
|
_embedded.predefinedTests
Type: Array
Content: Standard
|
Arrays of tests |
|
_embedded.predefinedTests[].id
Type: String
Content: Standard
|
Predefined test id |
|
_embedded.predefinedTests[].name
Type: String
Content: Standard
|
Predefined test name |
|
_embedded.predefinedTests[].description
Type: String
Content: Standard
|
Predefined test description |
|
_embedded.predefinedTests[].durationInMinutes
Type: Number
Content: Standard
|
Predefined test duration (in minutes) |
|
_embedded.predefinedTests[].skills
Type: Array
Content: Standard
|
List of skills verified in the test |
|
_embedded.predefinedTests[].seniorityLevel
Type: String
Content: Standard
|
Predefined test seniority level (JUNIOR, MIDDLE or SENIOR) |
Webhooks
Webhooks are inverted API endpoints which allows you to receive push notifications from SkillCheck.
To receive SkillCheck's push notifications you have to register your webhook endpoint address in the administration panel. You will also find here the webhook secret which is used to secure all requests sent by SkillCheck. The secret is always passed in the "Devskiller-Hook-Secret" header. You can also register your endpoint using the API.
Receive push notification
Request
POST /devskillerWebhooks/ HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Hook-Secret: TEST-SECRET
User-Agent: Devskiller
Host: api.yourdomain.com
[
{
"candidateId": "1024138f-684f-4311-b539-774fd3ef3a9c",
"candidateExternalId": "553c8ceb",
"assessmentId": "90224982-2017-4098-bfc8-48f7b60ec01d",
"candidateEmail": "test@email.com",
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"examName": "Senior Java Developer",
"event": "ASSESSMENT_COMPLETED",
"_links": {
"candidate": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
]
$ curl 'https://api.yourdomain.com/devskillerWebhooks/' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Hook-Secret: TEST-SECRET' \
-H 'User-Agent: Devskiller' \
-d '[
{
"candidateId": "1024138f-684f-4311-b539-774fd3ef3a9c",
"candidateExternalId": "553c8ceb",
"assessmentId": "90224982-2017-4098-bfc8-48f7b60ec01d",
"candidateEmail": "test@email.com",
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"examName": "Senior Java Developer",
"event": "ASSESSMENT_COMPLETED",
"_links": {
"candidate": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
]'
$ echo '[
{
"candidateId": "1024138f-684f-4311-b539-774fd3ef3a9c",
"candidateExternalId": "553c8ceb",
"assessmentId": "90224982-2017-4098-bfc8-48f7b60ec01d",
"candidateEmail": "test@email.com",
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"examName": "Senior Java Developer",
"event": "ASSESSMENT_COMPLETED",
"_links": {
"candidate": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.skillpanel.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.skillpanel.com/invitations/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
]' | http POST 'https://api.yourdomain.com/devskillerWebhooks/' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Hook-Secret:TEST-SECRET' \
'User-Agent:Devskiller'
POST https://your_endpoint_address_here
A POST request will push events to your endpoint.
If your endpoint responded 4xx or 5xx SkillCheck will retry the request with a given schedule:
- after 3 seconds
- after 15 seconds
- after 1 minute
- after 5 minutes
- after 30 minutes
- after 150 minutes
Request headers
| Name | Description |
|---|---|
Devskiller-Hook-Secret |
The webhook secret key |
Request Body:
|
[]
Type: Array
Always
|
Array of the events |
|
[].candidateId
Type: String
Always
|
The candidate's id |
|
[].candidateExternalId
Type: String
If used
|
The candidate's external id |
|
[].assessmentId
Type: String
If used
|
The assessment id |
|
[].candidateEmail
Type: String
Always
|
The candidate's email |
|
[].testId
Type: String
Always
|
The id of the test |
|
[].examName
Type: String
Always
|
The name of the exam |
|
[].event
Type: String
Always
|
Event type status. Possible values: WAITING_FOR_ASSESSMENT, ASSESSMENT_STARTED, ASSESSMENT_COMPLETED, ASSESSMENT_EXPIRED, ERROR |
|
[]._links.candidate.href
Type: String
Always
|
Link to the candidate |
|
[]._links.assessment.href
Type: String
Always
|
Link to the assessment |
|
[]._links.invitation.href
Type: String
Always
|
Link to the invitation |
Creating a webhook
Request
POST /webhook HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
{"hookUrl":"https://api.yourdomain.com/devskillerWebhooks"}
$ curl 'https://api.skillpanel.com/webhook' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-d '{"hookUrl":"https://api.yourdomain.com/devskillerWebhooks"}'
$ echo '{"hookUrl":"https://api.yourdomain.com/devskillerWebhooks"}' | http POST 'https://api.skillpanel.com/webhook' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 202 Accepted
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "dd41ac47-5be2-429f-a730-0e8c86908aae",
"url" : "https://api.yourdomain.com/devskillerWebhooks",
"secret" : "RgKLnbVsTJrGxPYw",
"apiVersion" : "V2"
}
{
"id" : "dd41ac47-5be2-429f-a730-0e8c86908aae",
"url" : "https://api.yourdomain.com/devskillerWebhooks",
"secret" : "RgKLnbVsTJrGxPYw",
"apiVersion" : "V2"
}
POST /webhook
A POST request is used to create a webhook.
Request Body:
|
hookUrl
Type: String
Required
|
The URL of your endpoint, that we will call |
Response Body:
|
id
Type: String
Content: Standard
|
The webhook id |
|
url
Type: String
Content: Standard
|
The webhook URL |
|
secret
Type: String
Content: Standard
|
The webhook secret key, that we will pass along when calling your endpoint |
|
apiVersion
Type: String
Content: Standard
|
The API version this webhook is using |
Deleting the webhook
Request
DELETE /webhook/dd41ac47-5be2-429f-a730-0e8c86908aae HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Accept: application/vnd.devskiller.v2.hal+json
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/webhook/dd41ac47-5be2-429f-a730-0e8c86908aae' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-H 'Accept: application/vnd.devskiller.v2.hal+json'
$ http DELETE 'https://api.skillpanel.com/webhook/dd41ac47-5be2-429f-a730-0e8c86908aae' \
'Devskiller-Api-Key:TEST-API-KEY' \
'Accept:application/vnd.devskiller.v2.hal+json'
Response
HTTP/1.1 204 No Content
DELETE /webhook/{id}
A DELETE request will remove the webhook.
SkillPanel
People
Listing people
Request
GET /boost/people?email=john.smith%40skillpanel.com&customId=18382 HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/people?email=john.smith%40skillpanel.com&customId=18382' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/people?email=john.smith%40skillpanel.com&customId=18382' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"people" : [ {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith",
"customId" : "18382",
"jobPositionId" : "5ixodYgXVkm4Yc09mzGvvR",
"teams" : [ "5Ejeb396erN8ALn4R3T3OV", "2tnS87nbomps1GBWHqN2Wg" ],
"onboarding" : {
"status" : "COMPLETED",
"finishedAt" : "2023-10-13T09:48:56.766188Z"
}
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/people?email=john.smith%40skillpanel.com&customId=18382"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/people?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&email=john.smith%40skillpanel.com&customId=18382"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
{
"_embedded" : {
"people" : [ {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith",
"customId" : "18382",
"jobPositionId" : "5ixodYgXVkm4Yc09mzGvvR",
"teams" : [ "5Ejeb396erN8ALn4R3T3OV", "2tnS87nbomps1GBWHqN2Wg" ],
"onboarding" : {
"status" : "COMPLETED",
"finishedAt" : "2023-10-13T09:48:56.766188Z"
}
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/people?email=john.smith%40skillpanel.com&customId=18382"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/people?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&email=john.smith%40skillpanel.com&customId=18382"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
GET /boost/people
A GET request will list all people.
This requests supports paging by using after query parameter.
Request parameters:
|
after
Optional
|
Provide to return the next batch of results |
|
email
Optional
|
Search by email |
|
customId
Optional
|
Search by customer provided ID |
Response Body:
|
slice.next
Type: String
Optional
|
Cursor pointing to the next batch of results |
|
_embedded.people[].id
Type: String
|
The person’s ID |
|
_embedded.people[].email
Type: String
|
The person’s email address |
|
_embedded.people[].firstName
Type: String
Optional
|
The person’s first name |
|
_embedded.people[].lastName
Type: String
Optional
|
The person’s last name |
|
_embedded.people[].customId
Type: String
Optional
|
The person’s customer provided ID |
|
_embedded.people[].jobPositionId
Type: String
Optional
|
The person’s job position, See /jobPositions endpoint |
|
_embedded.people[].teams
Type: Array
|
All teams the person belongs to, see /teams endpoint |
|
_embedded.people[].onboarding.status
Type: String
|
The person’s onboarding status, one of: NEW, STARTED, PERSONAL_DETAILS_FILLED, RATE_REQUESTED_SKILLS, RATE_ADDITIONAL_SKILLS, WAITING_FOR_REQUESTED_RATINGS, COMPLETED |
|
_embedded.people[].onboarding.finishedAt
Type: String
Optional
|
The date the person’s onboarding has been finished |
Links
|
first
|
Link to the first batch of results |
|
next
|
Link to the next batch of results |
Deleting a person
Request
DELETE /boost/people/3rzOhn61E7Zo98KEZTRWXA HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA' -i -X DELETE \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
DELETE /boost/people/{id}
A DELETE request will remove and anonymize a person.
Update the teams the person belongs to
Request
PUT /boost/people/3rzOhn61E7Zo98KEZTRWXA/teams HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"teamIds" : [ "someTeam" ]
}
$ curl 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA/teams' -i -X PUT \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"teamIds" : [ "someTeam" ]
}'
$ echo '{
"teamIds" : [ "someTeam" ]
}' | http PUT 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA/teams' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
PUT /boost/people/{id}/teams
A PUT request will update the list of teams a person belongs to.
Creating an invitation
Request
POST /boost/invitations HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}
$ curl 'https://api.skillpanel.com/boost/invitations' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}'
$ echo '{
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}' | http POST 'https://api.skillpanel.com/boost/invitations' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
POST /boost/invitations
A POST request is used to create an invitation.
Request Body:
|
email
Type: String
Required
|
The person’s email address |
|
firstName
Type: String
Optional
|
The person’s first name |
|
lastName
Type: String
Optional
|
The person’s last name |
|
sendNotification
Type: Boolean
Optional
|
Whether to send an invitation to the user, or just create an account. Default: `true` |
|
teamId
Type: String
Required
|
The person’s team ID |
|
jobPositionId
Type: String
Optional
|
The person’s job position ID |
|
customId
Type: String
Optional
|
The person’s customer provided ID |
Teams
Team object
This is an object representing a team.
Sample
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
Attributes
|
id
Type: String
|
The team’s ID |
|
name
Type: String
|
The teams’s name |
|
parentTeamId
Type: String
Optional
|
The team’s parent team id |
|
color
Type: String
Optional
|
The team’s color |
|
businessUnit
Type: Boolean
|
Whether the team is a business unit |
|
supervisorId
Type: String
Optional
|
The team’s supervisor |
|
customId
Type: String
Optional
|
The team’s customer provided ID |
Listing teams
Request
GET /boost/teams HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/teams' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/teams' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"teams" : [ {
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/teams"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/teams?after=MzjpdfWsbzJPETbGk3GmGarPe6e93QJhuSHc8lo3NDo"
}
},
"slice" : {
"next" : "MzjpdfWsbzJPETbGk3GmGarPe6e93QJhuSHc8lo3NDo"
}
}
{
"_embedded" : {
"teams" : [ {
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/teams"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/teams?after=MzjpdfWsbzJPETbGk3GmGarPe6e93QJhuSHc8lo3NDo"
}
},
"slice" : {
"next" : "MzjpdfWsbzJPETbGk3GmGarPe6e93QJhuSHc8lo3NDo"
}
}
GET /boost/teams
A GET request will list teams.
Request parameters:
|
after
Optional
|
Provide to return the next batch of results |
Response Body:
|
slice.next
Type: String
Optional
|
Cursor pointing to the next batch of results |
|
_embedded.teams[].id
Type: String
|
The team’s ID |
|
_embedded.teams[].name
Type: String
|
The teams’s name |
|
_embedded.teams[].parentTeamId
Type: String
Optional
|
The team’s parent team id |
|
_embedded.teams[].color
Type: String
Optional
|
The team’s color |
|
_embedded.teams[].businessUnit
Type: Boolean
|
Whether the team is a business unit |
|
_embedded.teams[].supervisorId
Type: String
Optional
|
The team’s supervisor |
|
_embedded.teams[].customId
Type: String
Optional
|
The team’s customer provided ID |
Links
|
first
|
Link to the first batch of results |
|
next
|
Link to the next batch of results |
Creating team
Request
POST /boost/teams HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
$ curl 'https://api.skillpanel.com/boost/teams' -i -X POST \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}'
$ echo '{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}' | http POST 'https://api.skillpanel.com/boost/teams' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
POST /boost/teams
A POST request will create a new team.
Request Body:
|
name
Type: String
Required
|
The teams’s name |
|
parentTeamId
Type: String
Optional
|
The team’s parent team id |
|
color
Type: String
Optional
|
The team’s color |
|
supervisorId
Type: String
Optional
|
The team’s supervisor |
|
customId
Type: String
Optional
|
The team’s customer provided ID |
Response Body:
The method returns the team object with standard content
Updating team
Request
PUT /boost/teams/2Pcu6q8aaweImJ9OsQICvE HTTP/1.1
Content-Type: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
$ curl 'https://api.skillpanel.com/boost/teams/2Pcu6q8aaweImJ9OsQICvE' -i -X PUT \
-H 'Content-Type: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY' \
-d '{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}'
$ echo '{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}' | http PUT 'https://api.skillpanel.com/boost/teams/2Pcu6q8aaweImJ9OsQICvE' \
'Content-Type:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
{
"id" : "2Pcu6q8aaweImJ9OsQICvE",
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"businessUnit" : true,
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
PUT /boost/teams/{teamId}
A PUT request will update a team
Request Body:
|
name
Type: String
Required
|
The teams’s name |
|
parentTeamId
Type: String
Optional
|
The team’s parent team id |
|
color
Type: String
Optional
|
The team’s color |
|
supervisorId
Type: String
Optional
|
The team’s supervisor |
|
customId
Type: String
Optional
|
The team’s customer provided ID |
Response Body:
The method returns the team object with standard content
Deleting the team
Request
DELETE /boost/teams/2Pcu6q8aaweImJ9OsQICvE HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/teams/2Pcu6q8aaweImJ9OsQICvE' -i -X DELETE \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.skillpanel.com/boost/teams/2Pcu6q8aaweImJ9OsQICvE' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 204 No Content
DELETE /boost/teams/{id}
A DELETE request will remove a team
Person skills
Listing person skills
Request
GET /boost/people/3rzOhn61E7Zo98KEZTRWXA/skills HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA/skills' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/people/3rzOhn61E7Zo98KEZTRWXA/skills' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"personSkills" : [ {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"type" : "CORE",
"wantToLearn" : true,
"hidden" : false,
"ratings" : [ {
"type" : "SELF",
"value" : 60,
"ratedOn" : "2023-10-17T15:22:56.407366Z",
"ratedBy" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"firstName" : "John",
"lastName" : "Smith"
}
} ],
"location" : {
"group" : {
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/3wVID21JfKDX25qbHKMVI5"
}
}
},
"subarea" : {
"id" : "3G2XO3REyeb1P4IhYioqRj",
"name" : "Java",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/3G2XO3REyeb1P4IhYioqRj"
}
}
},
"area" : {
"id" : "5WBeW9c9xqDGthZZkIfIxY",
"name" : "Software Development",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/5WBeW9c9xqDGthZZkIfIxY"
}
}
}
},
"customFields" : {
"readyToMentor" : 1
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skills/4EsKvBmUaPfAzBAomXZoJP"
}
}
} ]
}
}
{
"_embedded" : {
"personSkills" : [ {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"type" : "CORE",
"wantToLearn" : true,
"hidden" : false,
"ratings" : [ {
"type" : "SELF",
"value" : 60,
"ratedOn" : "2023-10-17T15:22:56.407366Z",
"ratedBy" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"firstName" : "John",
"lastName" : "Smith"
}
} ],
"location" : {
"group" : {
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/3wVID21JfKDX25qbHKMVI5"
}
}
},
"subarea" : {
"id" : "3G2XO3REyeb1P4IhYioqRj",
"name" : "Java",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/3G2XO3REyeb1P4IhYioqRj"
}
}
},
"area" : {
"id" : "5WBeW9c9xqDGthZZkIfIxY",
"name" : "Software Development",
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skillFolders/5WBeW9c9xqDGthZZkIfIxY"
}
}
}
},
"customFields" : {
"readyToMentor" : 1
},
"_links" : {
"self" : {
"href" : "https://api.skillpanel.com/boost/skills/4EsKvBmUaPfAzBAomXZoJP"
}
}
} ]
}
}
GET /boost/people/{personId}/skills
Response structure:
|
_embedded.personSkills[].id
Type: String
|
The ID of the skill |
|
_embedded.personSkills[].name
Type: String
|
The name of the skill |
|
_embedded.personSkills[].type
Type: String
|
The type of the skill in the person’s context, one of: CORE, OPTIONAL, ADDITIONAL |
|
_embedded.personSkills[].wantToLearn
Type: Boolean
|
Whether the person wants to learn this skill |
|
_embedded.personSkills[].hidden
Type: Boolean
|
Whether the skill is hidden |
|
_embedded.personSkills[].ratings[].type
Type: String
|
The type of the rating, one of: SELF, SUPERVISOR, DEVSKILLER, DESIRED |
|
_embedded.personSkills[].ratings[].ratedOn
Type: String
Optional
|
The timestamp when the skill has been rated |
|
_embedded.personSkills[].ratings[].value
Type: Number
Optional
|
The rating value, which can be null to indicate that the rating has been explicitly skipped by the person. If not null, it falls within the range of 0 to 100. |
|
_embedded.personSkills[].ratings[].ratedBy
Type: Object
Optional
|
The person that the skill has been rated by |
|
_embedded.personSkills[].ratings[].ratedBy.id
Type: String
|
The ID of the person that the skill has been rated by |
|
_embedded.personSkills[].ratings[].ratedBy.firstName
Type: String
Optional
|
The first name of the person that the skill has been rated by |
|
_embedded.personSkills[].ratings[].ratedBy.lastName
Type: String
Optional
|
The last name of the person that the skill has been rated by |
|
_embedded.personSkills[].location.group.id
Type: String
|
The ID of the group to which the skill belongs |
|
_embedded.personSkills[].location.group.name
Type: String
|
The name of the group to which the skill belongs |
|
_embedded.personSkills[].location.subarea.id
Type: String
|
The ID of the subarea to which the skill belongs |
|
_embedded.personSkills[].location.subarea.name
Type: String
|
The name of the subarea to which the skill belongs |
|
_embedded.personSkills[].location.area.id
Type: String
|
The ID of the area to which the skill belongs |
|
_embedded.personSkills[].location.area.name
Type: String
|
The name of the area to which the skill belongs |
|
_embedded.personSkills[].customFields
Type: Object
|
The custom fields of this person’s skill |
Skills
Listing skills
Request
GET /boost/skills?includeDisabled=true&includeHidden=true HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/skills?includeDisabled=true&includeHidden=true' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/skills?includeDisabled=true&includeHidden=true' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"skills" : [ {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation.",
"parentFolderId" : "3wVID21JfKDX25qbHKMVI5",
"recommendedToLearn" : true,
"hidden" : false,
"disabled" : false,
"global" : true
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skills?includeDisabled=true&includeHidden=true"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skills?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&includeDisabled=true&includeHidden=true"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
{
"_embedded" : {
"skills" : [ {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation.",
"parentFolderId" : "3wVID21JfKDX25qbHKMVI5",
"recommendedToLearn" : true,
"hidden" : false,
"disabled" : false,
"global" : true
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skills?includeDisabled=true&includeHidden=true"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skills?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&includeDisabled=true&includeHidden=true"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
GET /boost/skills
Request parameters:
|
after
Optional
|
Provide to return the next batch of results |
|
includeDisabled
Optional
|
Whether to include disabled skills |
|
includeHidden
Optional
|
Whether to include hidden skills |
Response structure:
|
slice.next
Type: String
Optional
|
Cursor pointing to the next batch of results |
|
_embedded.skills[].id
Type: String
|
The skill’s ID |
|
_embedded.skills[].name
Type: String
|
The skill’s name |
|
_embedded.skills[].description
Type: String
Optional
|
The skill’s description |
|
_embedded.skills[].parentFolderId
Type: String
|
The skill’s parent folder ID |
|
_embedded.skills[].recommendedToLearn
Type: Boolean
|
Whether the skill is recommended to learn |
|
_embedded.skills[].hidden
Type: Boolean
|
Whether the skill is hidden |
|
_embedded.skills[].disabled
Type: Boolean
|
Whether the skill is disabled |
|
_embedded.skills[].global
Type: Boolean
|
Whether the skill is global |
Links
|
first
|
Link to the first batch of results |
|
next
|
Link to the next batch of results |
Get a skill by ID
Request
GET /boost/skills/4EsKvBmUaPfAzBAomXZoJP HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/skills/4EsKvBmUaPfAzBAomXZoJP' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/skills/4EsKvBmUaPfAzBAomXZoJP' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation.",
"parentFolderId" : "3wVID21JfKDX25qbHKMVI5",
"recommendedToLearn" : true,
"hidden" : false,
"disabled" : false,
"global" : true
}
{
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation.",
"parentFolderId" : "3wVID21JfKDX25qbHKMVI5",
"recommendedToLearn" : true,
"hidden" : false,
"disabled" : false,
"global" : true
}
GET /boost/skills/{id}
Response structure:
|
id
Type: String
|
The skill’s ID |
|
name
Type: String
|
The skill’s name |
|
description
Type: String
Optional
|
The skill’s description |
|
parentFolderId
Type: String
|
The skill’s parent folder ID |
|
recommendedToLearn
Type: Boolean
|
Whether the skill is recommended to learn |
|
hidden
Type: Boolean
|
Whether the skill is hidden |
|
disabled
Type: Boolean
|
Whether the skill is disabled |
|
global
Type: Boolean
|
Whether the skill is global |
Skill folders
Listing skill folders
Request
GET /boost/skillFolders?includeDisabled=true&includeHidden=true HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/skillFolders?includeDisabled=true&includeHidden=true' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/skillFolders?includeDisabled=true&includeHidden=true' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"skillFolders" : [ {
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"level" : "GROUP",
"parentFolderId" : "3G2XO3REyeb1P4IhYioqRj",
"hidden" : false,
"disabled" : false,
"global" : true
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skillFolders?includeDisabled=true&includeHidden=true"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skillFolders?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&includeDisabled=true&includeHidden=true"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
{
"_embedded" : {
"skillFolders" : [ {
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"level" : "GROUP",
"parentFolderId" : "3G2XO3REyeb1P4IhYioqRj",
"hidden" : false,
"disabled" : false,
"global" : true
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skillFolders?includeDisabled=true&includeHidden=true"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skillFolders?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&includeDisabled=true&includeHidden=true"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
GET /boost/skillFolders
Request parameters:
|
after
Optional
|
Provide to return the next batch of results |
|
includeDisabled
Optional
|
Whether to include disabled skills |
|
includeHidden
Optional
|
Whether to include hidden skills |
Response structure:
|
slice.next
Type: String
Optional
|
Cursor pointing to the next batch of results |
|
_embedded.skillFolders[].id
Type: String
|
The skill folder’s ID |
|
_embedded.skillFolders[].name
Type: String
|
The skill folder’s name |
|
_embedded.skillFolders[].parentFolderId
Type: String
Optional
|
The skill folder’s parent folder ID |
|
_embedded.skillFolders[].level
Type: String
|
The skill folder’s level, one of: AREA, SUBAREA, GROUP |
|
_embedded.skillFolders[].hidden
Type: Boolean
|
Whether the skill folder is hidden |
|
_embedded.skillFolders[].disabled
Type: Boolean
|
Whether the skill folder is disabled |
|
_embedded.skillFolders[].global
Type: Boolean
|
Whether the skill folder is global |
Links
|
first
|
Link to the first batch of results |
|
next
|
Link to the next batch of results |
Get a skill folder by ID
Request
GET /boost/skillFolders/3wVID21JfKDX25qbHKMVI5 HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/skillFolders/3wVID21JfKDX25qbHKMVI5' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/skillFolders/3wVID21JfKDX25qbHKMVI5' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"level" : "GROUP",
"parentFolderId" : "3G2XO3REyeb1P4IhYioqRj",
"hidden" : false,
"disabled" : false,
"global" : true
}
{
"id" : "3wVID21JfKDX25qbHKMVI5",
"name" : "Build tools",
"level" : "GROUP",
"parentFolderId" : "3G2XO3REyeb1P4IhYioqRj",
"hidden" : false,
"disabled" : false,
"global" : true
}
GET /boost/skillFolders/{id}
Response structure:
|
id
Type: String
|
The skill folder’s ID |
|
name
Type: String
|
The skill folder’s name |
|
parentFolderId
Type: String
Optional
|
The skill folder’s parent folder ID |
|
level
Type: String
|
The skill folder’s level, one of: AREA, SUBAREA, GROUP |
|
hidden
Type: Boolean
|
Whether the skill folder is hidden |
|
disabled
Type: Boolean
|
Whether the skill folder is disabled |
|
global
Type: Boolean
|
Whether the skill folder is global |
Skill ratings
Listing skill ratings
Request
GET /boost/skillRatings?person.id=3rzOhn61E7Zo98KEZTRWXA&skill.id=4EsKvBmUaPfAzBAomXZoJP HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.skillpanel.com
$ curl 'https://api.skillpanel.com/boost/skillRatings?person.id=3rzOhn61E7Zo98KEZTRWXA&skill.id=4EsKvBmUaPfAzBAomXZoJP' -i -X GET \
-H 'Accept: application/vnd.devskiller.v2.hal+json' \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http GET 'https://api.skillpanel.com/boost/skillRatings?person.id=3rzOhn61E7Zo98KEZTRWXA&skill.id=4EsKvBmUaPfAzBAomXZoJP' \
'Accept:application/vnd.devskiller.v2.hal+json' \
'Devskiller-Api-Key:TEST-API-KEY'
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.devskiller.v2.hal+json
{
"_embedded" : {
"skillRatings" : [ {
"skill" : {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation."
},
"person" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith"
},
"ratings" : [ {
"type" : "SELF",
"value" : 80,
"ratedOn" : "2023-10-05T13:56:47Z",
"ratedBy" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith"
}
} ]
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skillRatings?skill.id=4EsKvBmUaPfAzBAomXZoJP&person.id=3rzOhn61E7Zo98KEZTRWXA"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skillRatings?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&skill.id=4EsKvBmUaPfAzBAomXZoJP&person.id=3rzOhn61E7Zo98KEZTRWXA"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
{
"_embedded" : {
"skillRatings" : [ {
"skill" : {
"id" : "4EsKvBmUaPfAzBAomXZoJP",
"name" : "Apache Maven",
"description" : "Ability to manage project lifecycle in Java applications. This tool facilitates dependency management and build automation."
},
"person" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith"
},
"ratings" : [ {
"type" : "SELF",
"value" : 80,
"ratedOn" : "2023-10-05T13:56:47Z",
"ratedBy" : {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@skillpanel.com",
"firstName" : "John",
"lastName" : "Smith"
}
} ]
} ]
},
"_links" : {
"first" : {
"href" : "https://api.skillpanel.com/boost/skillRatings?skill.id=4EsKvBmUaPfAzBAomXZoJP&person.id=3rzOhn61E7Zo98KEZTRWXA"
},
"next" : {
"href" : "https://api.skillpanel.com/boost/skillRatings?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&skill.id=4EsKvBmUaPfAzBAomXZoJP&person.id=3rzOhn61E7Zo98KEZTRWXA"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
GET /boost/skillRatings
Request parameters:
|
after
Optional
|
Provide to return the next batch of results |
|
person.id
Optional
|
The person’s ID |
|
skill.id
Optional
|
The skill’s ID |
Response structure:
|
slice.next
Type: String
Optional
|
Cursor pointing to the next batch of results |
|
_embedded.skillRatings[].person.id
Type: String
|
The ID of the person who has been rated |
|
_embedded.skillRatings[].person.email
Type: String
|
The e-mail address of the person who has been rated |
|
_embedded.skillRatings[].person.firstName
Type: String
Optional
|
The first name of the person who has been rated |
|
_embedded.skillRatings[].person.lastName
Type: String
Optional
|
The first name of the person who has been rated |
|
_embedded.skillRatings[].skill.id
Type: String
|
The ID of the skill that has been rated |
|
_embedded.skillRatings[].skill.name
Type: String
|
The name of the skill that has been rated |
|
_embedded.skillRatings[].skill.description
Type: String
Optional
|
The description of the skill that has been rated |
|
_embedded.skillRatings[].ratings[].type
Type: String
|
The type of the rating, one of: SELF, SUPERVISOR, DEVSKILLER, DESIRED |
|
_embedded.skillRatings[].ratings[].ratedOn
Type: String
Optional
|
The timestamp when the skill has been rated |
|
_embedded.skillRatings[].ratings[].value
Type: Number
Optional
|
The rating value, which can be null to indicate that the rating has been explicitly skipped by the person. If not null, it falls within the range of 0 to 100. |
|
_embedded.skillRatings[].ratings[].ratedBy
Type: Object
Optional
|
The person that the skill has been rated by |
|
_embedded.skillRatings[].ratings[].ratedBy.id
Type: String
|
The ID of the person that the skill has been rated by |
|
_embedded.skillRatings[].ratings[].ratedBy.email
Type: String
|
The e-mail address of the person that the skill has been rated by |
|
_embedded.skillRatings[].ratings[].ratedBy.firstName
Type: String
Optional
|
The first name of the person that the skill has been rated by |
|
_embedded.skillRatings[].ratings[].ratedBy.lastName
Type: String
Optional
|
The last name of the person that the skill has been rated by |
Links
|
first
|
Link to the first batch of results |
|
next
|
Link to the next batch of results |
Errors
Response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 235
{
"code" : 400,
"errorId" : "4O62Pq3sudFG986SLwPHYX",
"details" : "Validation error",
"validationErrors" : [ {
"field" : "email",
"value" : "incorrect mail",
"message" : "must be a well-formed email address"
} ]
}
{
"code" : 400,
"errorId" : "4O62Pq3sudFG986SLwPHYX",
"details" : "Validation error",
"validationErrors" : [ {
"field" : "email",
"value" : "incorrect mail",
"message" : "must be a well-formed email address"
} ]
}
Whenever an error response (status code >= 400) is returned, the body will contain a JSON object that describes the problem. The error object has the following structure:
|
code
Type: Number
Content: Standard
|
Error code |
|
errorId
Type: String
Content: Standard
|
Unique error id, you can use it when contacting with us |
|
details
Type: String
Content: Standard
|
Error description |
|
validationErrors
Type: Array
Content: Standard
|
Validation errors details |
|
validationErrors[].field
Type: String
Content: Standard
|
Name of the field |
|
validationErrors[].value
Type: String
Content: Standard
|
Rejected value |
|
validationErrors[].message
Type: String
Content: Standard
|
Message |
For example, a request that attempts to apply a non-existent tag to a note will produce a
400 Bad Request response