The Skills and Items APIs expose the curriculum taxonomy and exercise bank. Use these endpoints to browse topics, search error codes, and manage or generate exercises. Skills (backed by theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/vruizz22/innova-backend-serverless/llms.txt
Use this file to discover all available pages before exploring further.
Topic model) represent curriculum units such as “Subtraction with Borrowing,” while Items (backed by Exercise) are the individual problems students attempt, each carrying IRT calibration parameters.
Skills
GET /skills
List all skills (topics) in the curriculum, ordered by unit. Authentication: JWT requiredUUID of the topic.
Short key (e.g.
subtraction_borrow).Human-readable display name.
UUID of the parent unit.
Optional description of the topic.
GET /skills/taxonomy
Return the full math error taxonomy as a tree: domains → subdomains. This is the classification catalog used by the guide wizard and the AI classifier engine. Unlike the curriculum topics, the taxonomy is always fully populated. Authentication: JWT requiredDomain UUID.
Short domain code (e.g.
ARITH, FRACT, GEOM).Domain display name.
Array of
{ id, code, name } objects — the subdomains belonging to this domain.GET /skills/error-tags
Search the ACTIVE error catalog. Used by the teacher manual-override UI to populate the typeahead when a teacher wants to override an automatically assigned error tag. Reads the live backend catalog (2,600+ tags) rather than any bundled seed, so results always match what the classifier can assign. Authentication: JWT requiredCase-insensitive substring search over
code, name, and description.Filter to a single domain (e.g.
ARITH, FRACT). Pick codes from GET /skills/taxonomy.Maximum results to return. Clamped to
[1, 50]. Defaults to 20.Error tag code (e.g.
ARITH_SUB_BORROW_OMITTED_TENS_G3).Human-readable error name.
Subdomain this tag belongs to, if set.
Parent domain code.
GET /skills/:id
Get a single skill by UUID. Authentication: JWT requiredUUID of the skill (topic).
POST /skills
Create a new skill (topic). The service automatically associates the new topic with the first available unit. If no units exist, runpnpm seed:full first.
Authentication: JWT required
Short code used throughout the system (e.g.
subtraction_borrow). Maps to the code column.Display name (e.g.
Subtraction with Borrowing).Optional description of the topic.
201 Created — the created Topic object.
PATCH /skills/:id
Update an existing skill. All fields fromCreateSkillDto are optional.
Authentication: JWT required
UUID of the skill to update.
New short code. Updates the
code column.New display name.
New description.
DELETE /skills/:id
Delete a skill by UUID. Authentication: JWT requiredUUID of the skill to delete.
204 No Content on success. Returns false (not 404) if the skill does not exist — check your UUID.
GET /skills/:id/prerequisites
Traverse the prerequisite graph for a skill. Returns the list of prerequisite topic codes that must be mastered before this skill. Authentication: JWT requiredUUID of the skill.
The requested skill UUID.
Array of prerequisite topic
code strings.Items
GET /items
List exercise bank items, optionally filtered by skill/topic code. OnlyACTIVE exercises are returned.
Authentication: JWT required
Filter by topic
code (e.g. subtraction_borrow). The topic query param is accepted as an alias.Alias for
skillKey.Number of items to return. Defaults to
32. Clamped to [1, 100].UUID of the exercise.
UUID of the associated topic.
Short topic code.
Topic display name.
{ prompt, problem, expectedAnswer, correct_answer_latex } — the exercise content.Derived from
irtB: easy (≤ −0.4), medium, or hard (≥ 0.7).IRT discrimination parameter.
IRT difficulty parameter.
Origin of the exercise (e.g.
TEACHER_AUTHORED, AI_GENERATED).ISO 8601 timestamp.
POST /items
Create a new exercise item. TheskillId field is resolved as a topic UUID for backward compatibility.
Authentication: JWT required
UUID of the topic (skill) this exercise belongs to.
Exercise content object. Must contain
prompt (string, non-empty). Example: { "prompt": "53 - 26" }.IRT discrimination parameter (e.g.
1.1).IRT difficulty parameter (e.g.
-0.25).201 Created — the raw Exercise database record.
The
source field is automatically set to TEACHER_AUTHORED for items created via this endpoint.GET /items/:id
Get a single exercise item by UUID. Authentication: JWT requiredUUID of the exercise item.
ItemView object (same shape as the array items returned by GET /items). Returns 404 if the exercise does not exist.
GET /items/:id/irt
Get read-only IRT (Item Response Theory) parameters for an exercise. Use this to inspect calibration data without loading the full item content. Authentication: JWT requiredUUID of the exercise item.
Discrimination parameter — how well the item differentiates ability levels. Higher values indicate steeper item characteristic curves.
Difficulty parameter — the ability level at which a student has a 50% probability of answering correctly. Negative values indicate easier items.
The IRT parameters stored here are the values set at item creation or last update. Continuous calibration from student response data is handled by the AI engine pipeline — check the
classifiedAt field on Attempt records for calibration timestamps.POST /items/generate
Enqueue an AI exercise generation job for a subdomain. The request is published to theEXERCISE_GENERATE_QUEUE_URL SQS queue and returns immediately with 202 Accepted. Generated items will appear in the bank within a few minutes, depending on queue depth.
Authentication: JWT required
Subdomain code to generate exercises for (e.g.
subtraction_borrow).Target grade level (
1–12).Array of error tag codes the generated items should target (e.g.
["ARITH_SUB_BORROW_OMITTED_TENS_G3"]).Number of exercises to generate (
1–10).202 Accepted
Always
0 at enqueue time — the items have not been created yet.Confirmation message (in Spanish, matching the Chilean curriculum context).