curl --request PATCH \
--url https://prod.skillsdbnext.com/api/v1/assessments/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Q2 Skills Review (final)",
"description": "Updated brief.",
"allPeople": false,
"peopleTypeIds": [
"<string>"
],
"employeeDeadlineAt": "2026-03-31",
"managerDeadlineAt": "2026-04-15"
}
'import requests
url = "https://prod.skillsdbnext.com/api/v1/assessments/{id}"
payload = {
"title": "Q2 Skills Review (final)",
"description": "Updated brief.",
"allPeople": False,
"peopleTypeIds": ["<string>"],
"employeeDeadlineAt": "2026-03-31",
"managerDeadlineAt": "2026-04-15"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Q2 Skills Review (final)',
description: 'Updated brief.',
allPeople: false,
peopleTypeIds: ['<string>'],
employeeDeadlineAt: '2026-03-31',
managerDeadlineAt: '2026-04-15'
})
};
fetch('https://prod.skillsdbnext.com/api/v1/assessments/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://prod.skillsdbnext.com/api/v1/assessments/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Q2 Skills Review (final)',
'description' => 'Updated brief.',
'allPeople' => false,
'peopleTypeIds' => [
'<string>'
],
'employeeDeadlineAt' => '2026-03-31',
'managerDeadlineAt' => '2026-04-15'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://prod.skillsdbnext.com/api/v1/assessments/{id}"
payload := strings.NewReader("{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://prod.skillsdbnext.com/api/v1/assessments/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.skillsdbnext.com/api/v1/assessments/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "42",
"title": "Q2 Skills Review",
"description": "Annual proficiency check-in.",
"status": "draft",
"tracks": {
"employee": {
"status": "active",
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": "2026-03-31T00:00:00.000Z"
},
"manager": {
"status": "active",
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": "2026-03-31T00:00:00.000Z"
}
},
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": null,
"managerGradesVisibleAt": "immediately",
"allPeople": true,
"counts": {
"assigned": 120,
"completed": 40,
"employeesAssigned": 118,
"employeesCompleted": 60,
"managersAssigned": 14,
"managersCompleted": 5
},
"createdAt": "2026-02-20T09:00:00.000Z",
"updatedAt": null,
"scope": {
"allPeople": false,
"businessUnitIds": [
"3"
],
"divisionIds": [],
"countryIds": [],
"businessRegionIds": [],
"cityIds": [],
"siteIds": [],
"departmentIds": [
"12",
"15"
],
"teamIds": [],
"shiftIds": [],
"peopleTypeIds": []
}
}
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}Update an assessment
Title, description, visibility and population while both tracks are still draft; a track’s deadline while that track is draft. Anything else is a 409.
Requires scope: assessments:write.
curl --request PATCH \
--url https://prod.skillsdbnext.com/api/v1/assessments/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Q2 Skills Review (final)",
"description": "Updated brief.",
"allPeople": false,
"peopleTypeIds": [
"<string>"
],
"employeeDeadlineAt": "2026-03-31",
"managerDeadlineAt": "2026-04-15"
}
'import requests
url = "https://prod.skillsdbnext.com/api/v1/assessments/{id}"
payload = {
"title": "Q2 Skills Review (final)",
"description": "Updated brief.",
"allPeople": False,
"peopleTypeIds": ["<string>"],
"employeeDeadlineAt": "2026-03-31",
"managerDeadlineAt": "2026-04-15"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Q2 Skills Review (final)',
description: 'Updated brief.',
allPeople: false,
peopleTypeIds: ['<string>'],
employeeDeadlineAt: '2026-03-31',
managerDeadlineAt: '2026-04-15'
})
};
fetch('https://prod.skillsdbnext.com/api/v1/assessments/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://prod.skillsdbnext.com/api/v1/assessments/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Q2 Skills Review (final)',
'description' => 'Updated brief.',
'allPeople' => false,
'peopleTypeIds' => [
'<string>'
],
'employeeDeadlineAt' => '2026-03-31',
'managerDeadlineAt' => '2026-04-15'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://prod.skillsdbnext.com/api/v1/assessments/{id}"
payload := strings.NewReader("{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://prod.skillsdbnext.com/api/v1/assessments/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.skillsdbnext.com/api/v1/assessments/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Q2 Skills Review (final)\",\n \"description\": \"Updated brief.\",\n \"allPeople\": false,\n \"peopleTypeIds\": [\n \"<string>\"\n ],\n \"employeeDeadlineAt\": \"2026-03-31\",\n \"managerDeadlineAt\": \"2026-04-15\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "42",
"title": "Q2 Skills Review",
"description": "Annual proficiency check-in.",
"status": "draft",
"tracks": {
"employee": {
"status": "active",
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": "2026-03-31T00:00:00.000Z"
},
"manager": {
"status": "active",
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": "2026-03-31T00:00:00.000Z"
}
},
"startedAt": "2026-03-01T00:00:00.000Z",
"endedAt": null,
"deadlineAt": null,
"managerGradesVisibleAt": "immediately",
"allPeople": true,
"counts": {
"assigned": 120,
"completed": 40,
"employeesAssigned": 118,
"employeesCompleted": 60,
"managersAssigned": 14,
"managersCompleted": 5
},
"createdAt": "2026-02-20T09:00:00.000Z",
"updatedAt": null,
"scope": {
"allPeople": false,
"businessUnitIds": [
"3"
],
"divisionIds": [],
"countryIds": [],
"businessRegionIds": [],
"cityIds": [],
"siteIds": [],
"departmentIds": [
"12",
"15"
],
"teamIds": [],
"shiftIds": [],
"peopleTypeIds": []
}
}
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}{
"type": "https://help.skillsdb.com/api-docs/errors/validation-error",
"title": "Validation failed",
"status": 400,
"detail": "limit must be between 1 and 200",
"instance": "/api/v1/people",
"requestId": "0192c2f1-6f4e-7ab3-b1c4-5f6a7b8c9d0e",
"errors": [
{
"field": "email",
"code": "max_length",
"message": "email must be shorter than or equal to 75 characters"
}
],
"error": "trial_expired",
"upgrade_url": "https://app.skillsdb.com/settings/billing"
}Authorizations
An API key issued by a company administrator — an environment prefix (production: sdb_live_) followed by 32 characters. The prefix identifies the environment and MUST NOT be hard-coded or validated by clients; treat the whole key as opaque. Shown exactly once at creation; only a one-way hash is stored.
Scopes (granted per key on the create screen; :write never implies :read):
skills:readskills:writepeople:readpeople:writecareers:readcareers:writetraining:readtraining:writeflags:readflags:writeorg:readorg:writeassessments:readlearning:readlearning:writecertifications:readcertifications:writeassessments:writeproficiency:readproficiency:writesurveys:readsurveys:writelabels:readlabels:write
Headers
Any unique string (at most 200 characters). Retrying with the same key and identical content replays the stored response for 24h instead of executing twice.
200Path Parameters
Assessment id.
"42"
Body
500"Q2 Skills Review (final)"
4000"Updated brief."
immediately, after_employee_assessment, after_manager_assessment, after_assessment_ended false
"2026-03-31"
"2026-04-15"
Response
The resource, enveloped.
Show child attributes
Show child attributes