# API Documentation - AI Study Assistant ## ๐Ÿ“ก COMPLETE API REFERENCE --- ## ๐Ÿ“‹ OVERVIEW This document provides comprehensive API documentation for the AI Study Assistant backend services, including authentication, content management, learning analytics, and AI-powered tutoring features. --- ## ๐Ÿ” AUTHENTICATION ### Base URL ``` Production: https://api.teachit.app Staging: https://api-staging.teachit.app Development: http://localhost:5001 ``` ### Authentication Methods All API endpoints require authentication using Firebase ID tokens. #### Request Headers ```http Authorization: Bearer Content-Type: application/json X-Request-ID: ``` #### Token Validation ```javascript // Example token validation const idToken = req.headers.authorization?.split('Bearer ')[1]; const decodedToken = await admin.auth().verifyIdToken(idToken); const uid = decodedToken.uid; ``` --- ## ๐Ÿ‘ค USER MANAGEMENT ### Sign Up ```http POST /auth/signup ``` **Request Body:** ```json { "email": "student@school.com", "password": "securePassword123", "role": "student", "schoolId": "school123", "profile": { "name": "John Doe", "grade": 10, "section": "A" } } ``` **Response:** ```json { "success": true, "user": { "uid": "user123", "email": "student@school.com", "role": "student", "profile": { "name": "John Doe", "grade": 10, "section": "A" }, "createdAt": "2026-05-06T20:00:00Z" }, "token": "firebase_id_token" } ``` ### Sign In ```http POST /auth/signin ``` **Request Body:** ```json { "email": "student@school.com", "password": "securePassword123" } ``` **Response:** ```json { "success": true, "user": { "uid": "user123", "email": "student@school.com", "role": "student", "profile": { "name": "John Doe", "grade": 10, "section": "A" } }, "token": "firebase_id_token" } ``` ### Get User Profile ```http GET /auth/profile ``` **Response:** ```json { "success": true, "user": { "uid": "user123", "email": "student@school.com", "role": "student", "schoolId": "school123", "profile": { "name": "John Doe", "grade": 10, "section": "A", "avatar": "https://storage.googleapis.com/avatars/user123.jpg" }, "preferences": { "language": "en", "theme": "light", "notifications": true } } } ``` --- ## ๐Ÿค– AI TUTORING ### Ask Tutor ```http POST /tutor/ask ``` **Request Body:** ```json { "query": "What is a derivative?", "mode": "EXPLANATION", "context": { "subject": "Mathematics", "currentTopic": "Calculus" }, "studentInfo": { "level": 2, "grade": 10 } } ``` **Response:** ```json { "success": true, "response": { "text": "A derivative is a concept that measures how a function changes as its input changes...", "sources": [ { "chunkId": "chunk123", "title": "Introduction to Derivatives", "relevance": 0.95 } ], "metadata": { "mode": "EXPLANATION", "responseTime": 1.2, "tokens": 156, "model": "claude-3-5-sonnet-20241022" } }, "interactionId": "interaction123" } ``` ### Get Chat History ```http GET /tutor/history?limit=20&offset=0 ``` **Response:** ```json { "success": true, "interactions": [ { "id": "interaction123", "query": "What is a derivative?", "response": "A derivative is a concept...", "mode": "EXPLANATION", "timestamp": "2026-05-06T20:00:00Z", "feedback": { "rating": 5, "comment": "Very helpful!" } } ], "total": 45, "hasMore": true } ``` ### Submit Feedback ```http POST /tutor/feedback ``` **Request Body:** ```json { "interactionId": "interaction123", "rating": 5, "comment": "Very helpful explanation", "category": "content_quality" } ``` **Response:** ```json { "success": true, "feedbackId": "feedback123" } ``` --- ## ๐Ÿ“š CONTENT MANAGEMENT ### Upload Content ```http POST /content/upload ``` **Request (multipart/form-data):** ``` file: [file_content] fileName: "derivatives_lesson.pdf" mimeType: "application/pdf" metadata: { "subject": "Mathematics", "concept": "Derivatives", "difficulty": 0.6, "grade": 10, "language": "en" } ``` **Response:** ```json { "success": true, "contentId": "content123", "chunks": [ { "id": "chunk123", "text": "A derivative measures the rate of change...", "metadata": { "concept": "Derivatives", "difficulty": 0.6, "quality": 0.85 } } ], "processingTime": 2.3 } ``` ### Get Content List ```http GET /content/list?subject=Mathematics&concept=Derivatives&limit=10 ``` **Response:** ```json { "success": true, "content": [ { "id": "content123", "title": "Introduction to Derivatives", "subject": "Mathematics", "concept": "Derivatives", "difficulty": 0.6, "grade": 10, "chunkCount": 12, "uploadedAt": "2026-05-06T20:00:00Z", "uploadedBy": "teacher123" } ], "total": 25, "hasMore": true } ``` ### Get Content Details ```http GET /content/{contentId} ``` **Response:** ```json { "success": true, "content": { "id": "content123", "title": "Introduction to Derivatives", "subject": "Mathematics", "concept": "Derivatives", "difficulty": 0.6, "grade": 10, "chunks": [ { "id": "chunk123", "text": "A derivative measures the rate of change...", "metadata": { "concept": "Derivatives", "difficulty": 0.6, "quality": 0.85, "wordCount": 156 } } ], "uploadedAt": "2026-05-06T20:00:00Z", "uploadedBy": "teacher123" } } ``` --- ## ๐Ÿ“ QUIZ SYSTEM ### Create Quiz ```http POST /quiz/create ``` **Request Body:** ```json { "title": "Derivatives Quiz", "subject": "Mathematics", "concept": "Derivatives", "grade": 10, "difficulty": 0.5, "questions": [ { "type": "multiple_choice", "question": "What is the derivative of f(x) = xยฒ?", "options": [ "2x", "x", "2", "xยฒ" ], "correctAnswer": 0, "explanation": "Using the power rule, the derivative of xยฒ is 2x." } ], "timeLimit": 30, "passingScore": 70 } ``` **Response:** ```json { "success": true, "quizId": "quiz123", "questions": [ { "id": "question123", "type": "multiple_choice", "question": "What is the derivative of f(x) = xยฒ?", "options": [ "2x", "x", "2", "xยฒ" ] } ] } ``` ### Start Quiz ```http POST /quiz/{quizId}/start ``` **Response:** ```json { "success": true, "attemptId": "attempt123", "quiz": { "id": "quiz123", "title": "Derivatives Quiz", "timeLimit": 30, "questionCount": 5 }, "questions": [ { "id": "question123", "type": "multiple_choice", "question": "What is the derivative of f(x) = xยฒ?", "options": [ "2x", "x", "2", "xยฒ" ] } ], "startedAt": "2026-05-06T20:00:00Z" } ``` ### Submit Quiz Answer ```http POST /quiz/{attemptId}/answer ``` **Request Body:** ```json { "questionId": "question123", "answer": 0, "timeSpent": 15 } ``` **Response:** ```json { "success": true, "correct": true, "explanation": "Using the power rule, the derivative of xยฒ is 2x.", "points": 10, "totalPoints": 50 } ``` ### Complete Quiz ```http POST /quiz/{attemptId}/complete ``` **Response:** ```json { "success": true, "results": { "score": 85, "totalQuestions": 5, "correctAnswers": 4, "timeSpent": 180, "passed": true, "completedAt": "2026-05-06T20:03:00Z" }, "recommendations": [ { "concept": "Chain Rule", "reason": "Related to derivatives", "priority": "medium" } ] } ``` --- ## ๐Ÿ“Š LEARNING ANALYTICS ### Get Learning State ```http GET /analytics/learning-state ``` **Response:** ```json { "success": true, "learningState": { "studentId": "student123", "adaptiveDifficulty": { "currentLevel": 2.3, "targetLevel": 3.0, "adjustmentFactor": 0.1 }, "conceptStates": [ { "concept": "Derivatives", "mastery": 0.75, "confidence": 0.82, "lastInteraction": "2026-05-06T20:00:00Z", "interactions": 12, "correctAnswers": 9 } ], "spacedRepetition": { "nextReviewDue": [ { "concept": "Derivatives", "dueDate": "2026-05-08T20:00:00Z", "priority": "high" } ] }, "metadata": { "totalInteractions": 45, "averageSessionTime": 15.2, "streak": 7, "lastActive": "2026-05-06T20:00:00Z" } } } ``` ### Update Learning State ```http POST /analytics/learning-state ``` **Request Body:** ```json { "concept": "Derivatives", "mastery": 0.8, "confidence": 0.85, "interaction": { "type": "quiz", "correct": true, "timeSpent": 30 } } ``` **Response:** ```json { "success": true, "updated": true, "newMastery": 0.8, "recommendations": [ { "action": "advance_difficulty", "reason": "High mastery achieved" } ] } ``` ### Get Progress Report ```http GET /analytics/progress?period=week&subject=Mathematics ``` **Response:** ```json { "success": true, "progress": { "period": "week", "subject": "Mathematics", "stats": { "totalSessions": 12, "totalTime": 180, "conceptsStudied": 5, "averageScore": 82, "improvement": 15 }, "dailyProgress": [ { "date": "2026-05-06", "sessions": 2, "timeSpent": 30, "concepts": ["Derivatives"], "score": 85 } ], "conceptProgress": [ { "concept": "Derivatives", "mastery": 0.75, "improvement": 0.2, "timeSpent": 60 } ] } } ``` --- ## ๐Ÿซ SCHOOL MANAGEMENT ### Get School Info ```http GET /school/info ``` **Response:** ```json { "success": true, "school": { "id": "school123", "name": "Escola Profissional de Vila do Conde", "settings": { "curriculum": ["Mathematics", "Science", "English"], "language": "en", "policies": { "allowExternalKnowledge": false, "fallbackMode": "partial_with_hint", "minRetrievalConfidence": 0.6 } }, "subscription": { "plan": "premium", "maxStudents": 1000, "maxTeachers": 50, "expiresAt": "2026-12-31T23:59:59Z" } } } ``` ### Get Students ```http GET /school/students?grade=10§ion=A ``` **Response:** ```json { "success": true, "students": [ { "uid": "student123", "name": "John Doe", "email": "john@school.com", "grade": 10, "section": "A", "progress": { "totalSessions": 45, "averageScore": 82, "lastActive": "2026-05-06T20:00:00Z" } } ], "total": 25 } ``` --- ## ๐Ÿ“ˆ TEACHER ANALYTICS ### Get Class Analytics ```http GET /analytics/class?grade=10§ion=A&period=month ``` **Response:** ```json { "success": true, "analytics": { "period": "month", "classSize": 25, "activeStudents": 23, "totalSessions": 345, "averageScore": 78, "topConcepts": [ { "concept": "Derivatives", "mastery": 0.72, "students": 20 } ], "strugglingStudents": [ { "studentId": "student456", "name": "Jane Smith", "averageScore": 65, "conceptsNeedingHelp": ["Chain Rule"] } ], "engagementMetrics": { "dailyActiveUsers": 18, "averageSessionTime": 12.5, "questionFrequency": 3.2 } } } ``` --- ## ๐Ÿ”„ WEBHOOKS ### Webhook Events The system supports webhooks for real-time notifications: #### Event Types - `user.created` - `interaction.completed` - `quiz.completed` - `content.uploaded` - `learning.state.updated` #### Webhook Configuration ```http POST /webhooks/configure ``` **Request Body:** ```json { "url": "https://your-app.com/webhook", "events": ["interaction.completed", "quiz.completed"], "secret": "webhook_secret" } ``` **Response:** ```json { "success": true, "webhookId": "webhook123" } ``` --- ## โš ๏ธ ERROR HANDLING ### Error Response Format ```json { "success": false, "error": { "code": "AUTHENTICATION_REQUIRED", "message": "Authentication token is required", "details": { "field": "authorization", "expected": "Bearer " }, "requestId": "req_123456" } } ``` ### Error Codes | Code | HTTP Status | Description | |------|-------------|-------------| | AUTHENTICATION_REQUIRED | 401 | Firebase token required | | INVALID_TOKEN | 401 | Invalid or expired token | | PERMISSION_DENIED | 403 | Insufficient permissions | | NOT_FOUND | 404 | Resource not found | | VALIDATION_ERROR | 400 | Request validation failed | | RATE_LIMIT_EXCEEDED | 429 | Too many requests | | INTERNAL_ERROR | 500 | Server error | | SERVICE_UNAVAILABLE | 503 | Service temporarily unavailable | --- ## ๐Ÿ“Š RATE LIMITING ### Rate Limits | Endpoint | Requests/Minute | Burst | |----------|------------------|-------| | /tutor/ask | 20 | 5 | | /quiz/* | 30 | 10 | | /content/* | 10 | 3 | | /analytics/* | 50 | 15 | | /auth/* | 100 | 20 | ### Rate Limit Headers ```http X-RateLimit-Limit: 20 X-RateLimit-Remaining: 15 X-RateLimit-Reset: 1623456789 ``` --- ## ๐Ÿ” SEARCH AND FILTERING ### Query Parameters Common parameters across endpoints: - `limit`: Number of items to return (default: 20, max: 100) - `offset`: Number of items to skip (default: 0) - `sort`: Field to sort by - `order`: Sort order (asc/desc, default: desc) - `filter`: Filter criteria (JSON object) - `search`: Search term ### Example Filter ```http GET /content/list?filter={"subject":"Mathematics","difficulty":{"gte":0.5,"lte":0.8}}&sort=uploadedAt&order=desc&limit=10 ``` --- ## ๐Ÿ“ฑ SDK EXAMPLES ### JavaScript/TypeScript ```typescript import { TeachItAPI } from '@teachit/api-client'; const api = new TeachItAPI({ baseURL: 'https://api.teachit.app', token: 'firebase_id_token' }); // Ask tutor const response = await api.tutor.ask({ query: 'What is a derivative?', mode: 'EXPLANATION' }); // Get learning state const learningState = await api.analytics.getLearningState(); ``` ### Flutter/Dart ```dart import 'package:teachit_api/teachit_api.dart'; final api = TeachItAPI( baseURL: 'https://api.teachit.app', token: 'firebase_id_token' ); // Ask tutor final response = await api.tutor.ask( query: 'What is a derivative?', mode: 'EXPLANATION', ); // Get learning state final learningState = await api.analytics.getLearningState(); ``` ### Python ```python from teachit_api import TeachItAPI api = TeachItAPI( base_url='https://api.teachit.app', token='firebase_id_token' ) # Ask tutor response = api.tutor.ask( query='What is a derivative?', mode='EXPLANATION' ) # Get learning state learning_state = api.analytics.get_learning_state() ``` --- ## ๐Ÿงช TESTING ### Test Environment - **URL**: https://api-test.teachit.app - **Authentication**: Use test Firebase project - **Rate Limits**: Disabled for testing ### Test Data ```http POST /auth/test/login ``` **Response:** ```json { "success": true, "token": "test_token", "user": { "uid": "test_user", "role": "student" } } ``` --- ## ๐Ÿ“‹ CHANGE LOG ### Version 1.0.0 (2026-05-06) - Initial API release - Authentication endpoints - AI tutoring functionality - Quiz system - Learning analytics - Content management --- ## ๐Ÿ“ž SUPPORT ### API Support - **Email**: api-support@teachit.app - **Documentation**: https://docs.teachit.app - **Status Page**: https://status.teachit.app ### Community - **GitHub**: https://github.com/teachit/api - **Discord**: https://discord.gg/teachit - **Forum**: https://community.teachit.app --- *Last Updated: 2026-05-06* *Version: 1.0.0* *API Team: Backend Development*