AIDidact / api /openapi.yaml
mfirat007's picture
Upload 39 files
054e65a verified
openapi: 3.1.0
info:
title: AIDidact API
version: 1.0.0
description: API contract for the AIDidact AI-powered microlearning ecosystem.
servers:
- url: https://api.aididact.example.com
paths:
/v1/auth/register:
post:
summary: Register a learner
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterLearnerRequest'
responses:
'201':
description: Registered
content:
application/json:
schema:
$ref: '#/components/schemas/LearnerRegistrationResponse'
/v1/learners/{learnerId}/profile:
get:
summary: Get learner profile
parameters:
- $ref: '#/components/parameters/LearnerId'
responses:
'200':
description: Learner profile
content:
application/json:
schema:
$ref: '#/components/schemas/LearnerProfile'
patch:
summary: Update learner goals or preferences
parameters:
- $ref: '#/components/parameters/LearnerId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLearnerProfileRequest'
responses:
'200':
description: Updated
/v1/learners/{learnerId}/diagnostic-assessment:
post:
summary: Submit readiness assessment
parameters:
- $ref: '#/components/parameters/LearnerId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DiagnosticSubmission'
responses:
'202':
description: Accepted
/v1/modules:
get:
summary: List modules
responses:
'200':
description: Module list
/v1/modules/{moduleId}:
get:
summary: Get module detail
parameters:
- $ref: '#/components/parameters/ModuleId'
responses:
'200':
description: Module detail
content:
application/json:
schema:
$ref: '#/components/schemas/ModuleDetail'
/v1/learners/{learnerId}/recommendations:
get:
summary: Get ranked module recommendations
parameters:
- $ref: '#/components/parameters/LearnerId'
responses:
'200':
description: Recommendations
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/RecommendationItem'
/v1/enrollments:
post:
summary: Enroll learner in module
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [learnerId, moduleId]
properties:
learnerId:
type: string
format: uuid
moduleId:
type: string
format: uuid
responses:
'201':
description: Enrolled
/v1/interactions:
post:
summary: Ingest interaction event
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InteractionEvent'
responses:
'202':
description: Accepted
/v1/assessments/{assessmentId}/attempts:
post:
summary: Create unique assessment attempt
parameters:
- $ref: '#/components/parameters/AssessmentId'
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [learnerId]
properties:
learnerId:
type: string
format: uuid
responses:
'201':
description: Attempt created
content:
application/json:
schema:
$ref: '#/components/schemas/AssessmentAttempt'
/v1/assessments/attempts/{attemptId}/responses:
post:
summary: Submit responses
parameters:
- $ref: '#/components/parameters/AttemptId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssessmentResponseSubmission'
responses:
'202':
description: Accepted for grading
/v1/assessments/attempts/{attemptId}:
get:
summary: Get assessment result
parameters:
- $ref: '#/components/parameters/AttemptId'
responses:
'200':
description: Result
content:
application/json:
schema:
$ref: '#/components/schemas/AssessmentAttemptResult'
/v1/learners/{learnerId}/dashboard:
get:
summary: Get learner dashboard
parameters:
- $ref: '#/components/parameters/LearnerId'
responses:
'200':
description: Dashboard
content:
application/json:
schema:
$ref: '#/components/schemas/LearnerDashboard'
components:
parameters:
LearnerId:
in: path
name: learnerId
required: true
schema:
type: string
format: uuid
ModuleId:
in: path
name: moduleId
required: true
schema:
type: string
format: uuid
AssessmentId:
in: path
name: assessmentId
required: true
schema:
type: string
format: uuid
AttemptId:
in: path
name: attemptId
required: true
schema:
type: string
format: uuid
schemas:
RegisterLearnerRequest:
type: object
required: [email, firstName, lastName, timezone, educationalLevel, goals, priorLearning]
properties:
email:
type: string
format: email
firstName:
type: string
lastName:
type: string
timezone:
type: string
educationalLevel:
type: string
priorLearning:
type: array
items:
$ref: '#/components/schemas/PriorLearningItem'
goals:
type: array
items:
$ref: '#/components/schemas/LearnerGoal'
preferences:
$ref: '#/components/schemas/LearnerPreferences'
LearnerRegistrationResponse:
type: object
properties:
learnerId:
type: string
format: uuid
nextStep:
type: string
PriorLearningItem:
type: object
properties:
learningType:
type: string
enum: [formal, non_formal, informal]
title:
type: string
provider:
type: string
description:
type: string
LearnerGoal:
type: object
properties:
goalHorizon:
type: string
enum: [short_term, long_term]
goalText:
type: string
targetDate:
type: string
format: date
LearnerPreferences:
type: object
properties:
preferredModalities:
type: array
items:
type: string
preferredSessionLengthMinutes:
type: integer
DiagnosticSubmission:
type: object
properties:
responses:
type: array
items:
type: object
additionalProperties: true
LearnerProfile:
type: object
properties:
learnerId:
type: string
format: uuid
readinessLevel:
type: string
readinessScore:
type: number
masteryMap:
type: object
additionalProperties: true
UpdateLearnerProfileRequest:
type: object
properties:
goals:
type: array
items:
$ref: '#/components/schemas/LearnerGoal'
preferences:
$ref: '#/components/schemas/LearnerPreferences'
ModuleDetail:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
description:
type: string
objectives:
type: array
items:
type: object
additionalProperties: true
units:
type: array
items:
type: object
additionalProperties: true
completionCriteria:
type: object
additionalProperties: true
RecommendationItem:
type: object
properties:
moduleId:
type: string
format: uuid
rank:
type: integer
score:
type: number
reasons:
type: array
items:
type: string
InteractionEvent:
type: object
properties:
learnerId:
type: string
format: uuid
moduleId:
type: string
format: uuid
unitId:
type: string
format: uuid
activityId:
type: string
format: uuid
eventType:
type: string
eventTimestamp:
type: string
format: date-time
durationMs:
type: integer
payload:
type: object
additionalProperties: true
AssessmentAttempt:
type: object
properties:
attemptId:
type: string
format: uuid
assessmentId:
type: string
format: uuid
timeLimitMinutes:
type: integer
items:
type: array
items:
type: object
additionalProperties: true
AssessmentResponseSubmission:
type: object
properties:
responses:
type: array
items:
type: object
additionalProperties: true
AssessmentAttemptResult:
type: object
properties:
attemptId:
type: string
format: uuid
score:
type: number
passStatus:
type: string
integrityStatus:
type: string
humanReviewRequired:
type: boolean
LearnerDashboard:
type: object
properties:
learnerId:
type: string
format: uuid
timeOnTaskMinutes7d:
type: number
dropoutRisk:
type: number
successProbability:
type: number
adaptiveFeedback:
type: array
items:
type: string