Skip to main content

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​

EndpointLimit
Public inquiry5/minute
Public chat30/minute
Authenticated100/minute