API documentation
Classifies free-text credential and education descriptions into a standard taxonomy. Everything below reflects the live, deployed API.
Authentication
Every request except /signup and
/verify-token needs an
X-API-Key header.
Don't have one yet? Get a free key.
curl -X POST https://degree-classification.onrender.com/classify \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '{"text": "bachlers in compueter sciecne"}'
Quick start
curl -X POST https://degree-classification.onrender.com/classify \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '{"text": "bachlers in compueter sciecne"}'
import requests
response = requests.post(
"https://degree-classification.onrender.com/classify",
headers={"X-API-Key": "YOUR_KEY"},
json={"text": "bachlers in compueter sciecne"},
)
print(response.json())
const res = await fetch("https://degree-classification.onrender.com/classify", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "YOUR_KEY",
},
body: JSON.stringify({ text: "bachlers in compueter sciecne" }),
});
const data = await res.json();
console.log(data);
Response
{
"input": "bachlers in compueter sciecne",
"level": "bachelor",
"field": "computer science",
"confidence": 0.91,
"method": "fuzzy_alias_match"
}
Endpoints
Classify
/classify
Classifies a single piece of text.
| Field | Type | Description |
|---|---|---|
text |
string, required | The free-text credential description. |
use_trained_classifier |
boolean, optional | Use the trained ML model instead of the default rules and embeddings pipeline for the semantic match layer. Default false. See the demo page for a side by side comparison. |
/classify/batch
Same as above, but takes a JSON array of {"text": "...", "use_trained_classifier": false}
objects and returns an array of results in the same order.
curl -X POST https://degree-classification.onrender.com/classify/batch \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '[{"text": "PharmD"}, {"text": "some made up credential"}]'
Response fields
| Field | Description |
|---|---|
input |
The original text you sent. |
level |
One of the 11 taxonomy levels below, or null if nothing matched confidently. Never a guessed answer. |
field |
Extracted major or field if present (for example "computer science" from "bachelor's in computer science"), else null. |
confidence |
0.0 to 1.0. Exact and keyword matches are typically 0.9 and up. Semantic matches vary. |
method |
Which pipeline layer produced the answer. See below. |
Taxonomy levels
ged_or_hs_equivalency
high_school_diploma
vocational_certificate
associate
bachelor
master
doctorate_academic
doctorate_professional
rn_diploma
residency_fellowship
professional_certification
Method values
| Method | Meaning |
|---|---|
exact_alias_match |
The input exactly matched a known phrasing. |
keyword_containment_match |
A distinctive alias phrase was found standalone inside a longer sentence. |
fuzzy_alias_match |
Typo tolerant match against a known phrasing. |
semantic_match |
Matched by meaning or similarity, not exact wording. |
llm_fallback |
An LLM resolved genuinely novel phrasing the rules above missed. |
negation_detected |
The input explicitly denies holding a credential, like "not a real degree." Returns null. |
incomplete_education_detected |
The input describes education in progress or never finished. Returns null. |
unmatched_needs_review |
Nothing matched confidently. Returns null rather than guessing. |
Usage
/usage
Returns your call count and last called time.
curl https://degree-classification.onrender.com/usage \
-H "X-API-Key: YOUR_KEY"
{ "tenant_id": "you@company.com", "call_count": 42, "last_called": "2026-08-01T12:00:00Z" }
Signup, no auth required
/signup
Email plus optional company. Sends a one-time verification link and does not issue a key directly. See the Get API key page for the actual signup form.
/verify-token
Exchanges a valid, unused verification token from the emailed link for a real API key. Single use.
Rate limits and errors
| Status | Meaning |
|---|---|
| 401 | Missing, invalid, or revoked X-API-Key. |
| 429 | Rate limit exceeded. Self-serve keys default to 30 requests per minute. |
| 400 | Malformed request, for example an invalid email at signup or an expired or already-used verification token. |
Need a higher limit for production use? Reach out. Early-access limits are intentionally conservative, not a hard ceiling.
Good to know
- The API runs on a free hosting tier and sleeps after about 15 minutes of inactivity. The first request after a gap can take 30 to 60 seconds to wake it up.
- The taxonomy is currently US-centric, with partial UK and Commonwealth coverage for A-levels and GCSEs.
level: nullis a deliberate, confident answer meaning nothing matched. It is not an error. Checkmethodto see why.