[{"data":1,"prerenderedAt":1635},["ShallowReactive",2],{"api-nav":3,"api-guide:\u002Fapi\u002Fglossary":351,"api-spec:guide:\u002Fapi\u002Fglossary":1634},[4,28,57,95,115,301,317,331],{"id":5,"title":6,"links":7,"groups":27},"start","Start here",[8,11,15,18,21,24],{"title":9,"to":10},"Overview","\u002Fapi",{"title":12,"to":13,"status":14},"Quickstart","\u002Fapi\u002Fquickstart","available",{"title":16,"to":17,"status":14},"Environments","\u002Fapi\u002Fenvironments",{"title":19,"to":20,"status":14},"Authentication","\u002Fapi\u002Fauthentication",{"title":22,"to":23,"status":14},"Organizations","\u002Fapi\u002Forganizations",{"title":25,"to":26,"status":14},"Permissions","\u002Fapi\u002Fpermissions",[],{"id":29,"title":30,"links":31,"groups":56},"concepts","Concepts",[32,35,38,41,44,47,50,53],{"title":33,"to":34,"status":14},"Requests and responses","\u002Fapi\u002Frequests-and-responses",{"title":36,"to":37,"status":14},"Identifiers","\u002Fapi\u002Fidentifiers",{"title":39,"to":40,"status":14},"Pagination","\u002Fapi\u002Fpagination",{"title":42,"to":43},"Errors","\u002Fapi\u002Ferrors",{"title":45,"to":46,"status":14},"Rate limits","\u002Fapi\u002Frate-limits",{"title":48,"to":49,"status":14},"Retries","\u002Fapi\u002Fretries-and-idempotency",{"title":51,"to":52,"status":14},"Security","\u002Fapi\u002Fsecurity",{"title":54,"to":55,"status":14},"Versioning","\u002Fapi\u002Fversioning",[],{"id":58,"title":59,"links":60,"groups":94},"resources","Guides",[61,64,67,70,73,76,79,82,85,88,91],{"title":62,"to":63,"status":14},"Students","\u002Fapi\u002Fguides\u002Fstudents",{"title":65,"to":66,"status":14},"Bulk registration","\u002Fapi\u002Fguides\u002Fbulk-registration",{"title":68,"to":69,"status":14},"Passwords","\u002Fapi\u002Fguides\u002Fpasswords",{"title":71,"to":72,"status":14},"Supervisors","\u002Fapi\u002Fguides\u002Fsupervisors",{"title":74,"to":75,"status":14},"Reference data","\u002Fapi\u002Fguides\u002Freference-data",{"title":77,"to":78,"status":14},"API account","\u002Fapi\u002Fguides\u002Fapi-account",{"title":80,"to":81,"status":14},"Sign-in links","\u002Fapi\u002Fguides\u002Fsign-in-links",{"title":83,"to":84,"status":14},"Exams","\u002Fapi\u002Fguides\u002Fexams",{"title":86,"to":87,"status":14},"Applications","\u002Fapi\u002Fguides\u002Fapplications",{"title":89,"to":90,"status":14},"Group challenges","\u002Fapi\u002Fguides\u002Fgroup-challenges",{"title":92,"to":93,"status":14},"Certificates and reports","\u002Fapi\u002Fguides\u002Fcertificates-and-reports",[],{"id":96,"title":97,"links":98,"groups":114},"tutorials","Tutorials",[99,102,105,108,111],{"title":100,"to":101,"status":14},"Register and apply","\u002Fapi\u002Ftutorials\u002Fregister-and-apply",{"title":103,"to":104,"status":14},"Send a student to the panel","\u002Fapi\u002Ftutorials\u002Fsend-student-to-panel",{"title":106,"to":107,"status":14},"Change an application","\u002Fapi\u002Ftutorials\u002Fchange-an-application",{"title":109,"to":110,"status":14},"Collect results","\u002Fapi\u002Ftutorials\u002Fcollect-results",{"title":112,"to":113,"status":14},"Token handling","\u002Fapi\u002Ftutorials\u002Ftoken-handling",[],{"id":116,"title":117,"links":118,"groups":125},"reference","Reference",[119,122],{"title":120,"to":121},"All endpoints","\u002Fapi\u002Freference",{"title":123,"to":124},"Sandbox console","\u002Fapi\u002Fconsole",[126,135,145,166,206,212,230,255,271],{"tag":127,"slug":128,"links":129},"Health","health",[130],{"title":131,"to":132,"method":133,"deprecated":134},"Check that the API is up","\u002Fapi\u002Freference\u002Fget-health","GET",false,{"tag":77,"slug":136,"links":137},"api-account",[138,142],{"title":139,"to":140,"method":141,"deprecated":134},"Revoke the token you send, before it expires","\u002Fapi\u002Freference\u002Frevoke-token","POST",{"title":143,"to":144,"method":133,"deprecated":134},"Fetch the API account your token belongs to","\u002Fapi\u002Freference\u002Fget-current-api-account",{"tag":74,"slug":146,"links":147},"reference-data",[148,151,154,157,160,163],{"title":149,"to":150,"method":133,"deprecated":134},"List the countries a student can be registered in","\u002Fapi\u002Freference\u002Flist-countries",{"title":152,"to":153,"method":133,"deprecated":134},"Fetch one country by its id","\u002Fapi\u002Freference\u002Fget-country",{"title":155,"to":156,"method":133,"deprecated":134},"List the grades a student can be registered with","\u002Fapi\u002Freference\u002Flist-grades",{"title":158,"to":159,"method":133,"deprecated":134},"Fetch one grade by its id","\u002Fapi\u002Freference\u002Fget-grade",{"title":161,"to":162,"method":133,"deprecated":134},"List the organizations and their ids","\u002Fapi\u002Freference\u002Flist-organizations",{"title":164,"to":165,"method":133,"deprecated":134},"Fetch one organization by its id","\u002Fapi\u002Freference\u002Fget-organization",{"tag":62,"slug":167,"links":168},"students",[169,172,175,178,181,184,187,191,194,197,200,203],{"title":170,"to":171,"method":133,"deprecated":134},"List your students","\u002Fapi\u002Freference\u002Flist-students",{"title":173,"to":174,"method":141,"deprecated":134},"Register a student","\u002Fapi\u002Freference\u002Fregister-student",{"title":176,"to":177,"method":141,"deprecated":134},"Check a registration without registering the student","\u002Fapi\u002Freference\u002Fcheck-student-registration",{"title":179,"to":180,"method":141,"deprecated":134},"Register many students at once","\u002Fapi\u002Freference\u002Fcreate-student-import",{"title":182,"to":183,"method":133,"deprecated":134},"Follow a batch of students you sent","\u002Fapi\u002Freference\u002Fget-student-import",{"title":185,"to":186,"method":133,"deprecated":134},"Fetch one of your students","\u002Fapi\u002Freference\u002Fget-student",{"title":188,"to":189,"method":190,"deprecated":134},"Update one of your students","\u002Fapi\u002Freference\u002Fupdate-student","PUT",{"title":192,"to":193,"method":190,"deprecated":134},"Set the sign-in password of one of your students","\u002Fapi\u002Freference\u002Fset-student-password",{"title":195,"to":196,"method":133,"deprecated":134},"List your students who can use this organization","\u002Fapi\u002Freference\u002Flist-org-students",{"title":198,"to":199,"method":133,"deprecated":134},"Fetch one of your students, if they can use this organization","\u002Fapi\u002Freference\u002Fget-org-student",{"title":201,"to":202,"method":190,"deprecated":134},"Update one of your students and give them access to this organization","\u002Fapi\u002Freference\u002Fupdate-org-student",{"title":204,"to":205,"method":190,"deprecated":134},"Link one of your students to a supervisor on this organization","\u002Fapi\u002Freference\u002Flink-student-supervisor",{"tag":80,"slug":207,"links":208},"sign-in-links",[209],{"title":210,"to":211,"method":141,"deprecated":134},"Create a single-use sign-in link for one of your students","\u002Fapi\u002Freference\u002Fcreate-signin-link",{"tag":83,"slug":213,"links":214},"exams",[215,218,221,224,227],{"title":216,"to":217,"method":133,"deprecated":134},"List the exams open for applications","\u002Fapi\u002Freference\u002Flist-exams",{"title":219,"to":220,"method":133,"deprecated":134},"List an organization’s exam categories","\u002Fapi\u002Freference\u002Flist-exam-categories",{"title":222,"to":223,"method":133,"deprecated":134},"Fetch one exam category","\u002Fapi\u002Freference\u002Fget-exam-category",{"title":225,"to":226,"method":133,"deprecated":134},"List the exams one of your students can apply to","\u002Fapi\u002Freference\u002Flist-available-exams",{"title":228,"to":229,"method":133,"deprecated":134},"Fetch one exam that is open for applications","\u002Fapi\u002Freference\u002Fget-exam",{"tag":86,"slug":231,"links":232},"applications",[233,236,239,242,245,248,251],{"title":234,"to":235,"method":133,"deprecated":134},"List your students’ applications in this organization","\u002Fapi\u002Freference\u002Flist-applications",{"title":237,"to":238,"method":141,"deprecated":134},"Enter one of your students for an exam","\u002Fapi\u002Freference\u002Fcreate-application",{"title":240,"to":241,"method":133,"deprecated":134},"List your students’ applications for one exam","\u002Fapi\u002Freference\u002Flist-exam-applications",{"title":243,"to":244,"method":133,"deprecated":134},"List one of your students’ applications in this organization","\u002Fapi\u002Freference\u002Flist-student-applications",{"title":246,"to":247,"method":133,"deprecated":134},"Fetch one of your students’ applications","\u002Fapi\u002Freference\u002Fget-application",{"title":249,"to":250,"method":190,"deprecated":134},"Move one of your students’ applications to another exam","\u002Fapi\u002Freference\u002Fmove-application",{"title":252,"to":253,"method":254,"deprecated":134},"Withdraw one of your students from an exam","\u002Fapi\u002Freference\u002Fdelete-application","DELETE",{"tag":256,"slug":257,"links":258},"Documents","documents",[259,262,265,268],{"title":260,"to":261,"method":133,"deprecated":134},"Download a certificate file","\u002Fapi\u002Freference\u002Fdownload-certificate",{"title":263,"to":264,"method":133,"deprecated":134},"List one of your students’ released certificates","\u002Fapi\u002Freference\u002Flist-student-certificates",{"title":266,"to":267,"method":133,"deprecated":134},"Download a result report file","\u002Fapi\u002Freference\u002Fdownload-report",{"title":269,"to":270,"method":133,"deprecated":134},"List one of your students’ released result reports","\u002Fapi\u002Freference\u002Flist-student-reports",{"tag":89,"slug":272,"links":273},"group-challenges",[274,277,280,283,286,289,292,295,298],{"title":275,"to":276,"method":133,"deprecated":134},"List the group challenges an organization runs","\u002Fapi\u002Freference\u002Flist-group-challenges",{"title":278,"to":279,"method":133,"deprecated":134},"Fetch one group challenge","\u002Fapi\u002Freference\u002Fget-group-challenge",{"title":281,"to":282,"method":133,"deprecated":134},"List the groups your students are in for a group challenge","\u002Fapi\u002Freference\u002Flist-group-challenge-groups",{"title":284,"to":285,"method":133,"deprecated":134},"Fetch one group, with its steps and files","\u002Fapi\u002Freference\u002Fget-group-challenge-group",{"title":287,"to":288,"method":133,"deprecated":134},"List what has happened in one group","\u002Fapi\u002Freference\u002Flist-group-challenge-activity",{"title":290,"to":291,"method":141,"deprecated":134},"Send a group’s finished work for one of your students","\u002Fapi\u002Freference\u002Fsubmit-group-challenge-work",{"title":293,"to":294,"method":141,"deprecated":134},"Submit one step of a group for one of your students","\u002Fapi\u002Freference\u002Fsubmit-group-challenge-step",{"title":296,"to":297,"method":133,"deprecated":134},"List your students’ eligibility and groups for a group challenge","\u002Fapi\u002Freference\u002Flist-group-challenge-students",{"title":299,"to":300,"method":133,"deprecated":134},"Fetch one of your students’ eligibility and group for a group challenge","\u002Fapi\u002Freference\u002Fget-group-challenge-student",{"id":302,"title":303,"links":304,"groups":316},"clients","Clients",[305,307,310,313],{"title":9,"to":306,"status":14},"\u002Fapi\u002Fclients",{"title":308,"to":309,"status":14},"Node.js","\u002Fapi\u002Fclients\u002Fnode",{"title":311,"to":312,"status":14},"PHP","\u002Fapi\u002Fclients\u002Fphp",{"title":314,"to":315,"status":14},"Build your own","\u002Fapi\u002Fclients\u002Fbuild-your-own",[],{"id":318,"title":319,"links":320,"groups":330},"agents","AI agents",[321,324,327],{"title":322,"to":323},"AI connections","\u002Fapi\u002Fmcp",{"title":325,"to":326},"What it can do","\u002Fapi\u002Fmcp\u002Ftools",{"title":328,"to":329},"Agent skills","\u002Fapi\u002Fskills",[],{"id":332,"title":333,"links":334,"groups":350},"help","Help",[335,338,341,344,347],{"title":336,"to":337,"status":14},"Glossary","\u002Fapi\u002Fglossary",{"title":339,"to":340,"status":14},"FAQ","\u002Fapi\u002Ffaq",{"title":342,"to":343,"status":14},"Troubleshooting","\u002Fapi\u002Ftroubleshooting",{"title":345,"to":346,"status":14},"Support","\u002Fapi\u002Fsupport",{"title":348,"to":349},"Changelog","\u002Fapi\u002Fchangelog",[],{"id":352,"title":336,"body":353,"description":1625,"extension":1626,"meta":1627,"navTitle":336,"navigation":1628,"operations":1629,"order":1630,"path":337,"section":332,"seo":1631,"status":14,"stem":1632,"__hash__":1633},"apiGuides\u002Fapi\u002Fglossary.md",{"type":354,"value":355,"toc":1548},"minimark",[356,360,365,370,419,423,444,446,461,464,497,500,513,516,529,533,549,553,579,581,587,591,602,606,627,631,646,649,664,668,707,710,724,728,732,754,757,767,771,782,786,809,813,844,848,868,872,889,892,927,931,944,948,971,975,982,985,1012,1016,1027,1031,1052,1056,1060,1079,1083,1098,1101,1115,1119,1126,1130,1135,1138,1153,1157,1168,1172,1181,1184,1202,1205,1208,1212,1232,1236,1240,1259,1263,1282,1286,1290,1295,1299,1304,1308,1311,1315,1324,1326,1330,1336,1340,1361,1365,1377,1381,1397,1400,1403,1413,1417,1435,1439,1455,1459,1465,1469,1483,1486,1502,1506,1523,1527],[357,358,359],"p",{},"Each term is defined once, in the sense this documentation uses it. The link after a definition goes to the page that covers the topic in full. Terms are grouped by topic and sorted alphabetically within each group.",[361,362,364],"h2",{"id":363},"access-and-authentication","Access and authentication",[366,367,369],"h3",{"id":368},"action","Action",[357,371,372,373,378,379,383,384,387,388,391,392,395,396,399,400,399,403,406,407,409,410,412,413,415,416,418],{},"The first part of a ",[374,375,377],"a",{"href":376},"#role","role",": what the role lets you do, written ",[380,381,382],"code",{},"\u003Cresource>\u002F\u003Coperation>",", for example ",[380,385,386],{},"student\u002Fread"," or ",[380,389,390],{},"application\u002Fcreate",". A ",[380,393,394],{},"*"," in either segment matches any value there (",[380,397,398],{},"student\u002F*",", ",[380,401,402],{},"*\u002Fread",[380,404,405],{},"*\u002F*","). A ",[380,408,394],{}," on its own matches every action. The two sides must have the same number of segments. For example, ",[380,411,398],{}," grants ",[380,414,386],{}," but not a deeper action. See ",[374,417,25],{"href":26},".",[366,420,422],{"id":421},"allow-and-disallow","Allow and disallow",[357,424,425,426,429,430,432,433,436,437,440,441,443],{},"The ",[380,427,428],{},"effect"," of a ",[374,431,377],{"href":376},". An account needs a matching ",[380,434,435],{},"allow"," role for a request to go through. A matching ",[380,438,439],{},"disallow"," role always wins over any number of matching ",[380,442,435],{}," roles, so it is how you carve an exception out of a broad grant, for example \"everything except deleting applications\".",[366,445,77],{"id":136},[357,447,448,449,453,454,458,459,418],{},"The identity your integration uses to call the API. An operator creates it and gives you its ",[374,450,452],{"href":451},"#apikey","apiKey"," and ",[374,455,457],{"href":456},"#apisecret","apiSecret",". Everything you create through the API belongs to this account, including students and applications. Another account, even a replacement account for the same company, cannot see those records. See ",[374,460,19],{"href":20},[366,462,452],{"id":463},"apikey",[357,465,466,467,470,471,474,475,387,478,481,482,485,486,490,491,494,495,418],{},"The public identifier of your ",[374,468,77],{"href":469},"#api-account",": ",[380,472,473],{},"key_"," followed by 24 letters, digits, ",[380,476,477],{},"-",[380,479,480],{},"_",". You put it in the ",[380,483,484],{},"kid"," header of every ",[374,487,489],{"href":488},"#token","token"," and again as the token's ",[380,492,493],{},"sub"," claim. It is not a secret, but it is useless without the matching ",[374,496,457],{"href":456},[366,498,457],{"id":499},"apisecret",[357,501,502,503,506,507,510,511,418],{},"Your signing key: ",[380,504,505],{},"secret_"," followed by a long random string. You get it once, when the account is created, and it cannot be recovered or shown again. It signs your ",[374,508,509],{"href":488},"tokens"," and must never leave your servers. See ",[374,512,51],{"href":52},[366,514,515],{"id":515},"authorized",[357,517,518,519,521,522,525,526,528],{},"The third part of a ",[374,520,377],{"href":376},". If it is empty or holds your own account's ",[380,523,524],{},"_id",", the role applies to your account. If it holds any other id, the role does nothing, and this is true for ",[380,527,439],{}," roles too.",[366,530,532],{"id":531},"clock-skew","Clock skew",[357,534,535,536,540,541,544,545,548],{},"How far your server's clock may disagree with the API's clock: ",[537,538,539],"strong",{},"30 seconds",". The API still accepts a token for 30 seconds after its ",[380,542,543],{},"exp",". It also accepts an ",[380,546,547],{},"iat"," up to 30 seconds in the future, but no further.",[366,550,552],{"id":551},"iat-and-exp","iat and exp",[357,554,555,556,558,559,561,562,564,565,567,568,570,571,574,575,578],{},"The two required time claims of a ",[374,557,489],{"href":488},", in whole seconds since the Unix epoch. ",[380,560,547],{}," is when you signed the token and ",[380,563,543],{}," is when it stops working. ",[380,566,543],{}," must be later than ",[380,569,547],{},", and ",[380,572,573],{},"exp - iat"," may be at most ",[537,576,577],{},"3600"," seconds.",[366,580,484],{"id":484},[357,582,583,584,586],{},"The JWT header field that names the key a token was signed with. For this API it is always your ",[374,585,452],{"href":451},". The API reads it to decide which account's secret to check the signature against.",[366,588,590],{"id":589},"operator","Operator",[357,592,593,594,597,598,601],{},"A Main Team staff member who manages API accounts. Operators create accounts, set their ",[374,595,596],{"href":376},"roles",", and deactivate them. You cannot do any of this yourself through the API. Write to ",[374,599,600],{"href":346},"support"," to ask.",[366,603,605],{"id":604},"permission","Permission",[357,607,608,609,612,613,617,618,621,622,624,625,418],{},"What a single operation requires: an ",[374,610,368],{"href":611},"#action"," on the ",[374,614,616],{"href":615},"#organization","organization"," the request acts on. For example, ",[380,619,620],{},"POST \u002Fv1\u002F{organizationId}\u002Fapplication"," requires ",[380,623,390],{}," on that organization. Each operation's reference page names its permission. See ",[374,626,25],{"href":26},[366,628,630],{"id":629},"revocation","Revocation",[357,632,633,634,636,637,639,640,645],{},"Ending one ",[374,635,489],{"href":488}," before its ",[380,638,543],{},", with ",[374,641,642],{"href":140},[380,643,644],{},"POST \u002Fv1\u002Fapi-account\u002Frevoke-token",". The API refuses the revoked token from then on. Your other tokens and your apiSecret keep working.",[366,647,648],{"id":377},"Role",[357,650,651,652,655,656,661,662,418],{},"One entry in your account's list of grants: ",[380,653,654],{},"{ effect, action, target, authorized }",". Operators set roles. You can read yours with ",[374,657,658],{"href":144},[380,659,660],{},"GET \u002Fv1\u002Fapi-account\u002Fvalidate-me",". See ",[374,663,25],{"href":26},[366,665,667],{"id":666},"target","Target",[357,669,670,671,673,674,676,677,470,681,399,684,399,687,399,690,399,693,387,696,699,700,702,703,387,705,418],{},"The second part of a ",[374,672,377],{"href":376},": which organization the role applies to. It is either ",[380,675,394],{}," (every organization) or one ",[374,678,680],{"href":679},"#slug","slug",[380,682,683],{},"mto",[380,685,686],{},"stem",[380,688,689],{},"hilingua",[380,691,692],{},"neo",[380,694,695],{},"gmath",[380,697,698],{},"coding",". Operations without an organization in their path act on ",[380,701,683],{},", so they need a role whose target is ",[380,704,683],{},[380,706,394],{},[366,708,709],{"id":489},"Token",[357,711,712,713,716,717,719,720,453,722,418],{},"The credential you send with every request, as ",[380,714,715],{},"Authorization: Bearer \u003Ctoken>",". It is a JWT that you sign yourself with HS256 and your ",[374,718,457],{"href":456},". The API has no endpoint that issues tokens. See ",[374,721,19],{"href":20},[374,723,112],{"href":113},[361,725,727],{"id":726},"organizations-and-students","Organizations and students",[366,729,731],{"id":730},"activated-organizations","Activated organizations",[357,733,734,735,738,739,742,743,746,747,751,752,418],{},"The organizations a student may be used on, stored on the student as ",[380,736,737],{},"activatedPlatformsThisSeason",". The value ",[380,740,741],{},"common"," means every organization, and it is the default at registration. Otherwise the list holds organization ",[374,744,745],{"href":679},"slugs",". A student must be activated for an organization before you can create a ",[374,748,750],{"href":749},"#sign-in-link","sign-in link"," there, and before they appear in that organization's student list. See ",[374,753,62],{"href":63},[366,755,65],{"id":756},"bulk-registration",[357,758,759,760,763,764,418],{},"Registering 30 to 1000 students in one request with\n",[374,761,762],{"href":180},"createStudentImport",". The batch is checked before it is\naccepted and then registered in the background, all of it or none of it. See ",[374,765,766],{"href":66},"Bulk\nregistration",[366,768,770],{"id":769},"core-record","Core record",[357,772,773,774,776,777,779,780,418],{},"The main copy of a student, which Main Team keeps under the ",[380,775,683],{}," organization. Registration creates it. It holds the profile, the username and the password. The operations without an organization in their path act on the core record. Its ",[380,778,524],{}," is the student id you use everywhere in this API. See ",[374,781,22],{"href":23},[366,783,785],{"id":784},"email-confirmation","Email confirmation",[357,787,788,789,792,793,796,797,799,800,804,805,808],{},"Whether the student has proven they receive email at their address, returned as ",[380,790,791],{},"emailConfirmed",". Students you register start out unconfirmed. Changing a student's email address through the API resets it to ",[380,794,795],{},"false",". It does not stop a ",[374,798,750],{"href":749}," from working, but the panel asks an unconfirmed student to confirm their address with an emailed 6-digit code, on every page until they do, My Exams included, so they must confirm before starting an exam. A student already inside an exam room is not interrupted. Only the confirmation on the ",[374,801,803],{"href":802},"#core-record","core record"," counts. Once it is ",[380,806,807],{},"true",", you can no longer set the student's password.",[366,810,812],{"id":811},"import","Import",[357,814,815,816,818,819,470,822,825,826,829,830,833,834,387,837,840,841,843],{},"One batch sent to ",[374,817,762],{"href":180},", and the record of\nwhat happened to it. Read it with ",[374,820,821],{"href":183},"getStudentImport",[380,823,824],{},"status","\nruns from ",[380,827,828],{},"queued"," through ",[380,831,832],{},"running"," to ",[380,835,836],{},"succeeded",[380,838,839],{},"failed",", every row carries its student's\n",[380,842,524],{}," once it has succeeded, and the import stops being readable 30 days after it finishes.",[366,845,847],{"id":846},"flat-operation","Flat operation",[357,849,850,851,854,855,387,858,861,862,864,865,867],{},"An operation whose path has no ",[380,852,853],{},"{organizationId}",", such as ",[380,856,857],{},"GET \u002Fv1\u002Fstudent",[380,859,860],{},"GET \u002Fv1\u002Fcountry",". It acts on the ",[374,863,803],{"href":802},", and its permission is checked against the ",[380,866,683],{}," target.",[366,869,871],{"id":870},"mainid","mainId",[357,873,874,875,877,878,881,882,884,885,661,887,418],{},"The core-record id of a person, carried on every person that an organization's data returns. Each organization keeps its own copy of a student with a different ",[380,876,524],{},", so the ",[380,879,880],{},"user._id"," on an application is that organization's id for the student. ",[380,883,871],{}," is the id you registered them with, so match your records on ",[380,886,871],{},[374,888,36],{"href":37},[366,890,891],{"id":616},"Organization",[357,893,894,895,897,898,902,903,399,905,399,907,399,909,453,911,913,914,918,919,924,925,418],{},"One of the platforms a student can take part in. ",[380,896,683],{}," is the core platform, and the ",[374,899,901],{"href":900},"#flat-operation","flat operations"," act on it. ",[380,904,686],{},[380,906,689],{},[380,908,692],{},[380,910,695],{},[380,912,698],{}," are the olympiads, and you address each one by its ",[374,915,917],{"href":916},"#organization-id","organization id",". ",[374,920,921],{"href":162},[380,922,923],{},"GET \u002Fv1\u002Forganization"," lists the organizations you can put in a path. See ",[374,926,22],{"href":23},[366,928,930],{"id":929},"organization-copy","Organization copy",[357,932,933,934,936,937,940,941,943],{},"An organization's own record of a student, linked to the ",[374,935,803],{"href":802}," by ",[374,938,871],{"href":939},"#mainid",". It is created the first time the student opens a ",[374,942,750],{"href":749}," for that organization, and the API cannot create it any other way. You need it before you can create applications, list a student's applications, certificates or reports, or link a supervisor on that organization.",[366,945,947],{"id":946},"organization-id","Organization id",[357,949,425,950,952,953,957,958,960,961,963,964,967,968,418],{},[380,951,524],{}," of an organization, as returned by ",[374,954,955],{"href":162},[380,956,923],{},": 24 hexadecimal characters. It is the ",[380,959,853],{}," in a path. It is never the slug. An id that names no organization, or names one that ",[380,962,923],{}," does not list, answers ",[380,965,966],{},"404"," with the message ",[380,969,970],{},"Organization not found!",[366,972,974],{"id":973},"ownership","Ownership",[357,976,977,978,981],{},"The rule that your account can only act on students it registered itself, and on records reached through those students, such as applications, certificates and reports. Another account's record answers exactly like a missing one: ",[380,979,980],{},"404 not_found",". This means a response never reveals that someone else's record exists.",[366,983,984],{"id":680},"Slug",[357,986,987,988,399,990,399,992,399,994,399,996,387,998,1000,1001,1003,1004,1006,1007,1009,1010,418],{},"The short, lower-case name of an organization: ",[380,989,683],{},[380,991,686],{},[380,993,689],{},[380,995,692],{},[380,997,695],{},[380,999,698],{},". Slugs appear in role targets, where ",[380,1002,683],{}," is one of them, in ",[380,1005,737],{},", which takes the other five and ",[380,1008,741],{},", and in some messages. Paths never take a slug. They take the ",[374,1011,917],{"href":916},[366,1013,1015],{"id":1014},"supervisor","Supervisor",[357,1017,1018,1019,1024,1025,418],{},"A teacher or coordinator account on one organization. You link a student to a supervisor by the supervisor's username with ",[374,1020,1021],{"href":205},[380,1022,1023],{},"PUT \u002Fv1\u002F{organizationId}\u002Fstudent\u002F{studentId}\u002Fsupervisor",". The link applies to that organization only. The API never creates supervisor accounts. See ",[374,1026,71],{"href":72},[366,1028,1030],{"id":1029},"username","Username",[357,1032,1033,1034,399,1037,387,1040,1043,1044,1047,1048,1051],{},"The student's platform login name, issued at registration and never changed through the API. It is the country's two-letter code, one letter (never ",[380,1035,1036],{},"P",[380,1038,1039],{},"S",[380,1041,1042],{},"T","), and a sequence number that starts at 1000, for example ",[380,1045,1046],{},"XXB1045"," with the country's code in place of ",[380,1049,1050],{},"XX",". It is not a secret, so a password may not contain it.",[361,1053,1055],{"id":1054},"exams-and-applications","Exams and applications",[366,1057,1059],{"id":1058},"application","Application",[357,1061,1062,1063,1067,1068,1072,1073,661,1077,418],{},"A student's entry for one ",[374,1064,1066],{"href":1065},"#exam","exam"," on one organization. You create one with ",[374,1069,1070],{"href":238},[380,1071,620],{},", giving the student and the exam. Every application has a ",[374,1074,1076],{"href":1075},"#payment","payment",[374,1078,86],{"href":87},[366,1080,1082],{"id":1081},"available-exams","Available exams",[357,1084,1085,1086,1091,1092,1095,1096,418],{},"The exams one student may apply for on one organization, returned by ",[374,1087,1088],{"href":226},[380,1089,1090],{},"GET \u002Fv1\u002F{organizationId}\u002Fexam\u002Favailable\u002F{studentId}"," as a tree: category, then session, then language. Each leaf carries the exam as ",[380,1093,1094],{},"matchedExam",". The student's grade and country narrow the list, and so do the sittings the student already holds. It follows the same rules as the exam picker in the student panel, and it works before the student has ever signed in to the organization. See ",[374,1097,83],{"href":84},[366,1099,1100],{"id":1066},"Exam",[357,1102,1103,1104,1108,1109,1111,1112,418],{},"One paper: a category, sat in one language, at one ",[374,1105,1107],{"href":1106},"#session","session",". Its ",[380,1110,524],{}," is what you put in ",[380,1113,1114],{},"examId",[366,1116,1118],{"id":1117},"exam-category","Exam category",[357,1120,1121,1122,418],{},"A subject or competition line within an organization, for example Science or AI Challenge. Exams belong to one category. An exam in an inactive category is never ",[374,1123,1125],{"href":1124},"#open-exam","open",[366,1127,1129],{"id":1128},"grade","Grade",[357,1131,1132,1133,418],{},"The school year a student is in, stored on the student and required at registration. Every exam accepts a fixed set of grades, so a student is offered only exams for their grade. Grade ids are the same on every organization. See ",[374,1134,74],{"href":75},[366,1136,1094],{"id":1137},"matchedexam",[357,1139,1140,1141,1145,1146,1149,1150,1152],{},"The exam at a leaf of the ",[374,1142,1144],{"href":1143},"#available-exams","available exams"," tree. ",[380,1147,1148],{},"matchedExam._id"," is the ",[380,1151,1114],{}," you send to create or move an application.",[366,1154,1156],{"id":1155},"move","Move",[357,1158,1159,1160,1165,1166,418],{},"Changing which exam an application is for, with ",[374,1161,1162],{"href":250},[380,1163,1164],{},"PUT \u002Fv1\u002F{organizationId}\u002Fapplication\u002F{applicationId}",". Moves are how you change an application's language or date. They are refused once the exam has started, when the student could not apply for the new exam, and in a few other cases, such as a paid application moving to an exam with a different price. See ",[374,1167,106],{"href":107},[366,1169,1171],{"id":1170},"open-exam","Open exam",[357,1173,1174,1175,1180],{},"An exam that is still accepting applications. Its session date is in the future, its category is active, and applications to it are not switched off. Only open exams are listed by ",[374,1176,1177],{"href":217},[380,1178,1179],{},"GET \u002Fv1\u002F{organizationId}\u002Fexam"," or can be applied for.",[366,1182,1183],{"id":1076},"Payment",[357,1185,1186,1187,1190,1191,1194,1195,453,1197,1194,1199,418],{},"The record of what an application costs and whether it has been paid, returned inside the application. The API creates it with the application, but it never charges or refunds anyone. An exam with no price, or a price of ",[380,1188,1189],{},"0",", gets a payment with ",[380,1192,1193],{},"amount"," ",[380,1196,1189],{},[380,1198,824],{},[380,1200,1201],{},"paid",[366,1203,1204],{"id":1107},"Session",[357,1206,1207],{},"One date on which exams are sat, also called a sitting. A student cannot hold two exams in the same category on the same session.",[366,1209,1211],{"id":1210},"settled-payment","Settled payment",[357,1213,1214,1215,1194,1217,1194,1219,1222,1223,1225,1226,1228,1229,1231],{},"A payment with ",[380,1216,824],{},[380,1218,1201],{},[537,1220,1221],{},"and"," an ",[380,1224,1193],{}," above ",[380,1227,1189],{},", meaning money has actually been paid. A free exam's payment is not settled, even though its status is ",[380,1230,1201],{},". An application with a settled payment cannot be deleted, and it can be moved only to an exam with the same price.",[361,1233,1235],{"id":1234},"sign-in","Sign-in",[366,1237,1239],{"id":1238},"sign-in-link","Sign-in link",[357,1241,1242,1243,1246,1247,1250,1251,1256,1257,418],{},"A URL that signs one of your students into one organization's student panel when their browser opens it. It is valid for ",[537,1244,1245],{},"120 seconds"," and works ",[537,1248,1249],{},"once",". You create it with ",[374,1252,1253],{"href":211},[380,1254,1255],{},"POST \u002Fv1\u002F{organizationId}\u002Fauth\u002Fsignin"," and redirect the browser to it at once. See ",[374,1258,80],{"href":81},[366,1260,1262],{"id":1261},"redirect","Redirect",[357,1264,1265,1266,1269,1270,1273,1274,1277,1278,1281],{},"The optional path inside the organization where the student lands after signing in, for example ",[380,1267,1268],{},"\u002Fdashboard",". It must start with a single ",[380,1271,1272],{},"\u002F"," (so ",[380,1275,1276],{},"\u002F\u002F"," is refused) and contain no whitespace and no backslashes. The text ",[380,1279,1280],{},"{userId}"," in it is replaced with the student's id on that organization. Without it, the student lands on the organization's home page.",[361,1283,1285],{"id":1284},"results","Results",[366,1287,1289],{"id":1288},"certificate","Certificate",[357,1291,1292,1293,418],{},"A PDF certificate that an organization issues to a student, for example for taking part or for an award. You list a student's certificates, then download each one. See ",[374,1294,92],{"href":93},[366,1296,1298],{"id":1297},"released-document","Released document",[357,1300,1301,1302,418],{},"A certificate or report that the organization has published. Only released documents are listed or downloaded. A document that is not released yet, not yours, or has no file answers the same ",[380,1303,966],{},[366,1305,1307],{"id":1306},"report","Report",[357,1309,1310],{},"A PDF results report for one of a student's applications. It is listed and downloaded like a certificate. A report that was withdrawn is treated as not released.",[366,1312,1314],{"id":1313},"shortid","shortId",[357,1316,1317,1318,1320,1321,1323],{},"A short identifier that certificates and reports carry in their ",[380,1319,1314],{}," field, next to their ",[380,1322,524],{},". The download operations accept either one.",[361,1325,89],{"id":272},[366,1327,1329],{"id":1328},"grade-group","Grade group",[357,1331,1332,1333,418],{},"A set of grades that form groups together in a group challenge. Every member of a group comes from the same grade group, and a student whose grade is in none of a challenge's grade groups cannot take part. See ",[374,1334,89],{"href":1335},"\u002Fapi\u002Fguides\u002Fgroup-challenges#the-challenges",[366,1337,1339],{"id":1338},"group","Group",[357,1341,1342,1343,399,1346,1349,1350,1353,1354,1357,1358,418],{},"A handful of students, formed by their teacher in the panel, who work through a group challenge together. It is prepared (",[380,1344,1345],{},"awaiting_payment",[380,1347,1348],{},"draft","), confirmed by the teacher (",[380,1351,1352],{},"finalized","), and ",[380,1355,1356],{},"completed"," once its work is sent. See ",[374,1359,89],{"href":1360},"\u002Fapi\u002Fguides\u002Fgroup-challenges#groups",[366,1362,1364],{"id":1363},"group-challenge","Group challenge",[357,1366,1367,1368,833,1371,1374,1375,418],{},"A project an organization runs for groups of students between two dates (",[380,1369,1370],{},"windowStart",[380,1372,1373],{},"windowEnd","), worked through in steps. You can read where your students stand and submit steps for them. See ",[374,1376,89],{"href":90},[366,1378,1380],{"id":1379},"step","Step",[357,1382,1383,1384,1387,1388,1390,1391,1394,1395,418],{},"One stage of a group challenge, such as a proposal or a video. A group's steps open one after another: a step is ",[380,1385,1386],{},"locked"," until the one before it is submitted, ",[380,1389,1125],{}," while the group uploads work for it, and ",[380,1392,1393],{},"submitted"," once sent. See ",[374,1396,89],{"href":1360},[361,1398,33],{"id":1399},"requests-and-responses",[366,1401,1402],{"id":1402},"documentation_url",[357,1404,1405,1406,612,1410,1412],{},"The link, included in every error, to the explanation of its ",[374,1407,1409],{"href":1408},"#error-code","error code",[374,1411,42],{"href":43}," page.",[366,1414,1416],{"id":1415},"envelope","Envelope",[357,1418,1419,1420,1423,1424,1427,1428,1432,1433,418],{},"The fixed shape every JSON response takes. On success it is ",[380,1421,1422],{},"{ success, message, data, pagination? }",". On failure it is ",[380,1425,1426],{},"{ error: { code, message, documentation_url, request_id } }",". One operation, ",[374,1429,1430],{"href":144},[380,1431,660],{},", returns its object without the success envelope. See ",[374,1434,33],{"href":34},[366,1436,1438],{"id":1437},"error-code","Error code",[357,1440,1441,1442,387,1445,1448,1449,1452,1453,418],{},"The stable, machine-readable name of an error, such as ",[380,1443,1444],{},"unauthorized",[380,1446,1447],{},"conflict",", in ",[380,1450,1451],{},"error.code",". Your code should branch on the HTTP status and this code, never on the message text. See ",[374,1454,42],{"href":43},[366,1456,1458],{"id":1457},"idempotent","Idempotent",[357,1460,1461,1462,418],{},"An operation you can safely repeat because doing it twice has the same effect as doing it once. Creating an application for the same student and exam twice returns the existing application. Registering a student twice does not: the second attempt is refused. See ",[374,1463,1464],{"href":49},"Retries and idempotency",[366,1466,1468],{"id":1467},"operationid","operationId",[357,1470,1471,1472,1475,1476,1479,1480,1482],{},"The stable name of an operation in the reference, such as ",[380,1473,1474],{},"createApplication",". Its page is at ",[380,1477,1478],{},"\u002Fapi\u002Freference\u002F"," followed by the name in kebab case (",[380,1481,238],{},"). Quote it when you ask for help.",[366,1484,39],{"id":1485},"pagination",[357,1487,1488,1489,1492,1493,1496,1497,661,1500,418],{},"How list operations return their results one page at a time. You choose the page with ",[380,1490,1491],{},"page"," (default 1) and ",[380,1494,1495],{},"limit"," (default 20, at most 100), and the response carries ",[380,1498,1499],{},"pagination: { page, limit, total, totalPages }",[374,1501,39],{"href":40},[366,1503,1505],{"id":1504},"rate-limit","Rate limit",[357,1507,1508,1509,1512,1513,1516,1517,1520,1521,418],{},"How many requests your account may make: ",[537,1510,1511],{},"100 requests per 60 seconds to each operation",", and each operation is counted on its own. Past that, the API answers ",[380,1514,1515],{},"429"," with a ",[380,1518,1519],{},"Retry-After"," header. See ",[374,1522,45],{"href":46},[366,1524,1526],{"id":1525},"request-id","Request id",[357,1528,1529,1530,1533,1534,1537,1538,1540,1541,1544,1545,1547],{},"The id of one request. It comes back in the ",[380,1531,1532],{},"X-Request-Id"," header of every response and as ",[380,1535,1536],{},"error.request_id"," in every error. You may send your own id in ",[380,1539,1532],{},": up to 256 letters, digits and ",[380,1542,1543],{},". _ : ; = + \u002F @ -",". Any other value is replaced with an id the API generates. Quote the request id when you contact ",[374,1546,600],{"href":346},". It is how a single request is found in our logs.",{"title":1549,"searchDepth":1550,"depth":1551,"links":1552},"",2,3,[1553,1570,1586,1599,1603,1609,1615],{"id":363,"depth":1550,"text":364,"children":1554},[1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569],{"id":368,"depth":1551,"text":369},{"id":421,"depth":1551,"text":422},{"id":136,"depth":1551,"text":77},{"id":463,"depth":1551,"text":452},{"id":499,"depth":1551,"text":457},{"id":515,"depth":1551,"text":515},{"id":531,"depth":1551,"text":532},{"id":551,"depth":1551,"text":552},{"id":484,"depth":1551,"text":484},{"id":589,"depth":1551,"text":590},{"id":604,"depth":1551,"text":605},{"id":629,"depth":1551,"text":630},{"id":377,"depth":1551,"text":648},{"id":666,"depth":1551,"text":667},{"id":489,"depth":1551,"text":709},{"id":726,"depth":1550,"text":727,"children":1571},[1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585],{"id":730,"depth":1551,"text":731},{"id":756,"depth":1551,"text":65},{"id":769,"depth":1551,"text":770},{"id":784,"depth":1551,"text":785},{"id":811,"depth":1551,"text":812},{"id":846,"depth":1551,"text":847},{"id":870,"depth":1551,"text":871},{"id":616,"depth":1551,"text":891},{"id":929,"depth":1551,"text":930},{"id":946,"depth":1551,"text":947},{"id":973,"depth":1551,"text":974},{"id":680,"depth":1551,"text":984},{"id":1014,"depth":1551,"text":1015},{"id":1029,"depth":1551,"text":1030},{"id":1054,"depth":1550,"text":1055,"children":1587},[1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598],{"id":1058,"depth":1551,"text":1059},{"id":1081,"depth":1551,"text":1082},{"id":1066,"depth":1551,"text":1100},{"id":1117,"depth":1551,"text":1118},{"id":1128,"depth":1551,"text":1129},{"id":1137,"depth":1551,"text":1094},{"id":1155,"depth":1551,"text":1156},{"id":1170,"depth":1551,"text":1171},{"id":1076,"depth":1551,"text":1183},{"id":1107,"depth":1551,"text":1204},{"id":1210,"depth":1551,"text":1211},{"id":1234,"depth":1550,"text":1235,"children":1600},[1601,1602],{"id":1238,"depth":1551,"text":1239},{"id":1261,"depth":1551,"text":1262},{"id":1284,"depth":1550,"text":1285,"children":1604},[1605,1606,1607,1608],{"id":1288,"depth":1551,"text":1289},{"id":1297,"depth":1551,"text":1298},{"id":1306,"depth":1551,"text":1307},{"id":1313,"depth":1551,"text":1314},{"id":272,"depth":1550,"text":89,"children":1610},[1611,1612,1613,1614],{"id":1328,"depth":1551,"text":1329},{"id":1338,"depth":1551,"text":1339},{"id":1363,"depth":1551,"text":1364},{"id":1379,"depth":1551,"text":1380},{"id":1399,"depth":1550,"text":33,"children":1616},[1617,1618,1619,1620,1621,1622,1623,1624],{"id":1402,"depth":1551,"text":1402},{"id":1415,"depth":1551,"text":1416},{"id":1437,"depth":1551,"text":1438},{"id":1457,"depth":1551,"text":1458},{"id":1467,"depth":1551,"text":1468},{"id":1485,"depth":1551,"text":39},{"id":1504,"depth":1551,"text":1505},{"id":1525,"depth":1551,"text":1526},"The words this documentation uses, each defined once, with a link to the page that explains it in full.","md",{},true,[],"10",{"title":336,"description":1625},"api\u002Fglossary","RAayQwRy4aTqryzYdDbt-4Bda8oSzFcMYjx20RGNtco",[],1791554615398]