Docs
Grade API
The endpoint behind /grade, documented for the curious. It is a demo surface, not a product API: no key, no SLA, a shared daily cap, and the contract can change without notice.
Request
POST /api/grade
Content-Type: application/json
{ "ticker": "AAPL", "email": "you@example.com" }ticker: required; a US equity symbol. Normalized to uppercase.email: required and must be valid. It is recorded as a demand signal and nothing else (privacy).
Response (200)
{
"ticker": "AAPL",
"found": true,
"experimental": true,
"disclaimer": "...",
"grade": "B",
"as_of": "2026-06-12",
"composite": 0.61,
"factors": { "quality": 0.7, "valuation": 0.4, "momentum": 0.6, "health": 0.8 }
}found: false(still 200) means the ticker is not in the graded universe; no grade fields are present.gradeis a letter grade;compositeand the fourfactorsare 0..1 scores from the same nightly run shown on /grade.as_ofis the snapshot date of the underlying run; grades update nightly, not in real time.
Errors
400 bad_request: invalid JSON, missing or invalidemail, or missingticker. Thedetailfield says which.405 method_not_allowed: anything but POST.429 daily_limit: the shared daily cap is exhausted; try again tomorrow.
Error bodies are { "error": "<code>", "detail": "<human message>" }.