Catalog/psy-grade-on-curve

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 URLhttps://x402.hexl.dev/v1/stats/grade-on-curve
Integration docs
Example 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
}