Classify a learning objective by Bloom's Taxonomy level
Turn a learning-objective sentence and its leading action verb into one of the six revised Bloom's Taxonomy levels: remember, understand, apply, analyze, evaluate, or create.
Run — free
The classifier uses a fixed educational verb mapping, so the same verb always produces the same result. It also reports whether a requested fallback was used, making the output suitable for curriculum reviews, objective inventories, course templates, and automated quality checks where predictable classifications matter.
Classify objectives with a consistent verb map
Learning objectives become easier to review when every action verb is interpreted by the same rule. Enter the complete objective sentence in objective and its leading action word in verb. The classifier normalizes capitalization, permits an optional “to” before the verb, and looks up the resulting English verb in a fixed mapping for the revised Bloom's Taxonomy. It returns the original trimmed objective, the normalized verb, the assigned level, and a flag showing whether a default was used. This approach is intentionally deterministic: it does not infer hidden context, consult a model, or change its answer between calls. A fixed mapping is especially useful when several instructors are auditing a shared curriculum and need comparable results. It can reveal that many objectives cluster around recall, or help teams locate objectives intended to require analysis, evaluation, or creation. Because an action verb can carry different meaning in ordinary language, treat the classification as a structured first pass rather than a substitute for professional review of the entire task and its assessment conditions.
Understand how ambiguous and unknown verbs are handled
Bloom verb lists vary across institutions, and some verbs appear under more than one cognitive level. This capability resolves that practical problem by publishing one stable mapping and one answer for each recognized verb. Where common lists overlap, the mapping selects a single level so bulk results remain reproducible. For example, broad verbs such as compare or construct cannot express every nuance of a real assignment by themselves; the returned level reflects the standard lookup used here, not a semantic reading of the sentence. If a verb is missing from the mapping, the request fails with an invalid-input error by default. That strict behavior prevents an unfamiliar word from being silently assigned to an arbitrary category. If your workflow requires every row to receive a value, provide default_level as one of the six canonical level names. The output then sets used_default to true, making fallback classifications easy to filter and inspect later. Invalid level names, empty objectives, empty verbs, and multiword verb phrases are rejected rather than loosely interpreted.
Use the result in curriculum and assessment workflows
The output is designed to fit both individual drafting and systematic curriculum analysis. An instructor can test an objective while writing a lesson, then revise the verb if the returned level does not match the intended cognitive demand. A program team can classify objectives one item at a time, aggregate the level field externally, and inspect whether a course sequence progresses from foundational recall toward application and higher-order work. Quality teams can also compare objective classifications with assessment formats, flagging cases where an objective says evaluate but the associated test only asks learners to recognize a definition. The API price is $0.002 per request, while the same deterministic logic can run in the browser. No network lookup, random choice, or time-dependent data affects the answer. For reliable reporting, keep the full sentence alongside the normalized verb and preserve the used-default flag. Review fallback rows separately, document your institution's interpretation of overlapping verbs, and remember that observable task conditions often matter as much as the verb when judging cognitive complexity.
What you can do with it
Audit a course outline
Classify each objective consistently and identify a syllabus dominated by lower-level cognitive work.
Draft measurable objectives
Check the intended Bloom level while replacing vague wording with an observable action verb.
Review assessment alignment
Compare the classified objective level with the demand of its assignment, activity, or examination item.
FAQ
Which Bloom levels can be returned?
The six revised levels are remember, understand, apply, analyze, evaluate, and create.
What happens when the verb is not mapped?
The request returns an invalid-input error unless you provide a valid default_level.
Does the sentence context change the classification?
No. The objective is retained in the result, but classification is a deterministic lookup of the supplied leading verb.
How are verbs that appear on several Bloom lists handled?
The capability assigns one stable level per verb so repeated and bulk classifications remain consistent.
Can I identify fallback classifications?
Yes. The used_default field is true whenever an unmapped verb receives the requested default level.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/edu/bloom-taxonomy-verb-classify \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"objective":"Compare renewable and nonrenewable energy sources.","verb":"Compare"}'const res = await fetch("https://api.kit.forhosting.com/edu/bloom-taxonomy-verb-classify", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"objective": "Compare renewable and nonrenewable energy sources.",
"verb": "Compare"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/bloom-taxonomy-verb-classify",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"objective": "Compare renewable and nonrenewable energy sources.",
"verb": "Compare"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/bloom-taxonomy-verb-classify", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"objective":"Compare renewable and nonrenewable energy sources.","verb":"Compare"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"objective":"Compare renewable and nonrenewable energy sources.","verb":"Compare"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/bloom-taxonomy-verb-classify", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"objective": "Compare renewable and nonrenewable energy sources.",
"verb": "Compare"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.bloom_taxonomy_verb_classify",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |