Statistics
Grade on a normal curve API
Assigns letter grades from raw scores using a normal curve with configurable target percentages, returning z-cutoffs, cutoff scores, per-score grades, and the resulting grade distribution. Answers 'What grade does each score get on a curve?', 'Where do the A/B/C/D/F cutoffs fall?'.
Price$0.06per request
MethodPOST
Route/v1/stats/grade-on-curve
StatusLive
MIME typeapplication/json
Rate limit120/minute
Cache0s public
psychometricsgrade-curvegradingnormal-curvecutoffseducationscoringletter-grade
API URL
Integration docshttps://x402.hexl.dev/v1/stats/grade-on-curveExample request
{
"scores": [
95,
88,
82,
75,
70,
65,
60,
55,
50,
45
]
}Example response
{
"grades": [
"A",
"B",
"B",
"C",
"C",
"C",
"D",
"D",
"D",
"F"
],
"gradeCounts": {
"A": 1,
"B": 2,
"C": 3,
"D": 3,
"F": 1
},
"mean": 68.5,
"sd": 15.7178,
"cutoffScores": [
88.6432,
76.7424,
60.2576,
48.3568
],
"cutoffZ": [
1.2816,
0.5244,
-0.5244,
-1.2816
],
"letters": [
"A",
"B",
"C",
"D",
"F"
],
"targetDistribution": [
10,
20,
40,
20,
10
],
"interpretation": "curved to A/B/C/D/F using a normal distribution (mean 68.5, sd 15.72)"
}Input schema
{
"type": "object",
"required": [
"scores"
],
"properties": {
"scores": {
"type": "array",
"items": {
"type": "number"
},
"examples": [
[
95,
88,
82,
75,
70,
65,
60,
55,
50,
45
]
]
},
"distribution": {
"type": "array",
"items": {
"type": "number"
},
"description": "target % per grade (sums to 100)",
"default": [
10,
20,
40,
20,
10
]
},
"letters": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"A",
"B",
"C",
"D",
"F"
]
}
}
}Output schema
{
"type": "object",
"additionalProperties": true
}