List your students’ applications in this organization
- Bearer token
- Permission
application/read - Per organization
Lists the applications of your students in this organization, with exam, payment and the student (user) resolved into records. Inside exam, session, category and language stay ids. Applications for closed and past exams are included.
A page at a time: limit is 20 by default and at most 100. No order is guaranteed, so to take a complete snapshot walk every page and remove duplicates by _id.
Your students are the ones your account registered. A student appears here only while they are activated for this organization (their activatedPlatformsThisSeason lists its slug or common) and once they have signed in to it. An application of a student no longer activated here is left out of this list, though listStudentApplications and getApplication still return it.
Match a row to your records by user.mainId, the id you registered the student with; user._id is the organization’s own id for them.
Parameters
Path parameters
| Name | Type | Description |
|---|---|---|
organizationIdrequired | stringpattern ^[0-9a-f]{24}$ | The organization’s Example |
Query parameters
| Name | Type | Description |
|---|---|---|
pageoptional | number | Page number. Defaults to 1. Example |
limitoptional | number | Items per page. Defaults to 20, max 100. Example |
Responses
200 OK
Success: message is "Applications fetched successfully.".
Body
successbooleanrequiredAlways
trueon a success.one of
truemessagestringrequiredexample
Applications fetched successfully.paginationobject · PaginationMetarequiredWhere one page sits in the whole list.
4 fields of pagination
pagenumberrequiredThe page returned, counting from 1.
min
1example1limitnumberrequiredItems per page: the
limityou sent, 20 if you sent none, and never more than 100.min
1max100example20totalnumberrequiredItems across every page.
min
0example57totalPagesnumberrequiredPages at this
limit:total / limit, rounded up.min
0example3
dataarray of ApplicationResponserequired16 fields of each item
_idstringrequiredThe application’s id: what
applicationIdtakes.example
6650a1b2c3d4e5f6a7b8c9e5examobject · ExamRecordResponsenullablerequiredThe exam applied for. Its own
session,categoryandlanguageare ids.nullif the exam no longer exists.14 fields of exam
_idstringrequiredThe exam’s id: the
examIdthatcreateApplicationandmoveApplicationtake.example
6650a1b2c3d4e5f6a7b8c9e1sessionstringThe id of the sitting the exam is on.
example
6650a1b2c3d4e5f6a7b8c9e2categorystringThe id of the exam’s category.
example
6650a1b2c3d4e5f6a7b8c9e3languagestringThe id of the language the exam is sat in, when it has one.
example
6650a1b2c3d4e5f6a7b8c9e4gradesarray of stringThe grades that may sit the exam. A student in any other grade is not offered it and cannot apply to it. Grade ids are the same in every organization.
example
["6650a1b2c3d4e5f6a7b8c9d4"]countriesarray of stringThe countries the exam is restricted to; empty or absent, it is open to every country. Ids of the organization’s own country records, which need not match the ones
listCountriesgives.example
[]examTypestringstandardoressay.one of
standardessayexample
standardexamTimenumberThe time limit, in minutes, from when the student starts.
example
75durationnumberHow many hours the exam can be started in, counted from the start of the sitting.
example
15questionCountnumberHow many questions the exam has.
example
30pricenumberWhat an application costs, as a number; no currency is given. Absent when the exam has no price: an application to it is charged 0.
example
25preventApplicationbooleanWhether the exam is closed to new applications. A closed exam is never listed, so on the exam reads this is
falseor absent.example
falsecreatedAtstringWhen the record was created.
format
date-timeexample2026-09-01T09:30:00.000ZupdatedAtstringWhen the record last changed.
format
date-timeexample2026-09-02T14:05:00.000Z
userobject · StudentRefResponserequiredThe student the application is for.
4 fields of user
_idstringrequiredThe organization’s own id for the student. It differs from the id you registered them with: match on
mainId.example
6650a1b2c3d4e5f6a7b8c9e9mainIdstringrequiredThe student’s id: the one you registered them with, and what every
studentIdtakes.example
6650a1b2c3d4e5f6a7b8c9d0firstNamestringThe student’s first name.
example
JanelastNamestringThe student’s surname.
example
Doe
paymentobject · PaymentResponsenullableThe application’s payment.
nullif the stored reference no longer resolves; absent when none is set.8 fields of payment
_idstringrequiredThe payment’s id.
example
6650a1b2c3d4e5f6a7b8c9e6statusstringrequiredpending: not paid yet.paid: settled; a free exam’s payment ispaidfrom the start, withamount0.canceled: will not be paid. An application whose payment ispaidwith anamountabove 0 cannot be deleted, and can move only to an exam of the same price.one of
pendingpaidcanceledexample
pendingamountnumberWhat is due, or was paid, as a number; no currency is given. 0 for a free exam. Moving an unpaid application to another exam changes it to that exam’s price.
example
25applicationstringThe id of the application it pays for.
example
6650a1b2c3d4e5f6a7b8c9e5examstringThe id of the exam it pays for.
example
6650a1b2c3d4e5f6a7b8c9e1forstringThe organization’s own id for the student it is for.
example
6650a1b2c3d4e5f6a7b8c9e9createdAtstringWhen the payment was created.
format
date-timeexample2026-09-01T09:30:00.000ZupdatedAtstringWhen the payment last changed.
format
date-timeexample2026-09-02T14:05:00.000Z
partnersarray of ApplicationPartnerResponserequiredOn a team exam, the other members of the team. Empty for an exam sat alone.
2 fields of each item
userstringThe team member’s id in this organization. Not one of your students’ ids, and not resolved.
example
6650a1b2c3d4e5f6a7b8c9d6acceptedbooleanWhether they have accepted the invitation to the team.
example
true
participatedbooleanrequiredWhether the student has started the exam. A started application cannot be moved to another exam.
example
falseexamStartstringWhen the student started the exam; absent until then.
format
date-timeexample2026-11-14T10:04:12.000ZexamSubmittedbooleanWhether the student has handed the exam in. A handed-in application cannot be moved to another exam.
example
falsesubmitDatestringWhen the student handed the exam in; absent until then.
format
date-timeexample2026-11-14T11:12:40.000ZsimulationStartedbooleanrequiredWhether the student has started the practice run.
example
falsesimulationStartstringWhen the student started the practice run; absent until then.
format
date-timeexample2026-11-07T10:00:00.000ZsimulationSubmittedbooleanrequiredWhether the student has handed the practice run in.
example
falseremoveAfterstringOnly on an application to an exam on a make-up sitting: when it will be removed, 6 hours after it was made.
format
date-timeexample2026-09-02T14:05:00.000ZuuidstringrequiredA short reference code for the application.
example
a3f-09c-7e1createdAtstringrequiredWhen the application was made.
format
date-timeexample2026-09-01T09:30:00.000ZupdatedAtstringrequiredWhen the application last changed.
format
date-timeexample2026-09-02T14:05:00.000Z
Headers
X-RateLimit-LimitintegerRequests your account may make to this operation per window (100).
X-RateLimit-RemainingintegerRequests left in the current window.
X-RateLimit-ResetintegerSeconds until the current window ends.
Example
{
"success": true,
"message": "Applications fetched successfully.",
"pagination": {
"page": 1,
"limit": 20,
"total": 57,
"totalPages": 3
},
"data": [
{
"_id": "6650a1b2c3d4e5f6a7b8c9e5",
"exam": {
"_id": "6650a1b2c3d4e5f6a7b8c9e1",
"session": "6650a1b2c3d4e5f6a7b8c9e2",
"category": "6650a1b2c3d4e5f6a7b8c9e3",
"language": "6650a1b2c3d4e5f6a7b8c9e4",
"grades": [
"6650a1b2c3d4e5f6a7b8c9d4"
],
"countries": [],
"examType": "standard",
"examTime": 75,
"duration": 15,
"questionCount": 30,
"price": 25,
"preventApplication": false,
"createdAt": "2026-09-01T09:30:00.000Z",
"updatedAt": "2026-09-02T14:05:00.000Z"
},
"user": {
"_id": "6650a1b2c3d4e5f6a7b8c9e9",
"mainId": "6650a1b2c3d4e5f6a7b8c9d0",
"firstName": "Jane",
"lastName": "Doe"
},
"payment": {
"_id": "6650a1b2c3d4e5f6a7b8c9e6",
"status": "pending",
"amount": 25,
"application": "6650a1b2c3d4e5f6a7b8c9e5",
"exam": "6650a1b2c3d4e5f6a7b8c9e1",
"for": "6650a1b2c3d4e5f6a7b8c9e9",
"createdAt": "2026-09-01T09:30:00.000Z",
"updatedAt": "2026-09-02T14:05:00.000Z"
},
"partners": [
{
"user": "6650a1b2c3d4e5f6a7b8c9d6",
"accepted": true
}
],
"participated": false,
"examStart": "2026-11-14T10:04:12.000Z",
"examSubmitted": false,
"submitDate": "2026-11-14T11:12:40.000Z",
"simulationStarted": false,
"simulationStart": "2026-11-07T10:00:00.000Z",
"simulationSubmitted": false,
"removeAfter": "2026-09-02T14:05:00.000Z",
"uuid": "a3f-09c-7e1",
"createdAt": "2026-09-01T09:30:00.000Z",
"updatedAt": "2026-09-02T14:05:00.000Z"
}
]
}401 Unauthorized
unauthorized: The token is missing or malformed, is not signed with your account’s apiSecret, breaks the iat and exp rules, has expired or been revoked, or its account is not active. All of these answer the same.
When
unauthorizedThe token is missing or malformed, is not signed with your account’s
apiSecret, breaks theiatandexprules, has expired or been revoked, or its account is not active. All of these answer the same.
Example
{
"error": {
"code": "unauthorized",
"documentation_url": "https://hub.main-team.org/api/errors#unauthorized",
"message": "Authentication is required or the provided credentials are invalid.",
"request_id": "0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e"
}
}Fields of the error body
errorobject · ErrorDetailrequiredWhat went wrong.
5 fields of error
codestringrequiredA stable machine code: branch on this. Each one is explained at
documentation_url.one of
invalid_emailbad_requestunauthorizedforbiddennot_foundconflictpayload_too_largeunsupported_media_typeunprocessable_entitytoo_many_requestsinternal_errorservice_unavailableexample
not_foundmessagestringrequiredWritten for a person, and may change: never branch on it.
example
Not found!documentation_urlstringrequiredWhere this code is explained.
format
uriexamplehttps://hub.main-team.org/api/errors#not_foundrequest_idstringrequiredThis request’s id, also sent as the
X-Request-Idresponse header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.example
0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8edetailsobjectPresent only where an operation says so, and then with the shape that operation documents — the rows it could not accept, say. Treat it as absent everywhere else, and ignore a
detailsyou do not recognise.
403 Forbidden
forbidden: The token is valid, but no role on your account allows application/read on the organization in the path, or a role denies it.
When
forbiddenThe token is valid, but no role on your account allows
application/readon the organization in the path, or a role denies it.
Example
{
"error": {
"code": "forbidden",
"documentation_url": "https://hub.main-team.org/api/errors#forbidden",
"message": "Insufficient role permissions",
"request_id": "0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e"
}
}Fields of the error body
errorobject · ErrorDetailrequiredWhat went wrong.
5 fields of error
codestringrequiredA stable machine code: branch on this. Each one is explained at
documentation_url.one of
invalid_emailbad_requestunauthorizedforbiddennot_foundconflictpayload_too_largeunsupported_media_typeunprocessable_entitytoo_many_requestsinternal_errorservice_unavailableexample
not_foundmessagestringrequiredWritten for a person, and may change: never branch on it.
example
Not found!documentation_urlstringrequiredWhere this code is explained.
format
uriexamplehttps://hub.main-team.org/api/errors#not_foundrequest_idstringrequiredThis request’s id, also sent as the
X-Request-Idresponse header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.example
0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8edetailsobjectPresent only where an operation says so, and then with the shape that operation documents — the rows it could not accept, say. Treat it as absent everywhere else, and ignore a
detailsyou do not recognise.
404 Not found
not_found: organizationId is not the _id of an organization.
When
not_foundorganizationIdis not the_idof an organization.
Example
{
"error": {
"code": "not_found",
"documentation_url": "https://hub.main-team.org/api/errors#not_found",
"message": "Organization not found!",
"request_id": "0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e"
}
}Fields of the error body
errorobject · ErrorDetailrequiredWhat went wrong.
5 fields of error
codestringrequiredA stable machine code: branch on this. Each one is explained at
documentation_url.one of
invalid_emailbad_requestunauthorizedforbiddennot_foundconflictpayload_too_largeunsupported_media_typeunprocessable_entitytoo_many_requestsinternal_errorservice_unavailableexample
not_foundmessagestringrequiredWritten for a person, and may change: never branch on it.
example
Not found!documentation_urlstringrequiredWhere this code is explained.
format
uriexamplehttps://hub.main-team.org/api/errors#not_foundrequest_idstringrequiredThis request’s id, also sent as the
X-Request-Idresponse header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.example
0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8edetailsobjectPresent only where an operation says so, and then with the shape that operation documents — the rows it could not accept, say. Treat it as absent everywhere else, and ignore a
detailsyou do not recognise.
429 Too many requests
too_many_requests: Your account has made more than 100 requests to this operation in the current 60-second window. Wait the seconds in Retry-After before sending again.
When
too_many_requestsYour account has made more than 100 requests to this operation in the current 60-second window. Wait the seconds in
Retry-Afterbefore sending again.
Headers
Retry-AfterintegerSeconds to wait before sending again; a request sent sooner is refused too.
Example
{
"error": {
"code": "too_many_requests",
"documentation_url": "https://hub.main-team.org/api/errors#too_many_requests",
"message": "Too many requests to this operation. Wait the number of seconds in Retry-After, then try again.",
"request_id": "0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e"
}
}Fields of the error body
errorobject · ErrorDetailrequiredWhat went wrong.
5 fields of error
codestringrequiredA stable machine code: branch on this. Each one is explained at
documentation_url.one of
invalid_emailbad_requestunauthorizedforbiddennot_foundconflictpayload_too_largeunsupported_media_typeunprocessable_entitytoo_many_requestsinternal_errorservice_unavailableexample
not_foundmessagestringrequiredWritten for a person, and may change: never branch on it.
example
Not found!documentation_urlstringrequiredWhere this code is explained.
format
uriexamplehttps://hub.main-team.org/api/errors#not_foundrequest_idstringrequiredThis request’s id, also sent as the
X-Request-Idresponse header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.example
0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8edetailsobjectPresent only where an operation says so, and then with the shape that operation documents — the rows it could not accept, say. Treat it as absent everywhere else, and ignore a
detailsyou do not recognise.
500 Internal error
internal_error: Something failed on our side. Retry later, and quote request_id if it goes on.
When
internal_errorSomething failed on our side. Retry later, and quote
request_idif it goes on.
Example
{
"error": {
"code": "internal_error",
"documentation_url": "https://hub.main-team.org/api/errors#internal_error",
"message": "An unexpected error occurred.",
"request_id": "0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e"
}
}Fields of the error body
errorobject · ErrorDetailrequiredWhat went wrong.
5 fields of error
codestringrequiredA stable machine code: branch on this. Each one is explained at
documentation_url.one of
invalid_emailbad_requestunauthorizedforbiddennot_foundconflictpayload_too_largeunsupported_media_typeunprocessable_entitytoo_many_requestsinternal_errorservice_unavailableexample
not_foundmessagestringrequiredWritten for a person, and may change: never branch on it.
example
Not found!documentation_urlstringrequiredWhere this code is explained.
format
uriexamplehttps://hub.main-team.org/api/errors#not_foundrequest_idstringrequiredThis request’s id, also sent as the
X-Request-Idresponse header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.example
0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8edetailsobjectPresent only where an operation says so, and then with the shape that operation documents — the rows it could not accept, say. Treat it as absent everywhere else, and ignore a
detailsyou do not recognise.