curl --request PATCH \
--url https://prod.skillsdbnext.com/api/v1/surveys/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q3 onboarding pulse (revised)",
"description": "<string>",
"dueDate": "2026-08-15T00:00:00.000Z",
"scheduledFor": "2026-07-01T08:00:00.000Z",
"templateVersionId": "89"
}
'import requests
url = "https://prod.skillsdbnext.com/api/v1/surveys/{id}"
payload = {
"name": "Q3 onboarding pulse (revised)",
"description": "<string>",
"dueDate": "2026-08-15T00:00:00.000Z",
"scheduledFor": "2026-07-01T08:00:00.000Z",
"templateVersionId": "89"
}
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({
name: 'Q3 onboarding pulse (revised)',
description: '<string>',
dueDate: '2026-08-15T00:00:00.000Z',
scheduledFor: '2026-07-01T08:00:00.000Z',
templateVersionId: '89'
})
};
fetch('https://prod.skillsdbnext.com/api/v1/surveys/{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/surveys/{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([
'name' => 'Q3 onboarding pulse (revised)',
'description' => '<string>',
'dueDate' => '2026-08-15T00:00:00.000Z',
'scheduledFor' => '2026-07-01T08:00:00.000Z',
'templateVersionId' => '89'
]),
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/surveys/{id}"
payload := strings.NewReader("{\n \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\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/surveys/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.skillsdbnext.com/api/v1/surveys/{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 \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "301",
"name": "Q3 onboarding pulse",
"description": null,
"status": "launched",
"templateVersion": {
"id": "88",
"name": "Onboarding pulse",
"version": "2.1",
"templateId": "12",
"templateName": "Onboarding pulse"
},
"toAllPeople": true,
"scheduledFor": null,
"launchedAt": "2026-07-01T08:00:00.000Z",
"dueDate": "2026-07-31T00:00:00.000Z",
"lastNudgeSentAt": null,
"participants": {
"notStarted": 40,
"inProgress": 12,
"completed": 25
},
"createdById": "1042",
"createdAt": "2026-06-20T09:00:00.000Z",
"updatedAt": null
}
}{
"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 a survey
Name, description, dates and template version while the survey is a draft or scheduled; a launched survey accepts only dueDate. An ended or cancelled survey is a 409.
Requires scope: surveys:write.
curl --request PATCH \
--url https://prod.skillsdbnext.com/api/v1/surveys/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q3 onboarding pulse (revised)",
"description": "<string>",
"dueDate": "2026-08-15T00:00:00.000Z",
"scheduledFor": "2026-07-01T08:00:00.000Z",
"templateVersionId": "89"
}
'import requests
url = "https://prod.skillsdbnext.com/api/v1/surveys/{id}"
payload = {
"name": "Q3 onboarding pulse (revised)",
"description": "<string>",
"dueDate": "2026-08-15T00:00:00.000Z",
"scheduledFor": "2026-07-01T08:00:00.000Z",
"templateVersionId": "89"
}
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({
name: 'Q3 onboarding pulse (revised)',
description: '<string>',
dueDate: '2026-08-15T00:00:00.000Z',
scheduledFor: '2026-07-01T08:00:00.000Z',
templateVersionId: '89'
})
};
fetch('https://prod.skillsdbnext.com/api/v1/surveys/{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/surveys/{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([
'name' => 'Q3 onboarding pulse (revised)',
'description' => '<string>',
'dueDate' => '2026-08-15T00:00:00.000Z',
'scheduledFor' => '2026-07-01T08:00:00.000Z',
'templateVersionId' => '89'
]),
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/surveys/{id}"
payload := strings.NewReader("{\n \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\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/surveys/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.skillsdbnext.com/api/v1/surveys/{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 \"name\": \"Q3 onboarding pulse (revised)\",\n \"description\": \"<string>\",\n \"dueDate\": \"2026-08-15T00:00:00.000Z\",\n \"scheduledFor\": \"2026-07-01T08:00:00.000Z\",\n \"templateVersionId\": \"89\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "301",
"name": "Q3 onboarding pulse",
"description": null,
"status": "launched",
"templateVersion": {
"id": "88",
"name": "Onboarding pulse",
"version": "2.1",
"templateId": "12",
"templateName": "Onboarding pulse"
},
"toAllPeople": true,
"scheduledFor": null,
"launchedAt": "2026-07-01T08:00:00.000Z",
"dueDate": "2026-07-31T00:00:00.000Z",
"lastNudgeSentAt": null,
"participants": {
"notStarted": 40,
"inProgress": 12,
"completed": 25
},
"createdById": "1042",
"createdAt": "2026-06-20T09:00:00.000Z",
"updatedAt": null
}
}{
"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
Opaque resource id.
Body
255"Q3 onboarding pulse (revised)"
2000The only field a launched survey still accepts.
"2026-08-15T00:00:00.000Z"
"2026-07-01T08:00:00.000Z"
Repoint a draft at another template version.
"89"
Response
The resource, enveloped.
Show child attributes
Show child attributes