Skip to main content

Student and Spot Assessment Data API

Overview​

This API provides endpoints to retrieve student and spot assessment data within a specified date range. The data can be filtered by various parameters such as date range, limit, offset, and actor type.


Student Assessment​

Student assessment data done by the Teacher, Mentor, and Examiner usually aims to evaluate performance or compliance over a defined period.


Spot Assessment​

Spot assessments, done by mentors only, are often used to check adherence to standards or procedures in real-time, potentially identifying issues or irregularities that might not be apparent during planned assessments.


Endpoints​

1. Student Assessment Data​

URL: {{base_url}}/data/student-assessment-data
Method: GET
Description: Retrieves student assessment data filtered by date ranges (from_date/to_date or synced_from/synced_to), actor type, limit, and pagination using either offset or cursor-based (key-based) method.


Query Parameters:

  • Date Range (Required):

    • You must provide exactly one date range: either from_date and to_date or synced_from and synced_to.
    • The date range cannot exceed 31 days.
    • Dates should be in YYYY-MM-DD format.
  • Date Range Parameters:

    • from_date (conditional): Start date for filtering data.
    • to_date (conditional): End date for filtering data.
    • synced_from (conditional): Start date based on data sync date.
    • synced_to (conditional): End date based on data sync date.
  • Pagination Parameters:

    • limit (optional): Maximum number of records to return. Default is 100000.
    • offset (optional): Offset for the data retrieval (used for offset-based pagination).
    • last_created_at and last_mentor_id (optional): Used for key-based (cursor) pagination.
  • actor_type (optional): Filters data by actor type (mentor, teacher, diet mentor, examiner). Case-insensitive.


Usage Rules:

  • Mutually Exclusive Date Ranges: Provide only one range (either created_at range or synced_at range).
  • Required Date Range: Omitting both will cause an error.
  • Pagination Choice: Either use offset or key-based parameters — not both.

Curl Example:

curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-01&to_date=2024-08-31&limit=5&actor_type=mentor' \
--header 'authorization: Bearer <<admin-token>>'

Response Fields:

  • mentor_id: Mentor's ID.
  • phone_no: Mentor's phone number.
  • class: The student's class (grade).
  • user_type: Type of actor (e.g., mentor, teacher).
  • district_name: District name.
  • block_name: Block name.
  • udise: UDISE code of the school.
  • created_at: When the assessment was created.
  • synced_at: When the assessment was synced.
  • result: 'NIPUN', 'NOT NIPUN', or 'Unknown'.
  • student: JSON object (if student info available):
    • student_id
    • student_name
    • gender
    • roll_no
    • class
    • udise

2. Spot Assessment Data​

URL: {{base_url}}/data/spot-assessment-data
Method: GET
Description: Retrieves spot assessment data filtered by date range and pagination.


Query Parameters:

  • from_date (required): Start date (YYYY-MM-DD).
  • to_date (required): End date (YYYY-MM-DD).
  • limit (optional): Default 100000.
  • offset (optional): For pagination.

Curl Example:

curl --location '{{base_url}}/data/spot-assessment-data?limit=50&from_date=2024-04-01&to_date=2024-04-30' \
--header 'authorization: Bearer <<admin-token>>'

Response Fields:

  • phone_no
  • student_id
  • class
  • user_type
  • district_name
  • block_name
  • udise
  • created_at
  • result

🚀 API Call Process

To efficiently retrieve large amounts of data without missing or duplicating records, follow the correct pagination method:


1. Set Date Range​

  • Always provide a valid date range.
  • Maximum allowed window: 31 days.
  • Exceeding 31 days will result in a 400 error.

2. Limit Records​

  • Default maximum: 100000 records per call.
  • Adjust the limit as needed for your application.

3. Pagination Methods​

➡️ Offset-Based Pagination​

Simple pagination using limit and offset.

Steps:

  1. Start with offset=0.
  2. Increment offset by limit after each call.
  3. Stop when the API returns an empty result.

Example Flow:

  • First Call: offset=0

    curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-05&to_date=2024-08-06&limit=100000&offset=0&actor_type=teacher' \
    --header 'authorization: Bearer <admin-token>'
  • Second Call: offset=100000

    curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-05&to_date=2024-08-06&limit=100000&offset=100000&actor_type=teacher' \
    --header 'authorization: Bearer <admin-token>'
  • Third Call: offset=200000

    curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-05&to_date=2024-08-06&limit=100000&offset=200000&actor_type=teacher' \
    --header 'authorization: Bearer <admin-token>'
  • Continue increasing until no data is returned.

🔔 Note: Reset offset=0 whenever you change the date window.


➡️ Key-Based (Cursor) Pagination​

More reliable and recommended for large or dynamic datasets.

Steps:

  1. First call: No last_created_at or last_mentor_id.
  2. From the last record received, capture created_at and mentor_id.
  3. In the next call, pass those as last_created_at and last_mentor_id.
  4. Repeat the process until no more data.

First Call:

curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-05&to_date=2024-08-06&limit=1000' \
--header 'authorization: Bearer <admin-token>'

Sample Last Record from Response:

{
"mentor_id": 5678,
"created_at": "2024-08-05T10:45:00"
}

Second Call (cursor-based):

curl --location '{{base_url}}/data/student-assessment-data?from_date=2024-08-05&to_date=2024-08-06&limit=1000&last_created_at=2024-08-05T10:45:00&last_mentor_id=5678' \
--header 'authorization: Bearer <admin-token>'

🔔 Note:

  • Do not send offset when using cursor-based pagination.
  • Always pick the last record's created_at and mentor_id for the next page.
  • Reset cursor when changing the date window.

📋 Pagination Summary

MethodHow to PaginateRecommended For
Offset-Basedlimit + offsetSmall stable datasets
Key-Basedlimit + last_created_at + last_mentor_idLarge, live-updating datasets

❗ Error Handling

The API includes robust error handling:

ErrorCauseMessage
400 Bad RequestInvalid/missing dates, invalid limit/offset"Invalid input."
400 Bad RequestBoth cursor and offset used"Use either offset or cursor-based pagination"
400 Bad RequestDate window > 31 days"Date range exceeded. The maximum allowed range is 31 days."
401 UnauthorizedMissing/invalid token"Authorization token is missing or invalid."
403 ForbiddenToken lacks permission"You do not have permission to access this resource."
500 Internal Server ErrorUnexpected error"An unexpected error occurred."

🔐 Authorization

All API calls require a valid Bearer token in the Authorization header.

Example:

Authorization: Bearer <your-token>

✅ Quick Checklist Before Calling API

  • Set valid date range (max 31 days).
  • Decide whether to use offset or cursor pagination.
  • Fetch token and add to Authorization header.
  • Start with offset=0 or no cursor for the first page.