DevSkiller API Overview
The DevSkiller REST API lets you interact with DevSkiller 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.devskiller.com/. For example, to get list of candidates you should call /candidates
endpoint at
https://api.devskiller.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 DevSkiller 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.devskiller.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.
TalentScore
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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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 |
_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.devskiller.com
{
"email": "john@smith.com",
"firstName": "John",
"lastName": "Smith",
"tags": [
"Phoenix",
"TeamLeader"
],
"externalId": "553c8ceb",
"disableCommunication": false
}
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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 structure:
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"self" : {
"href" : "https://api.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
}
GET /candidates/{id}
A GET
request will retrieve the details of a candidate
Response structure
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.devskiller.com
$ curl 'https://api.devskiller.com/candidates/2er4Hm3VwGW3J0lfwrvQYd' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.devskiller.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
Accepting/rejecting 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.devskiller.com
{
"status": "ACCEPTED"
}
$ curl 'https://api.devskiller.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.devskiller.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 to accept or reject the candidate.
Request Body:
status
Type: String
Required
|
The candidate's new status. Possible values: ACCEPTED,REJECTED |
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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.devskiller.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.devskiller.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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 |
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 |
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[].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[].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.devskiller.com
{
"testId": "70Wvi8uyl9mFFM4xuVdI5o",
"validityInDays": 14,
"note": "Custom note for the candidate"
}
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
}
}
}
{
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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 |
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.devskiller.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_embedded" : {
"test" : {
"id" : "d2d55c15-cb0e-4328-8699-ad957ba239c5",
"name" : "Senior Java Developer",
"_links" : {
"self" : {
"href" : "https://api.devskiller.com/tests/d2d55c15-cb0e-4328-8699-ad957ba239c5"
}
}
}
},
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
},
"self" : {
"href" : "https://api.devskiller.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
Deleting the assessment
Request
DELETE /candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj HTTP/1.1
Devskiller-Api-Key: TEST-API-KEY
Host: api.devskiller.com
$ curl 'https://api.devskiller.com/candidates/2er4Hm3VwGW3J0lfwrvQYd/assessments/5wxgYgs41BZoohKMdwrMKj' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.devskiller.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
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.devskiller.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.devskiller.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.devskiller.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.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.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,
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13: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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.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,
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13: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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.devskiller.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 |
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
}
}
},
"assessment" : {
"id" : "90224982-2017-4098-bfc8-48f7b60ec01d",
"status" : "ASSESSMENT_COMPLETED",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/detail/overview"
}
}
}
},
"_links" : {
"self" : {
"href" : "https://api.devskiller.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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13: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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.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",
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13:12:13Z",
"_links" : {
"candidateAccess" : {
"href" : "https://exam.devskiller.com/exam.html?2Y4D-9R2G-6WT7"
},
"onlineReport" : {
"href" : "https://report.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.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" : [ {
"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" ]
}
} ]
}, {
"timeTakenInSeconds" : 720,
"timeLimitInSeconds" : 900,
"score" : {
"scoredPoints" : 25,
"maxPoints" : 30,
"percentage" : 83
},
"answers" : [ {
"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" ]
}
} ]
} ],
"creationDate" : "2018-11-23T11:12:13Z",
"startDate" : "2018-11-23T12:12:13Z",
"finishDate" : "2018-11-23T13: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.devskiller.com/candidate-report.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"pdfReport" : {
"href" : "https://report.devskiller.com/candidate-pdf.html?1024138f-684f-4311-b539-774fd3ef3a9c"
},
"candidateUrl" : {
"href" : "https://app.devskiller.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.devskiller.com
$ curl 'https://api.devskiller.com/invitations/5wxgYgs41BZoohKMdwrMKj' -i -X DELETE \
-H 'Devskiller-Api-Key: TEST-API-KEY'
$ http DELETE 'https://api.devskiller.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
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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.devskiller.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 structure
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 |
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.devskiller.com
{
"predefinedTestId": "4pMQiiqQ7o5XfM2MekmEiq"
}
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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.devskiller.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.devskiller.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.devskiller.com
{
"generatorCriteria": {
"skills": [
"Java"
],
"difficulties": [
"EASY",
"MEDIUM",
"HARD"
],
"taskTypes": [
"MULTI_CHOICE",
"PROGRAMMING",
"SQL",
"DEVOPS"
]
}
}
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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.devskiller.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.devskiller.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 |
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.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.devskiller.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 structure
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 DevSkiller.
To receive DevSkiller'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 DevSkiller. 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.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.devskiller.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.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.devskiller.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.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c"
},
"assessment": {
"href": "https://api.devskiller.com/candidates/1024138f-684f-4311-b539-774fd3ef3a9c/assessments/90224982-2017-4098-bfc8-48f7b60ec01d"
},
"invitation": {
"href": "https://api.devskiller.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 DevSkiller 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 structure
[]
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.devskiller.com
{"hookUrl":"https://api.yourdomain.com/devskillerWebhooks"}
$ curl 'https://api.devskiller.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.devskiller.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 structure:
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.
TalentBoost
People
Listing people
Request
GET /boost/people?email=john.smith%40devskiller.com&customId=18382 HTTP/1.1
Accept: application/vnd.devskiller.v2.hal+json
Devskiller-Api-Key: TEST-API-KEY
Host: api.devskiller.com
$ curl 'https://api.devskiller.com/boost/people?email=john.smith%40devskiller.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.devskiller.com/boost/people?email=john.smith%40devskiller.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@devskiller.com",
"firstName" : "John",
"lastName" : "Smith",
"customId" : "18382",
"jobPositionId" : "5ixodYgXVkm4Yc09mzGvvR",
"teams" : [ "2tnS87nbomps1GBWHqN2Wg", "5Ejeb396erN8ALn4R3T3OV" ]
} ]
},
"_links" : {
"first" : {
"href" : "https://api.devskiller.com/boost/people?email=john.smith%40devskiller.com&customId=18382"
},
"next" : {
"href" : "https://api.devskiller.com/boost/people?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&email=john.smith%40devskiller.com&customId=18382"
}
},
"slice" : {
"next" : "AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4"
}
}
{
"_embedded" : {
"people" : [ {
"id" : "3rzOhn61E7Zo98KEZTRWXA",
"email" : "john.smith@devskiller.com",
"firstName" : "John",
"lastName" : "Smith",
"customId" : "18382",
"jobPositionId" : "5ixodYgXVkm4Yc09mzGvvR",
"teams" : [ "2tnS87nbomps1GBWHqN2Wg", "5Ejeb396erN8ALn4R3T3OV" ]
} ]
},
"_links" : {
"first" : {
"href" : "https://api.devskiller.com/boost/people?email=john.smith%40devskiller.com&customId=18382"
},
"next" : {
"href" : "https://api.devskiller.com/boost/people?after=AZvXJZPhI3KUuV5aoaA_Anfo18K7GgDHEZz0gUNpHN4&email=john.smith%40devskiller.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 structure:
slice.next
Type: String
Content: Always
|
Cursor pointing to the next batch of results |
_embedded.people[].id
Type: String
Content: Always
|
The person’s ID |
_embedded.people[].email
Type: String
Content: Always
|
The person’s email address |
_embedded.people[].firstName
Type: String
Content: Always
|
The person’s first name |
_embedded.people[].lastName
Type: String
Content: Always
|
The person’s last name |
_embedded.people[].customId
Type: String
Content: Always
|
The person’s customer provided ID |
_embedded.people[].jobPositionId
Type: String
Content: Always
|
The person’s job position, See /jobPositions endpoint |
_embedded.people[].teams
Type: Array
Content: Always
|
All teams the person belongs to, see /teams endpoint |
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.
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.devskiller.com
{
"email" : "john.smith@devskiller.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}
$ curl 'https://api.devskiller.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@devskiller.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}'
$ echo '{
"email" : "john.smith@devskiller.com",
"firstName" : "John",
"lastName" : "Smith",
"sendNotification" : true,
"teamId" : "dW1bg11OwANQ9PX4HuobZ",
"jobPositionId" : "3qnLaqXasVCqez9HYiaZSk",
"customId" : "6399"
}' | http POST 'https://api.devskiller.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
Content: Always
|
The team’s ID |
name
Type: String
Content: Always
|
The teams’s name |
parentTeamId
Type: String
Content: Always
|
The team’s parent team id |
color
Type: String
Content: Always
|
The team’s color |
businessUnit
Type: Boolean
Content: Always
|
Whether the team is a business unit |
supervisorId
Type: String
Content: Always
|
The team’s supervisor |
customId
Type: String
Content: Always
|
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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.devskiller.com/boost/teams"
},
"next" : {
"href" : "https://api.devskiller.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.devskiller.com/boost/teams"
},
"next" : {
"href" : "https://api.devskiller.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 structure:
slice.next
Type: String
Content: Always
|
Cursor pointing to the next batch of results |
_embedded.teams[].id
Type: String
Content: Always
|
The team’s ID |
_embedded.teams[].name
Type: String
Content: Always
|
The teams’s name |
_embedded.teams[].parentTeamId
Type: String
Content: Always
|
The team’s parent team id |
_embedded.teams[].color
Type: String
Content: Always
|
The team’s color |
_embedded.teams[].businessUnit
Type: Boolean
Content: Always
|
Whether the team is a business unit |
_embedded.teams[].supervisorId
Type: String
Content: Always
|
The team’s supervisor |
_embedded.teams[].customId
Type: String
Content: Always
|
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.devskiller.com
{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
$ curl 'https://api.devskiller.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.devskiller.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 structure:
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.devskiller.com
{
"name" : "IT Team",
"parentTeamId" : "JoMV2OU1e19ICeMRQ5uIV",
"color" : "#ff0000",
"supervisorId" : "5MJ6IZwshotzexAFnKOZ1z",
"customId" : "1Gw2Lsq6"
}
$ curl 'https://api.devskiller.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.devskiller.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 structure:
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.devskiller.com
$ curl 'https://api.devskiller.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.devskiller.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
Job positions
Errors
Response
HTTP/1.1 400 Bad Request
Content-Type: application/json
Content-Length: 249
{
"code" : 400,
"errorId" : "6d77c358-a91a-4360-8c2f-568cbace8130",
"details" : "Validation error",
"validationErrors" : [ {
"field" : "email",
"value" : "incorrect mail",
"message" : "must be a well-formed email address"
} ]
}
{
"code" : 400,
"errorId" : "6d77c358-a91a-4360-8c2f-568cbace8130",
"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