curl -X GET https://api.60db.ai/judge/rubrics/{id} \
-H "Authorization: Bearer your-api-key"
const response = await fetch('https://api.60db.ai/judge/rubrics/{id}', {
method: 'GET',
headers: {
'Authorization': 'Bearer your-api-key',
},
});
const data = await response.json();
import requests
response = requests.get(
"https://api.60db.ai/judge/rubrics/{id}",
headers={
"Authorization": "Bearer your-api-key",
},
)
data = response.json()
{
"success": true,
"data": {
"id": "a1b2c3d4-e5f6-4789-abcd-ef0123456789",
"name": "Docs sample 22592",
"description": "Used to capture a real response for the docs",
"model": "jev-latest",
"questions": {
"tone": {
"type": "choice",
"criteria": {
"unknown": "Unclear",
"dismissive": "Brushes off",
"professional": "Calm"
}
}
},
"question_count": 1,
"shared": false,
"is_mine": true,
"created_at": "2026-09-28T13:19:50.210Z",
"updated_at": null
}
}
Judge
Get rubric
Fetch one saved rubric and its questions
GET
/
judge
/
rubrics
/
{id}
curl -X GET https://api.60db.ai/judge/rubrics/{id} \
-H "Authorization: Bearer your-api-key"
const response = await fetch('https://api.60db.ai/judge/rubrics/{id}', {
method: 'GET',
headers: {
'Authorization': 'Bearer your-api-key',
},
});
const data = await response.json();
import requests
response = requests.get(
"https://api.60db.ai/judge/rubrics/{id}",
headers={
"Authorization": "Bearer your-api-key",
},
)
data = response.json()
{
"success": true,
"data": {
"id": "a1b2c3d4-e5f6-4789-abcd-ef0123456789",
"name": "Docs sample 22592",
"description": "Used to capture a real response for the docs",
"model": "jev-latest",
"questions": {
"tone": {
"type": "choice",
"criteria": {
"unknown": "Unclear",
"dismissive": "Brushes off",
"professional": "Calm"
}
}
},
"question_count": 1,
"shared": false,
"is_mine": true,
"created_at": "2026-09-28T13:19:50.210Z",
"updated_at": null
}
}
Fetch a single rubric, including the full
questions map — enough to load it back into an editor.
A personal rubric is visible only to whoever created it; a shared one to the whole workspace.
Request
Headers
string
required
Bearer token — your standard 60db API key (
sk_…), or a user JWT. There is no separate Judge credential.Path parameters
string
required
Rubric UUID.
Response
object
id, name, description, model, questions, question_count, shared, is_mine, timestamps.Key order inside
questions is not preserved — the store normalises JSON object keys. The content is identical; compare semantically rather than byte-for-byte.Errors
| Status | Meaning |
|---|---|
403 | The rubric belongs to a different workspace. |
404 | No such rubric, it is another user’s personal rubric, or the id is malformed. |
Example
curl -X GET https://api.60db.ai/judge/rubrics/{id} \
-H "Authorization: Bearer your-api-key"
const response = await fetch('https://api.60db.ai/judge/rubrics/{id}', {
method: 'GET',
headers: {
'Authorization': 'Bearer your-api-key',
},
});
const data = await response.json();
import requests
response = requests.get(
"https://api.60db.ai/judge/rubrics/{id}",
headers={
"Authorization": "Bearer your-api-key",
},
)
data = response.json()
{
"success": true,
"data": {
"id": "a1b2c3d4-e5f6-4789-abcd-ef0123456789",
"name": "Docs sample 22592",
"description": "Used to capture a real response for the docs",
"model": "jev-latest",
"questions": {
"tone": {
"type": "choice",
"criteria": {
"unknown": "Unclear",
"dismissive": "Brushes off",
"professional": "Calm"
}
}
},
"question_count": 1,
"shared": false,
"is_mine": true,
"created_at": "2026-09-28T13:19:50.210Z",
"updated_at": null
}
}