# Why Your Assessment Platform Needs an Adaptive Engine API — And How to Add One in a Weekend
If you run an EdTech platform that delivers assessments — practice tests, placement exams, certification quizzes, skill diagnostics — you have a problem you may not have quantified yet: your fixed-form tests are asking too many questions.
A typical 50-question practice test includes 15-20 questions that are either too easy or too hard for any given student. Those questions generate zero diagnostic signal. They waste the student's time, inflate your infrastructure costs, and produce noisier data than necessary. The solution is adaptive item selection — and you do not need to build it yourself.
The Build-vs-Buy Calculation
Building a production-grade adaptive testing engine requires:
This is 6-12 months of R&D for a team with psychometrics expertise. If your team does not include a psychometrician, add 3-6 months for hiring.
The alternative: integrate an adaptive engine API that handles all of the above. Your platform submits items and receives selection decisions. The engine handles calibration, selection, convergence, and balancing. You get adaptive assessments without building the engine.
Integration Architecture
The integration is a three-endpoint pattern:
```python import httpx
QLM_API = "https://api.qlmdev.com/v1" API_KEY = "your-api-key" # from api.qlmdev.com dashboard
headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", }
# 1. Start an adaptive session async def start_session(student_id: str, domain: str, item_bank_id: str) -> dict: async with httpx.AsyncClient() as client: resp = await client.post( f"{QLM_API}/sessions", headers=headers, json={ "student_id": student_id, "domain": domain, "item_bank_id": item_bank_id, "max_items": 25, # convergence may stop earlier "confidence_threshold": 0.90, }, ) resp.raise_for_status() return resp.json() # Returns: {"session_id": "...", "first_item_id": "...", "estimated_items": 15}
# 2. Submit a response and get the next item async def submit_response(session_id: str, item_id: str, correct: bool) -> dict: async with httpx.AsyncClient() as client: resp = await client.post( f"{QLM_API}/sessions/{session_id}/responses", headers=headers, json={ "item_id": item_id, "correct": correct, "response_time_ms": 45000, }, ) resp.raise_for_status() return resp.json() # Returns: { # "next_item_id": "..." or null if converged, # "current_ability": 0.72, # "standard_error": 0.15, # "converged": false, # "items_remaining_estimate": 8 # }
# 3. Get the final report async def get_report(session_id: str) -> dict: async with httpx.AsyncClient() as client: resp = await client.get( f"{QLM_API}/sessions/{session_id}/report", headers=headers, ) resp.raise_for_status() return resp.json() # Returns: { # "ability_estimate": 0.74, # "standard_error": 0.08, # "items_administered": 18, # "convergence_achieved": true, # "domain_scores": {"algebra": 0.82, "geometry": 0.61, ...}, # "questions_saved_vs_fixed": 32, # "reduction_percentage": 64.0 # } ```
That is the entire integration surface. Three endpoints, standard REST, JSON payloads. Your platform owns the UI, the item content, and the student data. The API handles the adaptive logic.
What This Replaces in Your Codebase
If you currently deliver fixed-form assessments, you have code that looks something like this:
```python # Current: fixed-form item selection def get_next_item(session, items_shown): remaining = [i for i in item_bank if i.id not in items_shown] return remaining[0] # or random, or sequential ```
The adaptive API replaces this function. Instead of selecting the next item from a static list, you call the API, which returns the optimal next item based on everything the student has answered so far. Everything else in your assessment flow — rendering the question, collecting the response, displaying results — stays exactly the same.
The Business Case
The numbers are straightforward:
Getting Started
The entire integration — from API key to first adaptive session — takes a weekend for a single backend engineer. The engine handles the psychometrics. You handle the product.
[Start building at api.qlmdev.com](https://api.qlmdev.com)