canonical: https://jentic.com/apis/classmarker.com/classmarker

# ClassMarker API

The ClassMarker API powers online quiz, test, and exam creation with structured group, link, and access-list management. It exposes endpoints for retrieving recent test results, building question banks, organising questions into nested categories, and gating attempts via access codes. Test administrators can sync results into LMS dashboards, build custom proctoring flows, or push question banks from internal authoring tools. The API is a fit for training providers, certification bodies, and HR teams running technical assessments.

## For AI agents

Manage ClassMarker quizzes, question banks, categories, access lists, and pull recent results for groups and links. Useful for assessment automation, certification, and LMS result sync.

## Scope

Does not handle proctoring video, learner course content, or payment processing - use for ClassMarker quiz, question bank, and result management only.

## Capabilities

- Retrieve recent test results across groups and individual links
- Create and update questions in nested category hierarchies
- Build parent and sub categories to organise question banks
- Add and delete access list codes that gate test attempts
- List all questions with category filters
- Pull aggregate group, link, and exam metadata in a single call
- Update individual questions including options and scoring

## Use cases

### Certification result sync to internal LMS

Training providers often use ClassMarker for the assessment portion of certifications and need results delivered into their internal LMS for badge issuance. Polling GET /v1/groups/recent_results.json or GET /v1/links/recent_results.json on a schedule pulls the latest submissions, and the response can be transformed and forwarded to the LMS. This keeps certification status accurate without manual exports.

Example prompt: Every 15 minutes, call GET /v1/groups/recent_results.json, dedupe against the last cursor, and POST new results to the internal LMS

### Bulk access code provisioning for exam events

Proctored exam events require fresh access codes per candidate so each attempt is uniquely identified. POST /v1/accesslists/{access_list_id}.json adds codes in bulk, and DELETE /v1/accesslists/{access_list_id}.json revokes them after the window closes. This pattern prevents code reuse and gives auditors a clean attempt log.

Example prompt: Generate 200 codes for the June 15 exam window, POST them to access list 4321, and schedule deletion 7 days after the window closes

### Question bank sync from authoring tool

Subject matter experts often author questions in an internal tool or spreadsheet and need them mirrored into ClassMarker. POST /v1/questions.json creates questions, PUT /v1/questions/{question_id}.json updates them, and the category endpoints organise them under parent and sub categories. A nightly sync keeps ClassMarker as the live test catalogue without forcing authors to leave their tool.

Example prompt: Read the latest questions from the authoring spreadsheet and call POST /v1/questions.json or PUT /v1/questions/{question_id}.json to upsert each one under the correct category

### AI agent integration via Jentic

An assessment ops assistant queries Jentic for ClassMarker operations and pulls results, manages access codes, and updates questions in response to natural-language requests. Because the spec does not declare a security scheme, the API key and HMAC signature are configured in Jentic's vault and applied at execution time, keeping the agent free of credential handling.

Example prompt: Receive 'add 100 codes for the AWS exam' from chat, search Jentic for ClassMarker access list, and execute POST /v1/accesslists/{access_list_id}.json with the parsed list ID

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /v1.json | Get groups, links, and exams |
| GET | /v1/groups/recent_results.json | Get recent results for all groups |
| GET | /v1/links/recent_results.json | Get recent results for all links |
| POST | /v1/accesslists/{access_list_id}.json | Add access list codes |
| POST | /v1/questions.json | Create a question |
| PUT | /v1/questions/{question_id}.json | Update a question |
| GET | /v1/categories.json | Get all categories |
| POST | /v1/categories/parent_category.json | Create a parent category |

## Key resources

- **Groups, Links, and Exams** — Top-level collections returned by /v1.json
- **Recent Results** — Latest submissions for groups and links
- **Access Lists** — Codes that gate test attempts
- **Categories** — Parent and sub categories for question organisation
- **Questions** — Question records with options and scoring

## Why Jentic

- **Setup:** Wiring ClassMarker by hand means managing its API key on every request to api.classmarker.com and matching calls to the right .json operation yourself. Through Jentic you install once, import ClassMarker from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** ClassMarker puts ids like the access list id and question id in the URL path (/v1/accesslists/{access_list_id}.json), so a rule can pin your agent to one of those resources. You choose the operations it may call, so updating a question is not included unless you add it.
- **Credential handling:** Your ClassMarker API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'get recent quiz results' or 'create a question in ClassMarker', and Jentic returns the matching operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Typeform API** — Form and quiz platform with results retrieval
- **Moodle API** — Open-source LMS for course delivery and grading
- **Schoology API** — K-12 and higher-ed LMS

## FAQ

### What authentication does the ClassMarker API use?

ClassMarker uses an API key plus an HMAC request signature passed in query parameters; the OpenAPI spec does not declare a securityScheme so the auth is configured at the request level. Through Jentic, both the API key and HMAC secret are stored in the vault and applied at execution time so the agent never handles them directly.

### How do I pull recent quiz results from ClassMarker?

Call GET /v1/groups/recent_results.json for results across all groups or GET /v1/groups/{group_id}/tests/{test_id}/recent_results.json for a specific group-test pair. The link-based equivalents are GET /v1/links/recent_results.json and GET /v1/links/{link_id}/tests/{test_id}/recent_results.json. Poll on a schedule and dedupe against your last cursor.

### Can I bulk-create access codes for an exam window?

Yes. POST /v1/accesslists/{access_list_id}.json adds codes to an existing access list, and DELETE /v1/accesslists/{access_list_id}.json removes them. This is the standard pattern for time-bound exam events where each candidate needs a unique attempt code.

### How do I sync a question bank into ClassMarker via Jentic?

Install the SDK with pip install jentic, then search Jentic for 'create a classmarker question', load the schema, and execute. Use POST /v1/questions.json to create new questions and PUT /v1/questions/{question_id}.json to update existing ones. Categories are managed through /v1/categories.json and the parent_category endpoints.

### Are categories nested in ClassMarker?

Yes. POST /v1/categories/parent_category.json creates a parent category and POST /v1/categories/category.json creates a sub-category under it. Questions are then assigned to a sub-category, giving you a two-level taxonomy for organising large question banks.

### Is the ClassMarker API rate limited?

ClassMarker's published guidance limits unauthenticated and high-frequency calls; specific quotas are not declared in the OpenAPI spec. For result polling, schedule calls at 5-15 minute intervals rather than continuous polling, and back off if the API returns 429 responses.

### Can I limit what my agent is allowed to do with the ClassMarker API?

Yes. Jentic One is self-hosted, so your own rules decide which ClassMarker operations and credentials the agent can use. Because ClassMarker puts identifiers like the access list id and question id in the URL path (for example /v1/accesslists/{access_list_id}.json), you can pin the agent to a single resource, and you choose the operations it may call, so updating a question with PUT /v1/questions/{question_id}.json is not available unless you add it. Read-only work such as GET /v1/groups/recent_results.json can be permitted while write operations stay off.
