EPIC-3 API Specification
Authentication​
All endpoints except /public/* require JWT authentication.
Authorization: Bearer <token>
Students API​
Create Student​
POST /api/v1/students
Content-Type: application/json
{
"firstName": "Rahul",
"lastName": "Sharma",
"dob": "2015-05-15",
"gender": "Male",
"classId": "uuid",
"sectionId": "uuid",
"guardians": [
{
"firstName": "Rakesh",
"lastName": "Sharma",
"relationship": "Father",
"phone": "9876543210",
"isPrimary": true
}
]
}
Response:
{
"id": "uuid",
"admissionNo": "2025/001",
"firstName": "Rahul",
"lastName": "Sharma",
"class": { "name": "5" },
"section": { "name": "A" },
"status": "ACTIVE"
}
List Students​
GET /api/v1/students?classId=uuid&search=rahul&page=1&limit=20
Get Student Details​
GET /api/v1/students/:id
Update Student​
PATCH /api/v1/students/:id
Content-Type: application/json
{
"bloodGroup": "B+"
}
Classes API​
Create Academic Structure​
POST /api/v1/classes/academic-structure
Content-Type: application/json
{
"academicYear": "2025-2026",
"sectionsPerClass": 3,
"defaultCapacity": 40,
"board": "CBSE"
}
Get Section Strength​
GET /api/v1/classes/:classId/sections
Response:
[
{
"id": "uuid",
"name": "A",
"capacity": 40,
"currentStrength": 35,
"availableSeats": 5,
"classTeacher": { "name": "Mrs. Priya Singh" }
}
]
Admission Inquiry API (Public)​
Submit Inquiry​
POST /api/v1/public/admission-inquiry
Content-Type: application/json
X-Tenant-Id: school-subdomain
{
"parentName": "Rakesh Sharma",
"parentPhone": "9876543210",
"parentEmail": "rakesh@email.com",
"childName": "Rahul",
"childDob": "2015-05-15",
"applyingForClass": "5",
"academicYear": "2025-2026"
}
Response:
{
"inquiryNumber": "INQ-2025-00123",
"status": "NEW",
"message": "Inquiry submitted successfully"
}
Chat with AI​
POST /api/v1/public/admission-inquiry/:inquiryNumber/chat
Content-Type: application/json
{
"message": "What is the admission fee for Class 5?"
}
Response:
{
"message": "The admission fee for Class 5 is ₹25,000...",
"suggestedActions": [
{ "type": "SCHEDULE_VISIT", "label": "Schedule a Visit" },
{ "type": "APPLY_NOW", "label": "Apply Now" }
]
}
Documents API​
Upload Document​
POST /api/v1/students/:id/documents
Content-Type: multipart/form-data
file: <binary>
documentType: BIRTH_CERTIFICATE
documentNumber: BC-12345
Get Document URL​
GET /api/v1/students/:id/documents/:docId/url
Response:
{
"url": "https://s3.amazonaws.com/...",
"expiresIn": 300
}
Promotion API​
Initiate Bulk Promotion​
POST /api/v1/promotions/bulk
Content-Type: application/json
{
"fromClassId": "uuid",
"toAcademicYear": "2025-2026",
"studentIds": ["uuid1", "uuid2"],
"detainedStudentIds": ["uuid3"]
}
Response:
{
"operationId": "uuid",
"status": "QUEUED",
"totalStudents": 35
}
Check Progress​
GET /api/v1/promotions/operations/:operationId
Transfer Certificate API​
Generate TC​
POST /api/v1/students/:id/tc
Content-Type: application/json
{
"reason": "TRANSFER",
"lastAttendanceDate": "2025-03-31",
"conduct": "Good",
"allDuesCleared": true
}
Response:
{
"tcNumber": "TC/2025/00001",
"downloadUrl": "https://...",
"verificationUrl": "https://verify.edupulse.in/tc/ABC123"
}
Verify TC (Public)​
GET /api/v1/public/verify-tc/:code
Error Responses​
{
"statusCode": 400,
"message": "Validation failed",
"errors": [
{ "field": "phone", "message": "Invalid phone number" }
]
}
Rate Limits​
| Endpoint | Limit |
|---|---|
| Public inquiry | 5/minute |
| Public chat | 30/minute |
| Authenticated | 100/minute |