One Tenant-Scoped API.Every LMS & Assessment Primitive.
Programmatic access to course authoring, bulk roster ingestion, monotonic exam timers, WebAssembly proctoring telemetry, and real-time SSE streams behind an isolated PostgreSQL schema boundary.
Authentication & Tenant Scoping
Every request is authenticated with an administrative Bearer API token and scoped to an isolated PostgreSQL tenant schema via `X-Tenant-Id`. Tokens are generated in your institutional dashboard.
curl -X GET "https://api.cognaxa.genfinish.com/v1/courses" \
-H "Authorization: Bearer ck_live_8f3a92b1e4c70d..." \
-H "X-Tenant-Id: tnt_univ_8841a" \
-H "Content-Type: application/json"Bulk Student Roster Ingestion
Programmatic high-speed student roster ingestion with deterministic email deduplication, course enrollment mapping, and cohort grouping. Processes 10,000+ records in a single payload.
// Request: POST /v1/roster/import
{
"sync_mode": "upsert",
"deduplicate": true,
"cohort_id": "cohort_fa2026_eng",
"students": [
{
"email": "j.smith@university.edu",
"full_name": "James Smith",
"student_id": "U98214301",
"enrollments": ["course_cs101_fa26", "course_eng202_fa26"]
},
{
"email": "m.garcia@university.edu",
"full_name": "Maria Garcia",
"student_id": "U98214302",
"enrollments": ["course_cs101_fa26"]
}
]
}
// Response: HTTP/2 200 OK
{
"imported_count": 2,
"created": 2,
"updated": 0,
"duplicates_resolved": 0,
"batch_id": "batch_rst_99182a",
"execution_time_ms": 48
}Course Management & Publishing
Hierarchical course structure management. Organize modules, timed lessons, rich video references, and publish courses with atomicity.
GET /v1/courses # List tenant courses (paginated)
POST /v1/courses # Create course draft
GET /v1/courses/:id # Fetch syllabus, modules, and lessons
PATCH /v1/courses/:id # Update metadata, instructor assignments
DELETE /v1/courses/:id # Archive course (soft-delete)
POST /v1/courses/:id/publish # Atomically publish syllabus to active rosterQuizzes & Server-Synced Attempts
Manage objective and essay assessments. Attempts use monotonic clocks locked to our Redis backend to make student client-clock rollbacks impossible.
GET /v1/quizzes/:id
POST /v1/quizzes/:id/attempts # Starts monotonic exam timer
PATCH /v1/quizzes/:id/attempts/:attemptId # Ingests student answer vector
POST /v1/quizzes/:id/attempts/:attemptId/submit
GET /v1/quizzes/:id/attempts/:attemptId/scoreNative AI Proctoring Telemetry
Fetch real-time proctoring incidents generated by the client-side WebAssembly inference runtime (face presence, tab blur, audio anomalies, multi-face alerts).
// Response: GET /v1/proctoring/sessions/sess_9918a/events
{
"session_id": "sess_9918a",
"exam_id": "quiz_midterm_cs101",
"student_id": "usr_8812a",
"incidents_count": 1,
"events": [
{
"event_id": "evt_p9012a",
"type": "tab_blur_detected",
"severity": "medium",
"timestamp_offset_seconds": 842.15,
"metadata": {
"duration_ms": 4200,
"window_focused": false
}
}
]
}Real-Time Event Streams (SSE)
Subscribe to tenant-scoped real-time event streams via Server-Sent Events (SSE). Backed by Redis Pub/Sub for sub-second exam state and grading updates.
curl -N -H "Authorization: Bearer ck_live_..." \
-H "X-Tenant-Id: tnt_univ_8841a" \
https://api.cognaxa.genfinish.com/v1/events/stream
# Stream Output:
# event: quiz.attempt.submitted
# data: {"attempt_id": "att_881a", "student": "j.smith@univ.edu", "score": 94}
#
# event: proctoring.incident.flagged
# data: {"session_id": "sess_991a", "type": "multiple_faces_present"}Analytics & Warehouse Pipeline (NDJSON)
Pull high-volume telemetry exports for Snowflake, BigQuery, or Amazon Redshift. Supports streaming NDJSON for high-efficiency ingestion.
curl -X GET "https://api.cognaxa.genfinish.com/v1/analytics/attempts.ndjson?from=2026-01-01&to=2026-06-30" \
-H "Authorization: Bearer ck_live_..." \
-H "X-Tenant-Id: tnt_univ_8841a" \
--output semester_attempts.ndjsonOutbound HMAC Webhooks (Beta)
Outbound webhook notifications with HMAC-SHA256 signature headers, exponential backoff retries, and automatic idempotency keying.
Headers sent with every webhook dispatch:
X-Cognaxa-Signature: t=1712078400,v1=52571838e5edd0f3512f...
X-Cognaxa-Event-Type: quiz.attempt.submitted
X-Cognaxa-Delivery-Id: del_99214a
Available events:
course.published
quiz.attempt.submitted
quiz.attempt.graded
proctoring.incident.flagged
certificate.issued
roster.batch.completedToken-Bucket Rate Limits
Default rate limits: 600 requests/minute, 10,000 requests/hour. Configurable for high-volume finals bursts. HTTP 429 returns standard Retry-After headers.
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 587
X-RateLimit-Reset: 1712078400
Retry-After: 12Ready to Transform Your Learning Operations?
Built for organizations and institutions where exam day is non-negotiable — secure by default, native AI proctoring, one vendor on the line.