POST - Rubric Criteria
This API allows authenticated users to add a new criteria to an existing rubric by specifying its title, score range, and detailed scoring logic.
Key Notes:
name,maxScore, andminScoreare required fields.scoringLogicis an array of objects, each containing ascoreand its associatedscoringLogicexplanation.- This helps maintain a transparent and consistent evaluation framework.
Scenario: Adding a Criterion to a Rubric
A teacher wants to assess ‘Confidence & fluency in speaking’ in a student presentation rubric.
Outcome:
- The teacher sends a POST request with the criterion name and scoring details.
- The criterion is added to the existing rubric.
- The rubric becomes more detailed and useful for structured evaluation.
curl --request POST \
--url https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"description": "Evaluates how confidently and fluently the student speaks"
}
'import requests
url = "https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/"
payload = {
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"description": "Evaluates how confidently and fluently the student speaks"
}
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: 'Confidence & fluency in speaking',
maxScore: '5 Star',
minScore: '1 Star',
scoringLogic: [
{
score: '5 Star',
scoringLogic: 'Speaking: Reflects poise & confidence. Great body language, eye contact.'
}
],
description: 'Evaluates how confidently and fluently the student speaks'
})
};
fetch('https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/', 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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/",
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' => 'Confidence & fluency in speaking',
'maxScore' => '5 Star',
'minScore' => '1 Star',
'scoringLogic' => [
[
'score' => '5 Star',
'scoringLogic' => 'Speaking: Reflects poise & confidence. Great body language, eye contact.'
]
],
'description' => 'Evaluates how confidently and fluently the student speaks'
]),
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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/"
payload := strings.NewReader("{\n \"name\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/")
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\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\n}"
response = http.request(request)
puts response.read_body{
"id": "2b973c83-2830-4712-87b7-64a8c0a99035",
"name": "English Rubric",
"description": "A rubric for evaluating english hand written assignment.",
"rubricCriteria": [
{
"id": "d102b0ff-1111-4235-b8e9-764ef03c57cb",
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"createdAt": "2025-03-27T11:34:53.172550Z",
"modifiedAt": "2025-03-27T11:35:17.739952Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"modifiedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": 400,
"message": {
"scoringLogic": [
{
"score": [
"This field is required."
],
"scoringLogic": [
"This field is required."
]
}
]
}
}
}{
"detail": "Token has expired"
}{
"error:": {
"code": 404,
"message": {
"non_field_errors": [
"Rubric not found"
]
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the rubric the criteria belongs to
Body
Name of the rubric criterion
"Confidence & fluency in speaking"
Maximum score for the criterion
"5 Star"
Minimum score for the criterion
"1 Star"
Show child attributes
Show child attributes
Description of the rubric criterion
"Evaluates how confidently and fluently the student speaks"
Response
Rubric criteria created successfully.
Unique ID of the rubric
"2b973c83-2830-4712-87b7-64a8c0a99035"
Name of the rubric
"English Rubric"
Description of the rubric
"A rubric for evaluating english hand written assignment."
List of rubric criteria
Show child attributes
Show child attributes
Created date for the rubric
"2023-11-07T05:31:56Z"
Modified date of the rubric
"2023-11-07T05:31:56Z"
Was this page helpful?
curl --request POST \
--url https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"description": "Evaluates how confidently and fluently the student speaks"
}
'import requests
url = "https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/"
payload = {
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"description": "Evaluates how confidently and fluently the student speaks"
}
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: 'Confidence & fluency in speaking',
maxScore: '5 Star',
minScore: '1 Star',
scoringLogic: [
{
score: '5 Star',
scoringLogic: 'Speaking: Reflects poise & confidence. Great body language, eye contact.'
}
],
description: 'Evaluates how confidently and fluently the student speaks'
})
};
fetch('https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/', 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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/",
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' => 'Confidence & fluency in speaking',
'maxScore' => '5 Star',
'minScore' => '1 Star',
'scoringLogic' => [
[
'score' => '5 Star',
'scoringLogic' => 'Speaking: Reflects poise & confidence. Great body language, eye contact.'
]
],
'description' => 'Evaluates how confidently and fluently the student speaks'
]),
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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/"
payload := strings.NewReader("{\n \"name\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\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-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.crazygoldfish.com/rubrics/v1/rubric/{id}/criteria/")
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\": \"Confidence & fluency in speaking\",\n \"maxScore\": \"5 Star\",\n \"minScore\": \"1 Star\",\n \"scoringLogic\": [\n {\n \"score\": \"5 Star\",\n \"scoringLogic\": \"Speaking: Reflects poise & confidence. Great body language, eye contact.\"\n }\n ],\n \"description\": \"Evaluates how confidently and fluently the student speaks\"\n}"
response = http.request(request)
puts response.read_body{
"id": "2b973c83-2830-4712-87b7-64a8c0a99035",
"name": "English Rubric",
"description": "A rubric for evaluating english hand written assignment.",
"rubricCriteria": [
{
"id": "d102b0ff-1111-4235-b8e9-764ef03c57cb",
"name": "Confidence & fluency in speaking",
"maxScore": "5 Star",
"minScore": "1 Star",
"scoringLogic": [
{
"score": "5 Star",
"scoringLogic": "Speaking: Reflects poise & confidence. Great body language, eye contact."
}
],
"createdAt": "2025-03-27T11:34:53.172550Z",
"modifiedAt": "2025-03-27T11:35:17.739952Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"modifiedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": 400,
"message": {
"scoringLogic": [
{
"score": [
"This field is required."
],
"scoringLogic": [
"This field is required."
]
}
]
}
}
}{
"detail": "Token has expired"
}{
"error:": {
"code": 404,
"message": {
"non_field_errors": [
"Rubric not found"
]
}
}
}