curl --request POST \
--url https://api.stardex.ai/v1/scorecard-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rating_scale": 5,
"enable_ai_auto_grade": false,
"overall_default_text": "<string>",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"criteria": [
{
"name": "<string>",
"description": "<string>",
"importance": "nice_to_have",
"position": 123,
"default_text": "<string>"
}
]
}
'import requests
url = "https://api.stardex.ai/v1/scorecard-templates"
payload = {
"name": "<string>",
"description": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rating_scale": 5,
"enable_ai_auto_grade": False,
"overall_default_text": "<string>",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"criteria": [
{
"name": "<string>",
"description": "<string>",
"importance": "nice_to_have",
"position": 123,
"default_text": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
job_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
rating_scale: 5,
enable_ai_auto_grade: false,
overall_default_text: '<string>',
team_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
criteria: [
{
name: '<string>',
description: '<string>',
importance: 'nice_to_have',
position: 123,
default_text: '<string>'
}
]
})
};
fetch('https://api.stardex.ai/v1/scorecard-templates', 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://api.stardex.ai/v1/scorecard-templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'job_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'rating_scale' => 5,
'enable_ai_auto_grade' => false,
'overall_default_text' => '<string>',
'team_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'criteria' => [
[
'name' => '<string>',
'description' => '<string>',
'importance' => 'nice_to_have',
'position' => 123,
'default_text' => '<string>'
]
]
]),
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://api.stardex.ai/v1/scorecard-templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.stardex.ai/v1/scorecard-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/scorecard-templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "aaaa1111-2222-3333-4444-555555555555",
"name": "Senior Backend Engineer Scorecard",
"description": "Interview rubric for senior backend engineering candidates.",
"job_id": "456e7890-e12b-34d5-a678-901234567890",
"rating_scale": 5,
"enable_ai_auto_grade": false,
"is_archived": false,
"overall_default_text": "Summarize the candidate against the must-have criteria first, then list any concerns.",
"created_by": {
"id": "567e8901-e23c-45d6-e789-012345678901",
"first_name": "Jane",
"last_name": "Smith"
},
"created_at": "2026-05-20T10:00:00Z",
"updated_at": "2026-05-20T10:00:00Z",
"criteria": [
{
"id": "bbbb1111-2222-3333-4444-555555555555",
"name": "System design depth",
"description": "Can the candidate reason about consistency, partitioning, and failure modes for a multi-region service?",
"importance": "must_have",
"position": 1,
"is_archived": false,
"default_text": "Note specific systems they have built, scale handled, and trade-offs discussed."
},
{
"id": "cccc1111-2222-3333-4444-555555555555",
"name": "Async collaboration",
"description": "Quality of written communication and decision logs.",
"importance": "nice_to_have",
"position": 2,
"is_archived": false,
"default_text": null
}
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}Create scorecard template
Create a new scorecard template (assessment rubric) with optional criteria.
Job scoping: pass job_id to bind the template to a specific job. Only one active template can exist per job — archive the existing one before creating a new one.
Team member assignment: the template is recorded as created by the calling team member by default. Pass team_member_id to attribute creation to a different team member (required when the caller is an API key without a team-member context).
curl --request POST \
--url https://api.stardex.ai/v1/scorecard-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rating_scale": 5,
"enable_ai_auto_grade": false,
"overall_default_text": "<string>",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"criteria": [
{
"name": "<string>",
"description": "<string>",
"importance": "nice_to_have",
"position": 123,
"default_text": "<string>"
}
]
}
'import requests
url = "https://api.stardex.ai/v1/scorecard-templates"
payload = {
"name": "<string>",
"description": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rating_scale": 5,
"enable_ai_auto_grade": False,
"overall_default_text": "<string>",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"criteria": [
{
"name": "<string>",
"description": "<string>",
"importance": "nice_to_have",
"position": 123,
"default_text": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
job_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
rating_scale: 5,
enable_ai_auto_grade: false,
overall_default_text: '<string>',
team_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
criteria: [
{
name: '<string>',
description: '<string>',
importance: 'nice_to_have',
position: 123,
default_text: '<string>'
}
]
})
};
fetch('https://api.stardex.ai/v1/scorecard-templates', 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://api.stardex.ai/v1/scorecard-templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'job_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'rating_scale' => 5,
'enable_ai_auto_grade' => false,
'overall_default_text' => '<string>',
'team_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'criteria' => [
[
'name' => '<string>',
'description' => '<string>',
'importance' => 'nice_to_have',
'position' => 123,
'default_text' => '<string>'
]
]
]),
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://api.stardex.ai/v1/scorecard-templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.stardex.ai/v1/scorecard-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/scorecard-templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"rating_scale\": 5,\n \"enable_ai_auto_grade\": false,\n \"overall_default_text\": \"<string>\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"criteria\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"importance\": \"nice_to_have\",\n \"position\": 123,\n \"default_text\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "aaaa1111-2222-3333-4444-555555555555",
"name": "Senior Backend Engineer Scorecard",
"description": "Interview rubric for senior backend engineering candidates.",
"job_id": "456e7890-e12b-34d5-a678-901234567890",
"rating_scale": 5,
"enable_ai_auto_grade": false,
"is_archived": false,
"overall_default_text": "Summarize the candidate against the must-have criteria first, then list any concerns.",
"created_by": {
"id": "567e8901-e23c-45d6-e789-012345678901",
"first_name": "Jane",
"last_name": "Smith"
},
"created_at": "2026-05-20T10:00:00Z",
"updated_at": "2026-05-20T10:00:00Z",
"criteria": [
{
"id": "bbbb1111-2222-3333-4444-555555555555",
"name": "System design depth",
"description": "Can the candidate reason about consistency, partitioning, and failure modes for a multi-region service?",
"importance": "must_have",
"position": 1,
"is_archived": false,
"default_text": "Note specific systems they have built, scale handled, and trade-offs discussed."
},
{
"id": "cccc1111-2222-3333-4444-555555555555",
"name": "Async collaboration",
"description": "Quality of written communication and decision logs.",
"importance": "nice_to_have",
"position": 2,
"is_archived": false,
"default_text": null
}
]
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Authenticate with a Bearer token: API key, OAuth token, or session token.
Body
Template name shown to raters (required).
1Optional template description.
Job UUID to scope this template to. Only one active template can exist per job. Omit to create an org-wide template.
Star rating scale. Must be one of: 3, 4, 5 (default), or 10.
When true, the AI copilot can auto-grade candidates against this template. Defaults to false.
Default note text pre-filled in the overall summary section. Plain text only.
Team member UUID to record as the template creator. Defaults to the caller. Required when the caller is authenticated with an API key (no team member context).
Criteria to attach to the template. Each criterion has a name and optional description, importance, position, and default_text. When position is omitted, criteria are numbered in the order provided.
Show child attributes
Show child attributes
Was this page helpful?