Your first API request
Generate a token, choose a dataset, and fetch your institution’s records. Use these JSON examples directly in Postman.
Base URL: https://erp.campuscover.com/ · All API requests use HTTPS POST.
1. Set up Postman
- Create a request and choose POST.
- Enter the endpoint URL shown below.
- Choose Body → raw → JSON. Put the example JSON in the body, not the Params tab.
- Confirm the headers:
Content-Type: application/jsonandAccept: application/json. - Replace example client ID
123with your authorized institution’s client ID.
Create Postman variables named apiKey and token. Store your issued API key in apiKey; it must be a 64-character lowercase hexadecimal value.
2. Generate an access token
https://erp.campuscover.com/generateToken/externalapiSet Authorization → No Auth. Send this body:
{
"apiKey": "{{apiKey}}"
}
Sample response
{
"success": true,
"message": "Token generated successfully",
"data": {
"token": "YOUR_GENERATED_TOKEN",
"token_type": "Bearer",
"expires_in": 3600,
"expires_at": "2026-10-28T04:23:32Z"
},
"pagination": {
"page": 1,
"limit": 100,
"total": 0
}
}
Copy data.token into your Postman token variable. Tokens last one hour; call this endpoint again with the same API key after expiry. The Z in expires_at means UTC.
Use the token for data requests
For every endpoint below, select Authorization → Bearer Token and enter {{token}}. Postman sends Authorization: Bearer {{token}}. Keep the JSON headers and body format from step 1.
Origin header, server-to-server access must be enabled for your API key. For an origin-bound key, send the exact registered HTTPS Origin when generating the token and on every data request. Website login cookies are not required.Student list
Fetch active students for your authorized institution. Omit optional filters to include all active students.
https://erp.campuscover.com/getStudentList/externalapiRequest body · simplest example
{
"clientID": 123,
"page": 1,
"limit": 500
}
Optional filters: studentID, branchID, classID, sectionID, sessionID. Use positive integer IDs; omit filters you do not need. Dates use the format described below.
Sample response · available fields
{
"success": true,
"message": "Records fetched successfully",
"data": [
{
"studentID": 1001,
"clientID": 123,
"branchID": 1,
"classID": 3,
"sectionID": 1,
"sessionID": 10,
"name": "Sample Student",
"adm_no": "ADM-1001",
"reg_no": "REG-1001",
"roll": 12
}
],
"pagination": {
"page": 1,
"limit": 500,
"total": 1
}
}
Attendance
Fetch attendance records. With both dates omitted, the request returns today’s attendance only.
https://erp.campuscover.com/getAttendanceList/externalapiRequest body · simplest example
{
"clientID": 123,
"page": 1,
"limit": 500
}
Optional filters: studentID, branchID, classID, sectionID, sessionID, dateFrom, dateTo. Use positive integer IDs; omit filters you do not need. Dates use the format described below.
Example with a date range
{
"clientID": 123,
"dateFrom": "2026-10-01",
"dateTo": "2026-10-28",
"page": 1,
"limit": 500
}
Attendance status and time values are returned as stored by your institution.
Sample response · available fields
{
"success": true,
"message": "Records fetched successfully",
"data": [
{
"attendanceID": 501,
"clientID": 123,
"branchID": 1,
"sessionID": 10,
"studentID": 1001,
"classID": 3,
"sectionID": 1,
"attendance_date": "2026-10-28",
"subjectID": 0,
"status": "P",
"intime": "08:15:00",
"outtime": "14:00:00"
}
],
"pagination": {
"page": 1,
"limit": 500,
"total": 1
}
}
Fee overdue
Calculate pending balances using the admin fee-overdue report for the requested scope.
https://erp.campuscover.com/getFeeOverdue/externalapiRequest body · simplest example
{
"clientID": 123,
"page": 1,
"limit": 500
}
Optional filters: studentID, branchID, classID, sectionID, sessionID, cutoff_month. Use positive integer IDs; omit filters you do not need. Dates use the format described below.
Example with an explicit session, month and branch
{
"clientID": 123,
"sessionID": 10,
"cutoff_month": 10,
"branchID": 1,
"page": 1,
"limit": 500
}
Only active student records with pending_total > 0 are returned. Amounts use the same calculation as the admin fee-overdue report, including payments at request time. No Update Report action is required. Check meta.as_of_date for the calculation date.
Sample response · available fields
{
"success": true,
"message": "Records fetched successfully",
"data": [
{
"studentID": 1001,
"clientID": 123,
"branchID": 1,
"classID": 3,
"sectionID": 1,
"fee_dues": "2500.00",
"transport_dues": "500.00",
"hostel_dues": "0.00",
"opening_dues": "200.00",
"pending_total": "3200.00",
"due_month_count": 2
}
],
"pagination": {
"page": 1,
"limit": 500,
"total": 1
},
"meta": {
"source": "live_feeoverdue",
"as_of_date": "2026-10-28",
"sessionID": 10,
"cutoff_month": 10
}
}
Fetch every page
There is no single endpoint for all datasets. Fetch students, attendance and fee overdue separately, and paginate each dataset.
- Start with
page: 1andlimit: 500. The default limit is 100; the maximum is 500. - Read
pagination.totalfrom the response. Calculate the last page asceil(total / limit). - Send the same filters with
page: 2, thenpage: 3, until every page is fetched.
Example: 1,200 records at 500 per page require three requests. An empty dataset returns data: [] and total: 0. The maximum page number is 10,000. For longer attendance history, repeat pagination for separate date windows of at most 93 days.
The configured rate limit is 300 requests per minute per API key, including token generation. A 429 response includes a Retry-After header.
Troubleshooting
| HTTP status | What to check |
|---|---|
| 400 · Invalid JSON | Use a JSON object with double quotes and no trailing commas. |
| 401 · Invalid credentials or token | Check the API key, or generate a new token if the previous one expired. |
| 403 · Access denied | Check the authorized client ID, registered Origin and server-to-server setting. |
| 422 · Invalid fee scope | Use a session belonging to the client and a cutoff month within the configured fee session. |
| 405 · Wrong method | Use POST over HTTPS. |
| 415 · Use JSON or form-data | Choose Body → raw → JSON and send Content-Type: application/json. Form-data and x-www-form-urlencoded are also accepted; let Postman set their content type. |
| 422 · Invalid input | Check numeric IDs, dates and pagination. If the client has no current session configured, supply sessionID explicitly for fee overdue. |
| 429 · Rate limit | Wait for the number of seconds in Retry-After before trying again. |
| 503 · Temporarily unavailable | Retry later or contact your ERP administrator. |
Sample error response
{
"success": false,
"message": "Use JSON or form-data",
"data": [],
"pagination": {
"page": 1,
"limit": 100,
"total": 0
}
}