[{"data":1,"prerenderedAt":2416},["ShallowReactive",2],{"api-nav":3,"api-spec:index":351,"api-spec:op:create-student-import":636,"api-permissions-guide":1261,"api-reference-doc:create-student-import":1262},[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",[],{"title":352,"version":353,"description":354,"baseUrl":355,"groups":356},"Main Team API","1.2.0","Register your students, enter them for exams, follow their applications, download their certificates and reports, and sign them in to an organization’s panel.\n\nEvery operation except the health check needs a bearer token: a JWT you sign yourself with HS256 and your account’s `apiSecret`. Put your `apiKey` in both the `kid` header and the `sub` claim, and set `iat` and `exp` at most 3600 seconds apart. Every authentication failure answers the same `401 unauthorized`.","https:\u002F\u002Fapi.main-team.org",[357,368,383,419,484,492,522,561,586],{"tag":127,"slug":128,"description":358,"guide":17,"operations":359},"Whether the API is up. No token needed, so it is the first call to make against an environment.",[360],{"operationId":361,"slug":362,"method":133,"path":363,"tag":127,"summary":131,"deprecated":134,"public":364,"permission":365,"scope":366,"order":367},"getHealth","get-health","\u002Fv1\u002Fhealth",true,null,"public",1,{"tag":77,"slug":136,"description":369,"guide":78,"operations":370},"The account your token belongs to, and revoking a token before it expires.",[371,378],{"operationId":372,"slug":373,"method":141,"path":374,"tag":77,"summary":139,"deprecated":134,"public":134,"permission":375,"scope":376,"order":377},"revokeToken","revoke-token","\u002Fv1\u002Fapi-account\u002Frevoke-token","api\u002F*:$org:$ID","flat",2,{"operationId":379,"slug":380,"method":133,"path":381,"tag":77,"summary":143,"deprecated":134,"public":134,"permission":375,"scope":376,"order":382},"getCurrentApiAccount","get-current-api-account","\u002Fv1\u002Fapi-account\u002Fvalidate-me",3,{"tag":74,"slug":146,"description":384,"guide":75,"operations":385},"Countries, grades and organizations. A student’s `country` and `grade` take these `_id`s, and so does every `:organizationId` in a path.",[386,392,397,403,408,414],{"operationId":387,"slug":388,"method":133,"path":389,"tag":74,"summary":149,"deprecated":134,"public":134,"permission":390,"scope":376,"order":391},"listCountries","list-countries","\u002Fv1\u002Fcountry","country\u002Fread:$org:$ID",4,{"operationId":393,"slug":394,"method":133,"path":395,"tag":74,"summary":152,"deprecated":134,"public":134,"permission":390,"scope":376,"order":396},"getCountry","get-country","\u002Fv1\u002Fcountry\u002F{id}",5,{"operationId":398,"slug":399,"method":133,"path":400,"tag":74,"summary":155,"deprecated":134,"public":134,"permission":401,"scope":376,"order":402},"listGrades","list-grades","\u002Fv1\u002Fgrade","grade\u002Fread:$org:$ID",6,{"operationId":404,"slug":405,"method":133,"path":406,"tag":74,"summary":158,"deprecated":134,"public":134,"permission":401,"scope":376,"order":407},"getGrade","get-grade","\u002Fv1\u002Fgrade\u002F{id}",7,{"operationId":409,"slug":410,"method":133,"path":411,"tag":74,"summary":161,"deprecated":134,"public":134,"permission":412,"scope":376,"order":413},"listOrganizations","list-organizations","\u002Fv1\u002Forganization","organization\u002Fread:$org:$ID",8,{"operationId":415,"slug":416,"method":133,"path":417,"tag":74,"summary":164,"deprecated":134,"public":134,"permission":412,"scope":376,"order":418},"getOrganization","get-organization","\u002Fv1\u002Forganization\u002F{id}",9,{"tag":62,"slug":167,"description":420,"guide":63,"operations":421},"Registering your students, reading and updating them, setting a password, and what each organization holds for them. You only ever see the students your account registered.",[422,428,433,438,443,448,453,458,464,470,475,479],{"operationId":423,"slug":424,"method":133,"path":425,"tag":62,"summary":170,"deprecated":134,"public":134,"permission":426,"scope":376,"order":427},"listStudents","list-students","\u002Fv1\u002Fstudent","student\u002Fread:$org:$ID",10,{"operationId":429,"slug":430,"method":141,"path":425,"tag":62,"summary":173,"deprecated":134,"public":134,"permission":431,"scope":376,"order":432},"registerStudent","register-student","student\u002Fcreate:$org:$ID",11,{"operationId":434,"slug":435,"method":141,"path":436,"tag":62,"summary":176,"deprecated":134,"public":134,"permission":431,"scope":376,"order":437},"checkStudentRegistration","check-student-registration","\u002Fv1\u002Fstudent\u002Fcheck",12,{"operationId":439,"slug":440,"method":141,"path":441,"tag":62,"summary":179,"deprecated":134,"public":134,"permission":431,"scope":376,"order":442},"createStudentImport","create-student-import","\u002Fv1\u002Fstudent\u002Fimport",13,{"operationId":444,"slug":445,"method":133,"path":446,"tag":62,"summary":182,"deprecated":134,"public":134,"permission":431,"scope":376,"order":447},"getStudentImport","get-student-import","\u002Fv1\u002Fstudent\u002Fimport\u002F{importId}",14,{"operationId":449,"slug":450,"method":133,"path":451,"tag":62,"summary":185,"deprecated":134,"public":134,"permission":426,"scope":376,"order":452},"getStudent","get-student","\u002Fv1\u002Fstudent\u002F{studentId}",15,{"operationId":454,"slug":455,"method":190,"path":451,"tag":62,"summary":188,"deprecated":134,"public":134,"permission":456,"scope":376,"order":457},"updateStudent","update-student","student\u002Fupdate:$org:$ID",16,{"operationId":459,"slug":460,"method":190,"path":461,"tag":62,"summary":192,"deprecated":134,"public":134,"permission":462,"scope":376,"order":463},"setStudentPassword","set-student-password","\u002Fv1\u002Fstudent\u002F{studentId}\u002Fpassword","auth\u002Fsignin:$org:$ID",17,{"operationId":465,"slug":466,"method":133,"path":467,"tag":62,"summary":195,"deprecated":134,"public":134,"permission":426,"scope":468,"order":469},"listOrgStudents","list-org-students","\u002Fv1\u002F{organizationId}\u002Fstudent","organization",18,{"operationId":471,"slug":472,"method":133,"path":473,"tag":62,"summary":198,"deprecated":134,"public":134,"permission":426,"scope":468,"order":474},"getOrgStudent","get-org-student","\u002Fv1\u002F{organizationId}\u002Fstudent\u002F{studentId}",19,{"operationId":476,"slug":477,"method":190,"path":473,"tag":62,"summary":201,"deprecated":134,"public":134,"permission":456,"scope":468,"order":478},"updateOrgStudent","update-org-student",20,{"operationId":480,"slug":481,"method":190,"path":482,"tag":62,"summary":204,"deprecated":134,"public":134,"permission":456,"scope":468,"order":483},"linkStudentSupervisor","link-student-supervisor","\u002Fv1\u002F{organizationId}\u002Fstudent\u002F{studentId}\u002Fsupervisor",21,{"tag":80,"slug":207,"description":485,"guide":81,"operations":486},"Links that sign one of your students into an organization’s panel. Each works once and expires two minutes after it is issued.",[487],{"operationId":488,"slug":489,"method":141,"path":490,"tag":80,"summary":210,"deprecated":134,"public":134,"permission":462,"scope":468,"order":491},"createSigninLink","create-signin-link","\u002Fv1\u002F{organizationId}\u002Fauth\u002Fsignin",22,{"tag":83,"slug":213,"description":493,"guide":84,"operations":494},"The exam categories and exams an organization runs, and the ones one of your students can apply to.",[495,501,507,512,517],{"operationId":496,"slug":497,"method":133,"path":498,"tag":83,"summary":216,"deprecated":134,"public":134,"permission":499,"scope":468,"order":500},"listExams","list-exams","\u002Fv1\u002F{organizationId}\u002Fexam","exam\u002Fread:$org:$ID",23,{"operationId":502,"slug":503,"method":133,"path":504,"tag":83,"summary":219,"deprecated":134,"public":134,"permission":505,"scope":468,"order":506},"listExamCategories","list-exam-categories","\u002Fv1\u002F{organizationId}\u002Fexam-category","exam-category\u002Fread:$org:$ID",24,{"operationId":508,"slug":509,"method":133,"path":510,"tag":83,"summary":222,"deprecated":134,"public":134,"permission":505,"scope":468,"order":511},"getExamCategory","get-exam-category","\u002Fv1\u002F{organizationId}\u002Fexam-category\u002F{categoryId}",25,{"operationId":513,"slug":514,"method":133,"path":515,"tag":83,"summary":225,"deprecated":134,"public":134,"permission":499,"scope":468,"order":516},"listAvailableExams","list-available-exams","\u002Fv1\u002F{organizationId}\u002Fexam\u002Favailable\u002F{studentId}",26,{"operationId":518,"slug":519,"method":133,"path":520,"tag":83,"summary":228,"deprecated":134,"public":134,"permission":499,"scope":468,"order":521},"getExam","get-exam","\u002Fv1\u002F{organizationId}\u002Fexam\u002F{examId}",27,{"tag":86,"slug":231,"description":523,"guide":87,"operations":524},"Entering your students for exams: creating, reading, moving and deleting their applications.",[525,531,536,541,546,551,556],{"operationId":526,"slug":527,"method":133,"path":528,"tag":86,"summary":234,"deprecated":134,"public":134,"permission":529,"scope":468,"order":530},"listApplications","list-applications","\u002Fv1\u002F{organizationId}\u002Fapplication","application\u002Fread:$org:$ID",28,{"operationId":532,"slug":533,"method":141,"path":528,"tag":86,"summary":237,"deprecated":134,"public":134,"permission":534,"scope":468,"order":535},"createApplication","create-application","application\u002Fcreate:$org:$ID",29,{"operationId":537,"slug":538,"method":133,"path":539,"tag":86,"summary":240,"deprecated":134,"public":134,"permission":529,"scope":468,"order":540},"listExamApplications","list-exam-applications","\u002Fv1\u002F{organizationId}\u002Fapplication\u002Fexam-applications\u002F{examId}",30,{"operationId":542,"slug":543,"method":133,"path":544,"tag":86,"summary":243,"deprecated":134,"public":134,"permission":529,"scope":468,"order":545},"listStudentApplications","list-student-applications","\u002Fv1\u002F{organizationId}\u002Fapplication\u002Fstudent-applications\u002F{studentId}",31,{"operationId":547,"slug":548,"method":133,"path":549,"tag":86,"summary":246,"deprecated":134,"public":134,"permission":529,"scope":468,"order":550},"getApplication","get-application","\u002Fv1\u002F{organizationId}\u002Fapplication\u002F{applicationId}",32,{"operationId":552,"slug":553,"method":190,"path":549,"tag":86,"summary":249,"deprecated":134,"public":134,"permission":554,"scope":468,"order":555},"moveApplication","move-application","application\u002Fupdate:$org:$ID",33,{"operationId":557,"slug":558,"method":254,"path":549,"tag":86,"summary":252,"deprecated":134,"public":134,"permission":559,"scope":468,"order":560},"deleteApplication","delete-application","application\u002Fdelete:$org:$ID",34,{"tag":256,"slug":257,"description":562,"guide":93,"operations":563},"Your students’ certificates and reports: listing them and downloading the files.",[564,570,575,581],{"operationId":565,"slug":566,"method":133,"path":567,"tag":256,"summary":260,"deprecated":134,"public":134,"permission":568,"scope":468,"order":569},"downloadCertificate","download-certificate","\u002Fv1\u002F{organizationId}\u002Fcertificate\u002Fdownload\u002F{certificateId}","certificate\u002Fread:$org:$ID",35,{"operationId":571,"slug":572,"method":133,"path":573,"tag":256,"summary":263,"deprecated":134,"public":134,"permission":568,"scope":468,"order":574},"listStudentCertificates","list-student-certificates","\u002Fv1\u002F{organizationId}\u002Fcertificate\u002F{userId}",36,{"operationId":576,"slug":577,"method":133,"path":578,"tag":256,"summary":266,"deprecated":134,"public":134,"permission":579,"scope":468,"order":580},"downloadReport","download-report","\u002Fv1\u002F{organizationId}\u002Freport\u002Fdownload\u002F{reportId}","report\u002Fread:$org:$ID",37,{"operationId":582,"slug":583,"method":133,"path":584,"tag":256,"summary":269,"deprecated":134,"public":134,"permission":579,"scope":468,"order":585},"listStudentReports","list-student-reports","\u002Fv1\u002F{organizationId}\u002Freport\u002F{userId}",38,{"tag":89,"slug":272,"description":587,"guide":90,"operations":588},"Online group challenges your students take part in: the challenges, which of your students can join, the groups they are in, each step and its files, what happened in a group, and submitting on your student’s behalf.",[589,595,600,605,610,615,621,626,631],{"operationId":590,"slug":591,"method":133,"path":592,"tag":89,"summary":275,"deprecated":134,"public":134,"permission":593,"scope":468,"order":594},"listGroupChallenges","list-group-challenges","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge","group-challenge\u002Fread:$org:$ID",39,{"operationId":596,"slug":597,"method":133,"path":598,"tag":89,"summary":278,"deprecated":134,"public":134,"permission":593,"scope":468,"order":599},"getGroupChallenge","get-group-challenge","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}",40,{"operationId":601,"slug":602,"method":133,"path":603,"tag":89,"summary":281,"deprecated":134,"public":134,"permission":593,"scope":468,"order":604},"listGroupChallengeGroups","list-group-challenge-groups","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fgroup",41,{"operationId":606,"slug":607,"method":133,"path":608,"tag":89,"summary":284,"deprecated":134,"public":134,"permission":593,"scope":468,"order":609},"getGroupChallengeGroup","get-group-challenge-group","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fgroup\u002F{groupId}",42,{"operationId":611,"slug":612,"method":133,"path":613,"tag":89,"summary":287,"deprecated":134,"public":134,"permission":593,"scope":468,"order":614},"listGroupChallengeActivity","list-group-challenge-activity","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fgroup\u002F{groupId}\u002Factivity",43,{"operationId":616,"slug":617,"method":141,"path":618,"tag":89,"summary":290,"deprecated":134,"public":134,"permission":619,"scope":468,"order":620},"submitGroupChallengeWork","submit-group-challenge-work","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fgroup\u002F{groupId}\u002Ffinal-submit","group-challenge\u002Fsubmit:$org:$ID",44,{"operationId":622,"slug":623,"method":141,"path":624,"tag":89,"summary":293,"deprecated":134,"public":134,"permission":619,"scope":468,"order":625},"submitGroupChallengeStep","submit-group-challenge-step","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fgroup\u002F{groupId}\u002Fstep\u002F{stepId}\u002Fsubmit",45,{"operationId":627,"slug":628,"method":133,"path":629,"tag":89,"summary":296,"deprecated":134,"public":134,"permission":593,"scope":468,"order":630},"listGroupChallengeStudents","list-group-challenge-students","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fstudent",46,{"operationId":632,"slug":633,"method":133,"path":634,"tag":89,"summary":299,"deprecated":134,"public":134,"permission":593,"scope":468,"order":635},"getGroupChallengeStudent","get-group-challenge-student","\u002Fv1\u002F{organizationId}\u002Fgroup-challenge\u002F{challengeId}\u002Fstudent\u002F{studentId}",47,{"operationId":439,"slug":440,"method":141,"path":441,"tag":62,"summary":179,"deprecated":134,"public":134,"permission":431,"scope":376,"order":442,"description":637,"permissions":638,"errors":639,"guide":365,"parameters":720,"requestBody":721,"responses":802,"successStatus":1259,"kind":1260,"paginated":134,"baseUrl":355,"tagDescription":420,"sandbox":364},"Registers 30 to 1000 students in one request. Every row follows `registerStudent`’s rules exactly, so read that operation first: this one is the same registration, a class at a time.\n\n**It answers before it registers anybody.** The whole batch is checked while you wait — every field, every `country`, `grade`, `city` and `school`, and every email address — and then `202` with an import you read to follow it. The `Location` header is where to read it. Nothing exists yet when you get that answer: poll `getStudentImport` every few seconds until `status` is no longer `queued` or `running`.\n\n**All of them or none of them.** The students are written in one transaction, so a batch either registers every row or registers nothing. There is no partial import to reconcile and nothing to undo. A batch that fails says why, and you fix the rows and send it again.\n\n**No passwords.** A row takes everything `registerStudent` takes except `password`: hashing is deliberately slow, and a thousand of them would keep the batch waiting and leave the plaintext queued meanwhile. Sign the students in with `createSigninLink`, or set a password per student afterwards with `setStudentPassword`.\n\n**The welcome email is the one `registerStudent` sends**, one per student, with the same text.\n\n**Limits.** One unfinished import per account: send the next batch when this one has finished. 10 requests an hour. Bodies up to 1.5 MB here, where every other operation takes 100 kB.\n\n**Sending the same batch twice is safe.** The same rows from your account inside 24 hours answer with the import you already have, not a second one, so a request whose answer you never saw can simply be sent again.\n\n**If anything is wrong with the rows** the answer is `422`, nothing is queued, and `error.details.rows` lists every row at fault with its position, property and a code to branch on. Fix them and send the batch again.",[431],[640,644,647,650,653,657,662,666,671,676,681,701,705,709,714,717],{"code":641,"status":642,"when":643},"bad_request",400,"The body is not valid JSON, breaks a field’s rules, or has a field this operation does not accept (\"property \u003Cname> should not exist\").",{"code":641,"message":645,"status":642,"when":646},"students.4.birth birth must be a real date in DD\u002FMM\u002FYYYY format","A row breaks one of `registerStudent`’s rules. The message names the row and the property, counting rows from 0.",{"code":641,"message":648,"status":642,"when":649},"students must contain at least 30 elements","`students` has fewer than 30 rows or more than 1000. Below 30, call `registerStudent` per student.",{"code":641,"message":651,"status":642,"when":652},"property password should not exist","A row carries `password`, which this operation does not take, or any other property it does not accept.",{"code":654,"status":655,"when":656},"unauthorized",401,"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.",{"code":658,"message":659,"status":660,"when":661},"forbidden","Insufficient role permissions",403,"The token is valid, but no role on your account allows `student\u002Fcreate` on `mto`, the organization every operation without `:organizationId` acts on, or a role denies it.",{"code":663,"status":664,"when":665},"not_found",404,"Bulk registration is not switched on for the environment you are calling. Nothing was queued. Ask support before you build against it.",{"code":667,"message":668,"status":669,"when":670},"conflict","You already have an import that has not finished. Read it, and send the next one when it has. (65f0c2a1d3e4f5a6b7c8d901)",409,"You already have an import that has not finished. Read it, and send the next one when it has.",{"code":672,"message":673,"status":674,"when":675},"payload_too_large","request entity too large",413,"The body is larger than 1.5 MB.",{"code":677,"message":678,"status":679,"when":680},"unsupported_media_type","unsupported charset \"ISO-8859-1\"",415,"The body declares a charset that is not a UTF one (send UTF-8), or a `Content-Encoding` other than gzip, deflate or br.",{"code":682,"details":683,"message":698,"status":699,"when":700},"unprocessable_entity",{"rejected":382,"rows":684,"total":697,"truncated":134},[685,689,694],{"code":686,"field":687,"message":688,"row":391},"invalid_field","birth","birth must be a real date in DD\u002FMM\u002FYYYY format",{"code":690,"field":691,"message":692,"row":463,"studentId":693},"email_taken_by_your_student","email","One of your students already has this email address.","652f1c9b8e4b2a0012a3c4d5",{"code":695,"duplicateOf":437,"field":691,"message":696,"row":545},"duplicate_in_request","Row 12 has the same email address.",250,"3 of 250 rows cannot be registered. Nothing was registered and no import was queued; error.details.rows lists every problem.",422,"One or more rows cannot be registered. Nothing was queued. `error.details.rows` lists every row at fault with a `code` to branch on: `invalid_field`, `unexpected_field`, `unknown_reference`, `duplicate_in_request`, `email_taken_by_your_student` (with that student’s `_id`) and `email_unavailable`, which never says who holds the address. The list is left out, and only counted, when the only problem is unavailable addresses and your account has already been shown those rows several times today.",{"code":702,"status":703,"when":704},"too_many_requests",429,"Your account has made more than 10 requests to this operation in the current hour. Wait the seconds in `Retry-After` before sending again. This operation has a budget of its own, lower than the 100 per 60 seconds every other operation gets.",{"code":706,"status":707,"when":708},"internal_error",500,"Something failed on our side. Retry later, and quote `request_id` if it goes on.",{"code":710,"message":711,"status":712,"when":713},"service_unavailable","This server is already checking another import. Send it again in a few seconds.",503,"This server is already checking another batch. Nothing was queued; wait the seconds in `Retry-After` and send it again.",{"code":710,"message":715,"status":712,"when":716},"Bulk registration is paused for a scheduled window. Nothing was queued; send it again after the time in Retry-After.","Bulk registration is paused for a scheduled window, such as an exam morning. Nothing was queued; `Retry-After` is how long the window lasts. An import already queued is not lost — it waits and then runs.",{"code":710,"message":718,"status":712,"when":719},"Checking this batch took too long. Nothing was registered and no import was queued. Send it again later, or in smaller batches.","Checking the batch took too long. Nothing was queued; send it again, or in smaller batches.",[],{"content":722,"required":364},{"application\u002Fjson":723},{"schema":724},{"x-ref":725,"description":726,"properties":727,"required":801,"type":796},"#\u002Fcomponents\u002Fschemas\u002FCreateStudentImportRequest","The body of `createStudentImport`.",{"students":728,"clientReference":798},{"description":729,"items":730,"maxItems":797,"minItems":540,"type":783},"The students to register, 30 to 1000 of them. Below that, call `registerStudent` per student: an import is queued and answered before it runs, and for a handful of students the round trip is not worth the wait.",{"x-ref":731,"description":732,"properties":733,"required":788,"type":796},"#\u002Fcomponents\u002Fschemas\u002FStudentImportRow","One student in `createStudentImport`: the body of `registerStudent` without `password`, with the same rules, plus your own `externalRef`.",{"firstName":734,"lastName":738,"birth":741,"sex":745,"email":751,"email2":754,"phone":756,"country":759,"grade":763,"school":766,"city":769,"activatedPlatformsThisSeason":772,"externalRef":784},{"description":735,"example":736,"type":737},"The student’s first name. Printed on certificates and reports, followed by `lastName`.","Jane","string",{"description":739,"example":740,"type":737},"The student’s surname. Printed on certificates and reports after `firstName`. It cannot be empty.","Doe",{"description":742,"example":743,"pattern":744,"type":737},"Date of birth as `DD\u002FMM\u002FYYYY`, and a date that exists: `31\u002F02\u002F2008` is refused. An ISO date such as `2008-05-14` is refused.","14\u002F05\u002F2008","^(0[1-9]|[12]\\d|3[01])\\\u002F(0[1-9]|1[0-2])\\\u002F\\d{4}$",{"description":746,"enum":747,"example":749,"type":737},"One of `m`, `f` or `n`.",[748,749,750],"m","f","n",{"description":752,"example":753,"format":691,"type":737},"The student’s email address, stored in lower case. An address belongs to one student on the whole platform, so one already registered, by your account or another, is refused with 409.","jane.doe@example.com",{"description":755,"type":737},"Leave this out. Any value but an empty one is refused with 400.",{"description":757,"example":758,"type":737},"A phone number, stored as you send it. No format is checked. On an update, `\"\"` clears it.","+1 555 0100",{"description":760,"example":761,"pattern":762,"type":737},"The `_id` of a country, from `listCountries` (`GET \u002Fv1\u002Fcountry`). An id only: a name or an ISO code is refused. Its two-letter code starts the student’s `username`.","6650a1b2c3d4e5f6a7b8c9d1","^[0-9a-fA-F]{24}$",{"description":764,"example":765,"type":737},"The `_id` of a grade, from `listGrades` (`GET \u002Fv1\u002Fgrade`), or its name, `1` to `12`. Either way the grade’s `_id` is what is stored. One that matches no grade is refused with 400. The grade decides which exams the student is offered.","10",{"description":767,"example":768,"type":737},"The `_id` of a school, or its name within `country` and `city`, matched without regard to case. There is no list of schools to look one up in: send the name your records hold. One that matches no school is refused with 400; no school is ever created.","Springfield High School",{"description":770,"example":771,"type":737},"The `_id` of a city, or its name within `country`, matched without regard to case. There is no list of cities to look one up in: send the name your records hold. One that matches no city is refused with 400; no city is ever created.","Springfield",{"description":773,"example":774,"items":776,"maxItems":402,"type":783},"The organizations the student takes part in this season, by `slug` (as `listOrganizations` gives it, except `mto`: the core record, which every student is on), or `common` for every organization. Registration sets `[\"common\"]` when you leave it out; `null` is refused with 400. At most 6 entries.",[775],"common",{"enum":777,"type":737},[775,778,779,780,781,782],"stem","hilingua","neo","gmath","coding","array",{"description":785,"example":786,"maxLength":787,"type":737},"Your own reference for this row, echoed back when you read the import. Not stored on the student and not required to be unique. At most 64 characters.","roster-2026-114",64,[789,790,687,791,691,792,793,794,795],"firstName","lastName","sex","country","grade","school","city","object",1000,{"description":799,"example":800,"maxLength":787,"type":737},"Your own name for this batch, echoed back when you read the import. At most 64 characters.","year-10-autumn-2026",[167],{"202":803,"400":981,"401":1028,"403":1050,"404":1071,"409":1092,"413":1113,"415":1134,"422":1155,"429":1181,"500":1207,"503":1229},{"content":804,"description":966,"headers":967},{"application\u002Fjson":805},{"examples":806,"schema":836},{"accepted":807,"alreadySent":827},{"summary":808,"value":809},"Accepted",{"data":810,"message":826,"success":364},{"_id":811,"clientReference":800,"createdAt":812,"expiresAt":813,"failure":814,"finishedAt":817,"registered":697,"startedAt":818,"status":819,"students":820,"total":697},"65f0c2a1d3e4f5a6b7c8d901","2026-10-06T08:15:00.000Z","2026-11-05T08:15:09.000Z",{"code":815,"message":816},"rows_rejected","Two rows could no longer be registered. Nothing was registered.","2026-10-06T08:15:09.000Z","2026-10-06T08:15:04.000Z","queued",[821],{"email":753,"error":822,"externalRef":786,"row":824,"status":825,"studentId":823},{"code":690,"duplicateOf":437,"message":692,"studentId":823},"6650a1b2c3d4e5f6a7b8c9d0",0,"registered","Import accepted. The students are registered in the background; read the import to follow it.",{"summary":828,"value":829},"You sent these exact rows inside the last 24 hours. The import in `data` is the one you already have; no second one was made.",{"data":830,"message":835,"success":364},{"_id":811,"clientReference":800,"createdAt":812,"expiresAt":813,"failure":831,"finishedAt":817,"registered":697,"startedAt":818,"status":819,"students":832,"total":697},{"code":815,"message":816},[833],{"email":753,"error":834,"externalRef":786,"row":824,"status":825,"studentId":823},{"code":690,"duplicateOf":437,"message":692,"studentId":823},"You already sent this batch. Its import is unchanged.",{"allOf":837},[838,875],{"x-ref":839,"description":840,"properties":841,"required":872,"type":796},"#\u002Fcomponents\u002Fschemas\u002FSuccessEnvelope","How every successful JSON response is wrapped. `data` is the result, and each operation declares its shape; list operations add `pagination`. `GET \u002Fv1\u002Fapi-account\u002Fvalidate-me` is the one operation that answers without this envelope.",{"success":842,"message":846,"pagination":849},{"description":843,"enum":844,"example":364,"type":845},"Always `true` on a success.",[364],"boolean",{"description":847,"example":848,"type":737},"A sentence saying what happened, written for a person. Branch on the status and on `data`, not on this.","Request completed successfully.",{"allOf":850,"description":871},[851],{"x-ref":852,"description":853,"properties":854,"required":866,"type":796},"#\u002Fcomponents\u002Fschemas\u002FPaginationMeta","Where one page sits in the whole list.",{"page":855,"limit":858,"total":861,"totalPages":864},{"description":856,"example":367,"minimum":367,"type":857},"The page returned, counting from 1.","number",{"description":859,"example":478,"maximum":860,"minimum":367,"type":857},"Items per page: the `limit` you sent, 20 if you sent none, and never more than 100.",100,{"description":862,"example":863,"minimum":824,"type":857},"Items across every page.",57,{"description":865,"example":382,"minimum":824,"type":857},"Pages at this `limit`: `total \u002F limit`, rounded up.",[867,868,869,870],"page","limit","total","totalPages","On list operations only.",[873,874],"success","message",{"properties":876,"required":964,"type":796},{"message":877,"data":878},{"example":826,"type":737},{"x-ref":879,"description":880,"properties":881,"required":960,"type":796},"#\u002Fcomponents\u002Fschemas\u002FStudentImportResponse","A batch of students you asked to register, and what has happened to it.",{"_id":882,"status":884,"total":891,"registered":893,"clientReference":895,"failure":897,"students":910,"createdAt":951,"startedAt":954,"finishedAt":956,"expiresAt":958},{"description":883,"example":811,"type":737},"The import’s `_id`. Read it with `getStudentImport`.",{"description":885,"enum":886,"example":819,"type":737},"`queued` until a server picks it up, `running` while it registers, then `succeeded` or `failed`. `cancelled` means an operator stopped it. There is no partial import: on anything but `succeeded` no student of this batch was registered.",[819,887,888,889,890],"running","succeeded","failed","cancelled",{"description":892,"example":697,"type":857},"How many rows you sent.",{"description":894,"example":697,"type":857},"How many students were registered: `total` once the import has succeeded, and 0 until then and for ever after a failure.",{"description":896,"example":800,"type":737},"The `clientReference` you sent, if you sent one.",{"allOf":898,"description":909},[899],{"x-ref":900,"description":901,"properties":902,"required":907,"type":796},"#\u002Fcomponents\u002Fschemas\u002FStudentImportFailureResponse","Why an import ended the way it did.",{"code":903,"message":905},{"description":904,"example":815,"type":737},"A stable machine code. `rows_rejected`: a row stopped being registrable between the check and the write, most often because its address was registered in between; the rows say which. `forbidden`: the account may no longer register students. `cancelled`: an operator stopped it. `internal_error`: something failed on our side.",{"description":906,"example":816,"type":737},"Written for a person, and may change: never branch on it.",[908,874],"code","Set once the import has failed or been cancelled.",{"description":911,"items":912,"type":783},"One page of the rows, in the order you sent them. Page it with `page` and `limit`; `pagination.total` counts every row. Absent from the answer to `createStudentImport`, which has nothing to report yet.",{"x-ref":913,"description":914,"properties":915,"required":948,"type":796},"#\u002Fcomponents\u002Fschemas\u002FStudentImportRowResponse","One student of an import.",{"row":916,"email":918,"externalRef":920,"status":922,"studentId":927,"error":929},{"description":917,"example":824,"type":857},"The row’s position in the `students` you sent, counting from 0.",{"description":919,"example":753,"format":691,"type":737},"The address you sent for this row, in lower case.",{"description":921,"example":786,"type":737},"The `externalRef` you sent for this row, if you sent one.",{"description":923,"enum":924,"example":825,"type":737},"`pending` until the import runs, then `registered` for every row when it succeeds, or `skipped` for every row when it does not. An import registers all of its students or none of them.",[925,825,926],"pending","skipped",{"description":928,"example":823,"type":737},"The student’s `_id`, on a `registered` row. Use it with `getStudent`, `createSigninLink` and `createApplication`.",{"allOf":930,"description":947},[931],{"x-ref":932,"description":933,"properties":934,"required":946,"type":796},"#\u002Fcomponents\u002Fschemas\u002FStudentImportRowErrorResponse","Why one row of an import could not be registered.",{"code":935,"message":941,"studentId":942,"duplicateOf":944},{"description":936,"enum":937,"example":690,"type":737},"A stable machine code: branch on this. `invalid_field` and `unexpected_field` are the row’s own rules; `unknown_reference` is a `country`, `grade`, `city` or `school` that matches nothing; `duplicate_in_request` is the same address twice in your own body; `email_taken_by_your_student` is one of your students; `email_unavailable` is an address that cannot be registered, and the answer never says who holds it.",[686,938,939,695,690,940],"unexpected_field","unknown_reference","email_unavailable",{"description":906,"example":692,"type":737},{"description":943,"example":823,"type":737},"On `email_taken_by_your_student`: the `_id` of the student of yours who has the address, so you can update them instead.",{"description":945,"example":437,"type":857},"On `duplicate_in_request`: the earlier row in your own body with the same address.",[908,874],"Why this row could not be registered, when it could not.",[949,691,950],"row","status",{"description":952,"example":812,"format":953,"type":737},"When you sent it.","date-time",{"description":955,"example":818,"format":953,"type":737},"When a server picked it up.",{"description":957,"example":817,"format":953,"type":737},"When it ended, whichever way it ended.",{"description":959,"example":813,"format":953,"type":737},"When this import stops being readable. After it, `getStudentImport` answers 404, exactly as it does for an import that never existed. The students stay registered.",[961,950,869,825,167,962,963],"_id","createdAt","expiresAt",[965],"data","Accepted: `message` is \"Import accepted. The students are registered in the background; read the import to follow it.\".\n\nOr `message` is \"You already sent this batch. Its import is unchanged.\": You sent these exact rows inside the last 24 hours. The import in `data` is the one you already have; no second one was made.",{"Location":968,"X-RateLimit-Limit":971,"X-RateLimit-Remaining":975,"X-RateLimit-Reset":978},{"description":969,"schema":970},"The import’s own path, `\u002Fv1\u002Fstudent\u002Fimport\u002F{importId}`. Read it to follow the batch.",{"type":737},{"description":972,"schema":973},"Requests your account may make to this operation per window (10 per 3600 seconds).",{"type":974},"integer",{"description":976,"schema":977},"Requests left in the current window.",{"type":974},{"description":979,"schema":980},"Seconds until the current window ends.",{"type":974},{"content":982,"description":1027},{"application\u002Fjson":983},{"examples":984,"schema":1000},{"bad_request":985,"bad_request_2":991,"bad_request_3":994,"bad_request_4":997},{"summary":643,"value":986},{"error":987},{"code":641,"documentation_url":988,"message":989,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#bad_request","The request was malformed or contained invalid parameters.","0b5c6d0e-8f7a-4b1c-9d2e-3f4a5b6c7d8e",{"summary":646,"value":992},{"error":993},{"code":641,"documentation_url":988,"message":645,"request_id":990},{"summary":649,"value":995},{"error":996},{"code":641,"documentation_url":988,"message":648,"request_id":990},{"summary":652,"value":998},{"error":999},{"code":641,"documentation_url":988,"message":651,"request_id":990},{"x-ref":1001,"description":1002,"properties":1003,"required":1025,"type":796},"#\u002Fcomponents\u002Fschemas\u002FErrorEnvelope","How every error response is wrapped.",{"error":1004},{"x-ref":1005,"description":1006,"properties":1007,"required":1022,"type":796},"#\u002Fcomponents\u002Fschemas\u002FErrorDetail","What went wrong.",{"code":1008,"message":1012,"documentation_url":1014,"request_id":1018,"details":1020},{"description":1009,"enum":1010,"example":663,"type":737},"A stable machine code: branch on this. Each one is explained at `documentation_url`.",[1011,641,654,658,663,667,672,677,682,702,706,710],"invalid_email",{"description":906,"example":1013,"type":737},"Not found!",{"description":1015,"example":1016,"format":1017,"type":737},"Where this code is explained.","https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#not_found","uri",{"description":1019,"example":990,"type":737},"This request’s id, also sent as the `X-Request-Id` response header: the one you sent, when it was acceptable, or else one the API made. Quote it when you report a problem.",{"additionalProperties":364,"description":1021,"type":796},"Present 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 `details` you do not recognise.",[908,874,1023,1024],"documentation_url","request_id",[1026],"error","- `bad_request`: The body is not valid JSON, breaks a field’s rules, or has a field this operation does not accept (\"property \u003Cname> should not exist\").\n- `bad_request`: A row breaks one of `registerStudent`’s rules. The message names the row and the property, counting rows from 0.\n- `bad_request`: `students` has fewer than 30 rows or more than 1000. Below 30, call `registerStudent` per student.\n- `bad_request`: A row carries `password`, which this operation does not take, or any other property it does not accept.",{"content":1029,"description":1049},{"application\u002Fjson":1030},{"examples":1031,"schema":1037},{"unauthorized":1032},{"summary":654,"value":1033},{"error":1034},{"code":654,"documentation_url":1035,"message":1036,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#unauthorized","Authentication is required or the provided credentials are invalid.",{"x-ref":1001,"description":1002,"properties":1038,"required":1048,"type":796},{"error":1039},{"x-ref":1005,"description":1006,"properties":1040,"required":1047,"type":796},{"code":1041,"message":1043,"documentation_url":1044,"request_id":1045,"details":1046},{"description":1009,"enum":1042,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`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.",{"content":1051,"description":1070},{"application\u002Fjson":1052},{"examples":1053,"schema":1058},{"forbidden":1054},{"summary":658,"value":1055},{"error":1056},{"code":658,"documentation_url":1057,"message":659,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#forbidden",{"x-ref":1001,"description":1002,"properties":1059,"required":1069,"type":796},{"error":1060},{"x-ref":1005,"description":1006,"properties":1061,"required":1068,"type":796},{"code":1062,"message":1064,"documentation_url":1065,"request_id":1066,"details":1067},{"description":1009,"enum":1063,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`forbidden`: The token is valid, but no role on your account allows `student\u002Fcreate` on `mto`, the organization every operation without `:organizationId` acts on, or a role denies it.",{"content":1072,"description":1091},{"application\u002Fjson":1073},{"examples":1074,"schema":1079},{"not_found":1075},{"summary":663,"value":1076},{"error":1077},{"code":663,"documentation_url":1016,"message":1078,"request_id":990},"The requested resource could not be found.",{"x-ref":1001,"description":1002,"properties":1080,"required":1090,"type":796},{"error":1081},{"x-ref":1005,"description":1006,"properties":1082,"required":1089,"type":796},{"code":1083,"message":1085,"documentation_url":1086,"request_id":1087,"details":1088},{"description":1009,"enum":1084,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`not_found`: Bulk registration is not switched on for the environment you are calling. Nothing was queued. Ask support before you build against it.",{"content":1093,"description":1112},{"application\u002Fjson":1094},{"examples":1095,"schema":1100},{"conflict":1096},{"summary":667,"value":1097},{"error":1098},{"code":667,"documentation_url":1099,"message":668,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#conflict",{"x-ref":1001,"description":1002,"properties":1101,"required":1111,"type":796},{"error":1102},{"x-ref":1005,"description":1006,"properties":1103,"required":1110,"type":796},{"code":1104,"message":1106,"documentation_url":1107,"request_id":1108,"details":1109},{"description":1009,"enum":1105,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`conflict`: You already have an import that has not finished. Read it, and send the next one when it has.",{"content":1114,"description":1133},{"application\u002Fjson":1115},{"examples":1116,"schema":1121},{"payload_too_large":1117},{"summary":672,"value":1118},{"error":1119},{"code":672,"documentation_url":1120,"message":673,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#payload_too_large",{"x-ref":1001,"description":1002,"properties":1122,"required":1132,"type":796},{"error":1123},{"x-ref":1005,"description":1006,"properties":1124,"required":1131,"type":796},{"code":1125,"message":1127,"documentation_url":1128,"request_id":1129,"details":1130},{"description":1009,"enum":1126,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`payload_too_large`: The body is larger than 1.5 MB.",{"content":1135,"description":1154},{"application\u002Fjson":1136},{"examples":1137,"schema":1142},{"unsupported_media_type":1138},{"summary":677,"value":1139},{"error":1140},{"code":677,"documentation_url":1141,"message":678,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#unsupported_media_type",{"x-ref":1001,"description":1002,"properties":1143,"required":1153,"type":796},{"error":1144},{"x-ref":1005,"description":1006,"properties":1145,"required":1152,"type":796},{"code":1146,"message":1148,"documentation_url":1149,"request_id":1150,"details":1151},{"description":1009,"enum":1147,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`unsupported_media_type`: The body declares a charset that is not a UTF one (send UTF-8), or a `Content-Encoding` other than gzip, deflate or br.",{"content":1156,"description":1180},{"application\u002Fjson":1157},{"examples":1158,"schema":1168},{"unprocessable_entity":1159},{"summary":682,"value":1160},{"error":1161},{"code":682,"details":1162,"documentation_url":1167,"message":698,"request_id":990},{"rejected":382,"rows":1163,"total":697,"truncated":134},[1164,1165,1166],{"code":686,"field":687,"message":688,"row":391},{"code":690,"field":691,"message":692,"row":463,"studentId":693},{"code":695,"duplicateOf":437,"field":691,"message":696,"row":545},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#unprocessable_entity",{"x-ref":1001,"description":1002,"properties":1169,"required":1179,"type":796},{"error":1170},{"x-ref":1005,"description":1006,"properties":1171,"required":1178,"type":796},{"code":1172,"message":1174,"documentation_url":1175,"request_id":1176,"details":1177},{"description":1009,"enum":1173,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`unprocessable_entity`: One or more rows cannot be registered. Nothing was queued. `error.details.rows` lists every row at fault with a `code` to branch on: `invalid_field`, `unexpected_field`, `unknown_reference`, `duplicate_in_request`, `email_taken_by_your_student` (with that student’s `_id`) and `email_unavailable`, which never says who holds the address. The list is left out, and only counted, when the only problem is unavailable addresses and your account has already been shown those rows several times today.",{"content":1182,"description":1202,"headers":1203},{"application\u002Fjson":1183},{"examples":1184,"schema":1190},{"too_many_requests":1185},{"summary":702,"value":1186},{"error":1187},{"code":702,"documentation_url":1188,"message":1189,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#too_many_requests","Too many requests to this operation. Wait the number of seconds in Retry-After, then try again.",{"x-ref":1001,"description":1002,"properties":1191,"required":1201,"type":796},{"error":1192},{"x-ref":1005,"description":1006,"properties":1193,"required":1200,"type":796},{"code":1194,"message":1196,"documentation_url":1197,"request_id":1198,"details":1199},{"description":1009,"enum":1195,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`too_many_requests`: Your account has made more than 10 requests to this operation in the current hour. Wait the seconds in `Retry-After` before sending again. This operation has a budget of its own, lower than the 100 per 60 seconds every other operation gets.",{"Retry-After":1204},{"description":1205,"schema":1206},"Seconds to wait before sending again; a request sent sooner is refused too.",{"type":974},{"content":1208,"description":1228},{"application\u002Fjson":1209},{"examples":1210,"schema":1216},{"internal_error":1211},{"summary":706,"value":1212},{"error":1213},{"code":706,"documentation_url":1214,"message":1215,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#internal_error","An unexpected error occurred.",{"x-ref":1001,"description":1002,"properties":1217,"required":1227,"type":796},{"error":1218},{"x-ref":1005,"description":1006,"properties":1219,"required":1226,"type":796},{"code":1220,"message":1222,"documentation_url":1223,"request_id":1224,"details":1225},{"description":1009,"enum":1221,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"`internal_error`: Something failed on our side. Retry later, and quote `request_id` if it goes on.",{"content":1230,"description":1255,"headers":1256},{"application\u002Fjson":1231},{"examples":1232,"schema":1243},{"service_unavailable":1233,"service_unavailable_2":1237,"service_unavailable_3":1240},{"summary":713,"value":1234},{"error":1235},{"code":710,"documentation_url":1236,"message":711,"request_id":990},"https:\u002F\u002Fhub.main-team.org\u002Fapi\u002Ferrors#service_unavailable",{"summary":716,"value":1238},{"error":1239},{"code":710,"documentation_url":1236,"message":715,"request_id":990},{"summary":719,"value":1241},{"error":1242},{"code":710,"documentation_url":1236,"message":718,"request_id":990},{"x-ref":1001,"description":1002,"properties":1244,"required":1254,"type":796},{"error":1245},{"x-ref":1005,"description":1006,"properties":1246,"required":1253,"type":796},{"code":1247,"message":1249,"documentation_url":1250,"request_id":1251,"details":1252},{"description":1009,"enum":1248,"example":663,"type":737},[1011,641,654,658,663,667,672,677,682,702,706,710],{"description":906,"example":1013,"type":737},{"description":1015,"example":1016,"format":1017,"type":737},{"description":1019,"example":990,"type":737},{"additionalProperties":364,"description":1021,"type":796},[908,874,1023,1024],[1026],"- `service_unavailable`: This server is already checking another batch. Nothing was queued; wait the seconds in `Retry-After` and send it again.\n- `service_unavailable`: Bulk registration is paused for a scheduled window, such as an exam morning. Nothing was queued; `Retry-After` is how long the window lasts. An import already queued is not lost — it waits and then runs.\n- `service_unavailable`: Checking the batch took too long. Nothing was queued; send it again, or in smaller batches.",{"Retry-After":1257},{"description":1205,"schema":1258},{"type":974},"202","envelope",{"path":26},{"id":1263,"title":179,"apiPath":441,"body":1264,"deprecated":134,"description":2409,"extension":2410,"meta":2411,"method":141,"navigation":364,"operationId":439,"order":2412,"path":180,"permission":431,"public":134,"seo":2413,"stem":2414,"summary":179,"tag":62,"__hash__":2415},"apiReference\u002Fapi\u002Freference\u002Fcreate-student-import.md",{"type":1265,"value":1266,"toc":2407},"minimark",[1267,2403],[1268,1269,1270,1466,1893],"api-code-group",{},[1271,1272,1278],"pre",{"className":1273,"code":1274,"filename":1275,"language":1276,"meta":1277,"style":1277},"language-bash shiki shiki-themes github-light-high-contrast github-dark-high-contrast","# $TOKEN: a short-lived token you minted with your API key and secret\ncurl -sS -X POST 'https:\u002F\u002Fapi.main-team.org\u002Fv1\u002Fstudent\u002Fimport' \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H 'Content-Type: application\u002Fjson' \\\n  --data-binary @- \u003C\u003C'JSON'\n{\n  \"students\": [\n    {\n      \"firstName\": \"Jane\",\n      \"lastName\": \"Doe\",\n      \"birth\": \"14\u002F05\u002F2008\",\n      \"sex\": \"f\",\n      \"email\": \"jane.doe@example.com\",\n      \"email2\": \"\u003Cemail2>\",\n      \"phone\": \"+1 555 0100\",\n      \"country\": \"6650a1b2c3d4e5f6a7b8c9d1\",\n      \"grade\": \"10\",\n      \"school\": \"Springfield High School\",\n      \"city\": \"Springfield\",\n      \"activatedPlatformsThisSeason\": [\n        \"common\"\n      ],\n      \"externalRef\": \"roster-2026-114\"\n    }\n  ],\n  \"clientReference\": \"year-10-autumn-2026\"\n}\nJSON\n","curl","bash","",[908,1279,1280,1288,1311,1328,1337,1351,1356,1361,1366,1371,1376,1381,1386,1391,1396,1401,1406,1411,1416,1421,1426,1431,1436,1441,1446,1451,1456,1461],{"__ignoreMap":1277},[1281,1282,1284],"span",{"class":1283,"line":367},"line",[1281,1285,1287],{"class":1286},"sLBg1","# $TOKEN: a short-lived token you minted with your API key and secret\n",[1281,1289,1290,1293,1297,1300,1304,1307],{"class":1283,"line":377},[1281,1291,1275],{"class":1292},"soyes",[1281,1294,1296],{"class":1295},"s-5SL"," -sS",[1281,1298,1299],{"class":1295}," -X",[1281,1301,1303],{"class":1302},"sT6z2"," POST",[1281,1305,1306],{"class":1302}," 'https:\u002F\u002Fapi.main-team.org\u002Fv1\u002Fstudent\u002Fimport'",[1281,1308,1310],{"class":1309},"sHUrx"," \\\n",[1281,1312,1313,1316,1319,1323,1326],{"class":1283,"line":382},[1281,1314,1315],{"class":1295},"  -H",[1281,1317,1318],{"class":1302}," \"Authorization: Bearer ",[1281,1320,1322],{"class":1321},"suds8","$TOKEN",[1281,1324,1325],{"class":1302},"\"",[1281,1327,1310],{"class":1309},[1281,1329,1330,1332,1335],{"class":1283,"line":391},[1281,1331,1315],{"class":1295},[1281,1333,1334],{"class":1302}," 'Content-Type: application\u002Fjson'",[1281,1336,1310],{"class":1309},[1281,1338,1339,1342,1345,1348],{"class":1283,"line":396},[1281,1340,1341],{"class":1295},"  --data-binary",[1281,1343,1344],{"class":1302}," @-",[1281,1346,1347],{"class":1309}," \u003C\u003C",[1281,1349,1350],{"class":1321},"'JSON'\n",[1281,1352,1353],{"class":1283,"line":402},[1281,1354,1355],{"class":1302},"{\n",[1281,1357,1358],{"class":1283,"line":407},[1281,1359,1360],{"class":1302},"  \"students\": [\n",[1281,1362,1363],{"class":1283,"line":413},[1281,1364,1365],{"class":1302},"    {\n",[1281,1367,1368],{"class":1283,"line":418},[1281,1369,1370],{"class":1302},"      \"firstName\": \"Jane\",\n",[1281,1372,1373],{"class":1283,"line":427},[1281,1374,1375],{"class":1302},"      \"lastName\": \"Doe\",\n",[1281,1377,1378],{"class":1283,"line":432},[1281,1379,1380],{"class":1302},"      \"birth\": \"14\u002F05\u002F2008\",\n",[1281,1382,1383],{"class":1283,"line":437},[1281,1384,1385],{"class":1302},"      \"sex\": \"f\",\n",[1281,1387,1388],{"class":1283,"line":442},[1281,1389,1390],{"class":1302},"      \"email\": \"jane.doe@example.com\",\n",[1281,1392,1393],{"class":1283,"line":447},[1281,1394,1395],{"class":1302},"      \"email2\": \"\u003Cemail2>\",\n",[1281,1397,1398],{"class":1283,"line":452},[1281,1399,1400],{"class":1302},"      \"phone\": \"+1 555 0100\",\n",[1281,1402,1403],{"class":1283,"line":457},[1281,1404,1405],{"class":1302},"      \"country\": \"6650a1b2c3d4e5f6a7b8c9d1\",\n",[1281,1407,1408],{"class":1283,"line":463},[1281,1409,1410],{"class":1302},"      \"grade\": \"10\",\n",[1281,1412,1413],{"class":1283,"line":469},[1281,1414,1415],{"class":1302},"      \"school\": \"Springfield High School\",\n",[1281,1417,1418],{"class":1283,"line":474},[1281,1419,1420],{"class":1302},"      \"city\": \"Springfield\",\n",[1281,1422,1423],{"class":1283,"line":478},[1281,1424,1425],{"class":1302},"      \"activatedPlatformsThisSeason\": [\n",[1281,1427,1428],{"class":1283,"line":483},[1281,1429,1430],{"class":1302},"        \"common\"\n",[1281,1432,1433],{"class":1283,"line":491},[1281,1434,1435],{"class":1302},"      ],\n",[1281,1437,1438],{"class":1283,"line":500},[1281,1439,1440],{"class":1302},"      \"externalRef\": \"roster-2026-114\"\n",[1281,1442,1443],{"class":1283,"line":506},[1281,1444,1445],{"class":1302},"    }\n",[1281,1447,1448],{"class":1283,"line":511},[1281,1449,1450],{"class":1302},"  ],\n",[1281,1452,1453],{"class":1283,"line":516},[1281,1454,1455],{"class":1302},"  \"clientReference\": \"year-10-autumn-2026\"\n",[1281,1457,1458],{"class":1283,"line":521},[1281,1459,1460],{"class":1302},"}\n",[1281,1462,1463],{"class":1283,"line":530},[1281,1464,1465],{"class":1321},"JSON\n",[1271,1467,1471],{"className":1468,"code":1469,"filename":308,"language":1470,"meta":1277,"style":1277},"language-js shiki shiki-themes github-light-high-contrast github-dark-high-contrast","const token = process.env.TOKEN; \u002F\u002F a short-lived token you minted with your API key and secret\n\nconst res = await fetch('https:\u002F\u002Fapi.main-team.org\u002Fv1\u002Fstudent\u002Fimport', {\n  method: 'POST',\n  headers: {\n    Authorization: `Bearer ${token}`,\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    \"students\": [\n      {\n        \"firstName\": \"Jane\",\n        \"lastName\": \"Doe\",\n        \"birth\": \"14\u002F05\u002F2008\",\n        \"sex\": \"f\",\n        \"email\": \"jane.doe@example.com\",\n        \"email2\": \"\u003Cemail2>\",\n        \"phone\": \"+1 555 0100\",\n        \"country\": \"6650a1b2c3d4e5f6a7b8c9d1\",\n        \"grade\": \"10\",\n        \"school\": \"Springfield High School\",\n        \"city\": \"Springfield\",\n        \"activatedPlatformsThisSeason\": [\n          \"common\"\n        ],\n        \"externalRef\": \"roster-2026-114\"\n      }\n    ],\n    \"clientReference\": \"year-10-autumn-2026\"\n  }),\n});\nconst body = await res.json();\nif (!res.ok) throw new Error(`${res.status} ${body.error.code}: ${body.error.message}`);\nconsole.log(body.data);\n","js",[908,1472,1473,1496,1501,1526,1537,1542,1558,1571,1576,1593,1601,1606,1618,1630,1642,1654,1666,1678,1690,1702,1714,1726,1738,1745,1750,1755,1765,1770,1775,1785,1790,1795,1815,1882],{"__ignoreMap":1277},[1281,1474,1475,1478,1481,1484,1487,1490,1493],{"class":1283,"line":367},[1281,1476,1477],{"class":1309},"const",[1281,1479,1480],{"class":1295}," token",[1281,1482,1483],{"class":1309}," =",[1281,1485,1486],{"class":1321}," process.env.",[1281,1488,1489],{"class":1295},"TOKEN",[1281,1491,1492],{"class":1321},"; ",[1281,1494,1495],{"class":1286},"\u002F\u002F a short-lived token you minted with your API key and secret\n",[1281,1497,1498],{"class":1283,"line":377},[1281,1499,1500],{"emptyLinePlaceholder":364},"\n",[1281,1502,1503,1505,1508,1510,1513,1517,1520,1523],{"class":1283,"line":382},[1281,1504,1477],{"class":1309},[1281,1506,1507],{"class":1295}," res",[1281,1509,1483],{"class":1309},[1281,1511,1512],{"class":1309}," await",[1281,1514,1516],{"class":1515},"sKwhi"," fetch",[1281,1518,1519],{"class":1321},"(",[1281,1521,1522],{"class":1302},"'https:\u002F\u002Fapi.main-team.org\u002Fv1\u002Fstudent\u002Fimport'",[1281,1524,1525],{"class":1321},", {\n",[1281,1527,1528,1531,1534],{"class":1283,"line":391},[1281,1529,1530],{"class":1321},"  method: ",[1281,1532,1533],{"class":1302},"'POST'",[1281,1535,1536],{"class":1321},",\n",[1281,1538,1539],{"class":1283,"line":396},[1281,1540,1541],{"class":1321},"  headers: {\n",[1281,1543,1544,1547,1550,1553,1556],{"class":1283,"line":402},[1281,1545,1546],{"class":1321},"    Authorization: ",[1281,1548,1549],{"class":1302},"`Bearer ${",[1281,1551,1552],{"class":1321},"token",[1281,1554,1555],{"class":1302},"}`",[1281,1557,1536],{"class":1321},[1281,1559,1560,1563,1566,1569],{"class":1283,"line":407},[1281,1561,1562],{"class":1302},"    'Content-Type'",[1281,1564,1565],{"class":1321},": ",[1281,1567,1568],{"class":1302},"'application\u002Fjson'",[1281,1570,1536],{"class":1321},[1281,1572,1573],{"class":1283,"line":413},[1281,1574,1575],{"class":1321},"  },\n",[1281,1577,1578,1581,1584,1587,1590],{"class":1283,"line":418},[1281,1579,1580],{"class":1321},"  body: ",[1281,1582,1583],{"class":1295},"JSON",[1281,1585,1586],{"class":1321},".",[1281,1588,1589],{"class":1515},"stringify",[1281,1591,1592],{"class":1321},"({\n",[1281,1594,1595,1598],{"class":1283,"line":427},[1281,1596,1597],{"class":1302},"    \"students\"",[1281,1599,1600],{"class":1321},": [\n",[1281,1602,1603],{"class":1283,"line":432},[1281,1604,1605],{"class":1321},"      {\n",[1281,1607,1608,1611,1613,1616],{"class":1283,"line":437},[1281,1609,1610],{"class":1302},"        \"firstName\"",[1281,1612,1565],{"class":1321},[1281,1614,1615],{"class":1302},"\"Jane\"",[1281,1617,1536],{"class":1321},[1281,1619,1620,1623,1625,1628],{"class":1283,"line":442},[1281,1621,1622],{"class":1302},"        \"lastName\"",[1281,1624,1565],{"class":1321},[1281,1626,1627],{"class":1302},"\"Doe\"",[1281,1629,1536],{"class":1321},[1281,1631,1632,1635,1637,1640],{"class":1283,"line":447},[1281,1633,1634],{"class":1302},"        \"birth\"",[1281,1636,1565],{"class":1321},[1281,1638,1639],{"class":1302},"\"14\u002F05\u002F2008\"",[1281,1641,1536],{"class":1321},[1281,1643,1644,1647,1649,1652],{"class":1283,"line":452},[1281,1645,1646],{"class":1302},"        \"sex\"",[1281,1648,1565],{"class":1321},[1281,1650,1651],{"class":1302},"\"f\"",[1281,1653,1536],{"class":1321},[1281,1655,1656,1659,1661,1664],{"class":1283,"line":457},[1281,1657,1658],{"class":1302},"        \"email\"",[1281,1660,1565],{"class":1321},[1281,1662,1663],{"class":1302},"\"jane.doe@example.com\"",[1281,1665,1536],{"class":1321},[1281,1667,1668,1671,1673,1676],{"class":1283,"line":463},[1281,1669,1670],{"class":1302},"        \"email2\"",[1281,1672,1565],{"class":1321},[1281,1674,1675],{"class":1302},"\"\u003Cemail2>\"",[1281,1677,1536],{"class":1321},[1281,1679,1680,1683,1685,1688],{"class":1283,"line":469},[1281,1681,1682],{"class":1302},"        \"phone\"",[1281,1684,1565],{"class":1321},[1281,1686,1687],{"class":1302},"\"+1 555 0100\"",[1281,1689,1536],{"class":1321},[1281,1691,1692,1695,1697,1700],{"class":1283,"line":474},[1281,1693,1694],{"class":1302},"        \"country\"",[1281,1696,1565],{"class":1321},[1281,1698,1699],{"class":1302},"\"6650a1b2c3d4e5f6a7b8c9d1\"",[1281,1701,1536],{"class":1321},[1281,1703,1704,1707,1709,1712],{"class":1283,"line":478},[1281,1705,1706],{"class":1302},"        \"grade\"",[1281,1708,1565],{"class":1321},[1281,1710,1711],{"class":1302},"\"10\"",[1281,1713,1536],{"class":1321},[1281,1715,1716,1719,1721,1724],{"class":1283,"line":483},[1281,1717,1718],{"class":1302},"        \"school\"",[1281,1720,1565],{"class":1321},[1281,1722,1723],{"class":1302},"\"Springfield High School\"",[1281,1725,1536],{"class":1321},[1281,1727,1728,1731,1733,1736],{"class":1283,"line":491},[1281,1729,1730],{"class":1302},"        \"city\"",[1281,1732,1565],{"class":1321},[1281,1734,1735],{"class":1302},"\"Springfield\"",[1281,1737,1536],{"class":1321},[1281,1739,1740,1743],{"class":1283,"line":500},[1281,1741,1742],{"class":1302},"        \"activatedPlatformsThisSeason\"",[1281,1744,1600],{"class":1321},[1281,1746,1747],{"class":1283,"line":506},[1281,1748,1749],{"class":1302},"          \"common\"\n",[1281,1751,1752],{"class":1283,"line":511},[1281,1753,1754],{"class":1321},"        ],\n",[1281,1756,1757,1760,1762],{"class":1283,"line":516},[1281,1758,1759],{"class":1302},"        \"externalRef\"",[1281,1761,1565],{"class":1321},[1281,1763,1764],{"class":1302},"\"roster-2026-114\"\n",[1281,1766,1767],{"class":1283,"line":521},[1281,1768,1769],{"class":1321},"      }\n",[1281,1771,1772],{"class":1283,"line":530},[1281,1773,1774],{"class":1321},"    ],\n",[1281,1776,1777,1780,1782],{"class":1283,"line":535},[1281,1778,1779],{"class":1302},"    \"clientReference\"",[1281,1781,1565],{"class":1321},[1281,1783,1784],{"class":1302},"\"year-10-autumn-2026\"\n",[1281,1786,1787],{"class":1283,"line":540},[1281,1788,1789],{"class":1321},"  }),\n",[1281,1791,1792],{"class":1283,"line":545},[1281,1793,1794],{"class":1321},"});\n",[1281,1796,1797,1799,1802,1804,1806,1809,1812],{"class":1283,"line":550},[1281,1798,1477],{"class":1309},[1281,1800,1801],{"class":1295}," body",[1281,1803,1483],{"class":1309},[1281,1805,1512],{"class":1309},[1281,1807,1808],{"class":1321}," res.",[1281,1810,1811],{"class":1515},"json",[1281,1813,1814],{"class":1321},"();\n",[1281,1816,1817,1820,1823,1826,1829,1832,1835,1838,1840,1843,1846,1848,1850,1853,1856,1858,1860,1862,1864,1867,1869,1871,1873,1875,1877,1879],{"class":1283,"line":555},[1281,1818,1819],{"class":1309},"if",[1281,1821,1822],{"class":1321}," (",[1281,1824,1825],{"class":1309},"!",[1281,1827,1828],{"class":1321},"res.ok) ",[1281,1830,1831],{"class":1309},"throw",[1281,1833,1834],{"class":1309}," new",[1281,1836,1837],{"class":1515}," Error",[1281,1839,1519],{"class":1321},[1281,1841,1842],{"class":1302},"`${",[1281,1844,1845],{"class":1321},"res",[1281,1847,1586],{"class":1302},[1281,1849,950],{"class":1321},[1281,1851,1852],{"class":1302},"} ${",[1281,1854,1855],{"class":1321},"body",[1281,1857,1586],{"class":1302},[1281,1859,1026],{"class":1321},[1281,1861,1586],{"class":1302},[1281,1863,908],{"class":1321},[1281,1865,1866],{"class":1302},"}: ${",[1281,1868,1855],{"class":1321},[1281,1870,1586],{"class":1302},[1281,1872,1026],{"class":1321},[1281,1874,1586],{"class":1302},[1281,1876,874],{"class":1321},[1281,1878,1555],{"class":1302},[1281,1880,1881],{"class":1321},");\n",[1281,1883,1884,1887,1890],{"class":1283,"line":560},[1281,1885,1886],{"class":1321},"console.",[1281,1888,1889],{"class":1515},"log",[1281,1891,1892],{"class":1321},"(body.data);\n",[1271,1894,1898],{"className":1895,"code":1896,"filename":311,"language":1897,"meta":1277,"style":1277},"language-php shiki shiki-themes github-light-high-contrast github-dark-high-contrast","\u003C?php\n$token = getenv('TOKEN'); \u002F\u002F a short-lived token you minted with your API key and secret\n\n$ch = curl_init('https:\u002F\u002Fapi.main-team.org\u002Fv1\u002Fstudent\u002Fimport');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'POST',\n    CURLOPT_HTTPHEADER => [\n        'Authorization: Bearer ' . $token,\n        'Content-Type: application\u002Fjson',\n    ],\n    CURLOPT_POSTFIELDS => json_encode([\n        'students' => [\n            [\n                'firstName' => 'Jane',\n                'lastName' => 'Doe',\n                'birth' => '14\u002F05\u002F2008',\n                'sex' => 'f',\n                'email' => 'jane.doe@example.com',\n                'email2' => '\u003Cemail2>',\n                'phone' => '+1 555 0100',\n                'country' => '6650a1b2c3d4e5f6a7b8c9d1',\n                'grade' => '10',\n                'school' => 'Springfield High School',\n                'city' => 'Springfield',\n                'activatedPlatformsThisSeason' => [\n                    'common',\n                ],\n                'externalRef' => 'roster-2026-114',\n            ],\n        ],\n        'clientReference' => 'year-10-autumn-2026',\n    ]),\n    CURLOPT_RETURNTRANSFER => true,\n]);\n$response = curl_exec($ch);\nif ($response === false) {\n    throw new RuntimeException(curl_error($ch));\n}\n$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);\n$body = json_decode($response, true);\nif ($status >= 400) {\n    $error = $body['error'];\n    throw new RuntimeException(\"$status {$error['code']}: {$error['message']}\");\n}\nprint_r($body['data']);\n","php",[908,1899,1900,1908,1929,1933,1949,1957,1970,1980,1991,1998,2002,2015,2024,2029,2041,2053,2065,2077,2089,2101,2113,2125,2137,2149,2161,2170,2177,2182,2194,2199,2203,2215,2220,2232,2237,2250,2266,2284,2288,2306,2324,2339,2355,2386,2390],{"__ignoreMap":1277},[1281,1901,1902,1905],{"class":1283,"line":367},[1281,1903,1904],{"class":1309},"\u003C?",[1281,1906,1907],{"class":1295},"php\n",[1281,1909,1910,1913,1916,1919,1921,1924,1927],{"class":1283,"line":377},[1281,1911,1912],{"class":1321},"$token ",[1281,1914,1915],{"class":1309},"=",[1281,1917,1918],{"class":1295}," getenv",[1281,1920,1519],{"class":1321},[1281,1922,1923],{"class":1302},"'TOKEN'",[1281,1925,1926],{"class":1321},"); ",[1281,1928,1495],{"class":1286},[1281,1930,1931],{"class":1283,"line":382},[1281,1932,1500],{"emptyLinePlaceholder":364},[1281,1934,1935,1938,1940,1943,1945,1947],{"class":1283,"line":391},[1281,1936,1937],{"class":1321},"$ch ",[1281,1939,1915],{"class":1309},[1281,1941,1942],{"class":1295}," curl_init",[1281,1944,1519],{"class":1321},[1281,1946,1522],{"class":1302},[1281,1948,1881],{"class":1321},[1281,1950,1951,1954],{"class":1283,"line":396},[1281,1952,1953],{"class":1295},"curl_setopt_array",[1281,1955,1956],{"class":1321},"($ch, [\n",[1281,1958,1959,1962,1965,1968],{"class":1283,"line":402},[1281,1960,1961],{"class":1295},"    CURLOPT_CUSTOMREQUEST",[1281,1963,1964],{"class":1309}," =>",[1281,1966,1967],{"class":1302}," 'POST'",[1281,1969,1536],{"class":1321},[1281,1971,1972,1975,1977],{"class":1283,"line":407},[1281,1973,1974],{"class":1295},"    CURLOPT_HTTPHEADER",[1281,1976,1964],{"class":1309},[1281,1978,1979],{"class":1321}," [\n",[1281,1981,1982,1985,1988],{"class":1283,"line":413},[1281,1983,1984],{"class":1302},"        'Authorization: Bearer '",[1281,1986,1987],{"class":1309}," .",[1281,1989,1990],{"class":1321}," $token,\n",[1281,1992,1993,1996],{"class":1283,"line":418},[1281,1994,1995],{"class":1302},"        'Content-Type: application\u002Fjson'",[1281,1997,1536],{"class":1321},[1281,1999,2000],{"class":1283,"line":427},[1281,2001,1774],{"class":1321},[1281,2003,2004,2007,2009,2012],{"class":1283,"line":432},[1281,2005,2006],{"class":1295},"    CURLOPT_POSTFIELDS",[1281,2008,1964],{"class":1309},[1281,2010,2011],{"class":1295}," json_encode",[1281,2013,2014],{"class":1321},"([\n",[1281,2016,2017,2020,2022],{"class":1283,"line":437},[1281,2018,2019],{"class":1302},"        'students'",[1281,2021,1964],{"class":1309},[1281,2023,1979],{"class":1321},[1281,2025,2026],{"class":1283,"line":442},[1281,2027,2028],{"class":1321},"            [\n",[1281,2030,2031,2034,2036,2039],{"class":1283,"line":447},[1281,2032,2033],{"class":1302},"                'firstName'",[1281,2035,1964],{"class":1309},[1281,2037,2038],{"class":1302}," 'Jane'",[1281,2040,1536],{"class":1321},[1281,2042,2043,2046,2048,2051],{"class":1283,"line":452},[1281,2044,2045],{"class":1302},"                'lastName'",[1281,2047,1964],{"class":1309},[1281,2049,2050],{"class":1302}," 'Doe'",[1281,2052,1536],{"class":1321},[1281,2054,2055,2058,2060,2063],{"class":1283,"line":457},[1281,2056,2057],{"class":1302},"                'birth'",[1281,2059,1964],{"class":1309},[1281,2061,2062],{"class":1302}," '14\u002F05\u002F2008'",[1281,2064,1536],{"class":1321},[1281,2066,2067,2070,2072,2075],{"class":1283,"line":463},[1281,2068,2069],{"class":1302},"                'sex'",[1281,2071,1964],{"class":1309},[1281,2073,2074],{"class":1302}," 'f'",[1281,2076,1536],{"class":1321},[1281,2078,2079,2082,2084,2087],{"class":1283,"line":469},[1281,2080,2081],{"class":1302},"                'email'",[1281,2083,1964],{"class":1309},[1281,2085,2086],{"class":1302}," 'jane.doe@example.com'",[1281,2088,1536],{"class":1321},[1281,2090,2091,2094,2096,2099],{"class":1283,"line":474},[1281,2092,2093],{"class":1302},"                'email2'",[1281,2095,1964],{"class":1309},[1281,2097,2098],{"class":1302}," '\u003Cemail2>'",[1281,2100,1536],{"class":1321},[1281,2102,2103,2106,2108,2111],{"class":1283,"line":478},[1281,2104,2105],{"class":1302},"                'phone'",[1281,2107,1964],{"class":1309},[1281,2109,2110],{"class":1302}," '+1 555 0100'",[1281,2112,1536],{"class":1321},[1281,2114,2115,2118,2120,2123],{"class":1283,"line":483},[1281,2116,2117],{"class":1302},"                'country'",[1281,2119,1964],{"class":1309},[1281,2121,2122],{"class":1302}," '6650a1b2c3d4e5f6a7b8c9d1'",[1281,2124,1536],{"class":1321},[1281,2126,2127,2130,2132,2135],{"class":1283,"line":491},[1281,2128,2129],{"class":1302},"                'grade'",[1281,2131,1964],{"class":1309},[1281,2133,2134],{"class":1302}," '10'",[1281,2136,1536],{"class":1321},[1281,2138,2139,2142,2144,2147],{"class":1283,"line":500},[1281,2140,2141],{"class":1302},"                'school'",[1281,2143,1964],{"class":1309},[1281,2145,2146],{"class":1302}," 'Springfield High School'",[1281,2148,1536],{"class":1321},[1281,2150,2151,2154,2156,2159],{"class":1283,"line":506},[1281,2152,2153],{"class":1302},"                'city'",[1281,2155,1964],{"class":1309},[1281,2157,2158],{"class":1302}," 'Springfield'",[1281,2160,1536],{"class":1321},[1281,2162,2163,2166,2168],{"class":1283,"line":511},[1281,2164,2165],{"class":1302},"                'activatedPlatformsThisSeason'",[1281,2167,1964],{"class":1309},[1281,2169,1979],{"class":1321},[1281,2171,2172,2175],{"class":1283,"line":516},[1281,2173,2174],{"class":1302},"                    'common'",[1281,2176,1536],{"class":1321},[1281,2178,2179],{"class":1283,"line":521},[1281,2180,2181],{"class":1321},"                ],\n",[1281,2183,2184,2187,2189,2192],{"class":1283,"line":530},[1281,2185,2186],{"class":1302},"                'externalRef'",[1281,2188,1964],{"class":1309},[1281,2190,2191],{"class":1302}," 'roster-2026-114'",[1281,2193,1536],{"class":1321},[1281,2195,2196],{"class":1283,"line":535},[1281,2197,2198],{"class":1321},"            ],\n",[1281,2200,2201],{"class":1283,"line":540},[1281,2202,1754],{"class":1321},[1281,2204,2205,2208,2210,2213],{"class":1283,"line":545},[1281,2206,2207],{"class":1302},"        'clientReference'",[1281,2209,1964],{"class":1309},[1281,2211,2212],{"class":1302}," 'year-10-autumn-2026'",[1281,2214,1536],{"class":1321},[1281,2216,2217],{"class":1283,"line":550},[1281,2218,2219],{"class":1321},"    ]),\n",[1281,2221,2222,2225,2227,2230],{"class":1283,"line":555},[1281,2223,2224],{"class":1295},"    CURLOPT_RETURNTRANSFER",[1281,2226,1964],{"class":1309},[1281,2228,2229],{"class":1295}," true",[1281,2231,1536],{"class":1321},[1281,2233,2234],{"class":1283,"line":560},[1281,2235,2236],{"class":1321},"]);\n",[1281,2238,2239,2242,2244,2247],{"class":1283,"line":569},[1281,2240,2241],{"class":1321},"$response ",[1281,2243,1915],{"class":1309},[1281,2245,2246],{"class":1295}," curl_exec",[1281,2248,2249],{"class":1321},"($ch);\n",[1281,2251,2252,2254,2257,2260,2263],{"class":1283,"line":574},[1281,2253,1819],{"class":1309},[1281,2255,2256],{"class":1321}," ($response ",[1281,2258,2259],{"class":1309},"===",[1281,2261,2262],{"class":1295}," false",[1281,2264,2265],{"class":1321},") {\n",[1281,2267,2268,2271,2273,2276,2278,2281],{"class":1283,"line":580},[1281,2269,2270],{"class":1309},"    throw",[1281,2272,1834],{"class":1309},[1281,2274,2275],{"class":1295}," RuntimeException",[1281,2277,1519],{"class":1321},[1281,2279,2280],{"class":1295},"curl_error",[1281,2282,2283],{"class":1321},"($ch));\n",[1281,2285,2286],{"class":1283,"line":585},[1281,2287,1460],{"class":1321},[1281,2289,2290,2293,2295,2298,2301,2304],{"class":1283,"line":594},[1281,2291,2292],{"class":1321},"$status ",[1281,2294,1915],{"class":1309},[1281,2296,2297],{"class":1295}," curl_getinfo",[1281,2299,2300],{"class":1321},"($ch, ",[1281,2302,2303],{"class":1295},"CURLINFO_RESPONSE_CODE",[1281,2305,1881],{"class":1321},[1281,2307,2308,2311,2313,2316,2319,2322],{"class":1283,"line":599},[1281,2309,2310],{"class":1321},"$body ",[1281,2312,1915],{"class":1309},[1281,2314,2315],{"class":1295}," json_decode",[1281,2317,2318],{"class":1321},"($response, ",[1281,2320,2321],{"class":1295},"true",[1281,2323,1881],{"class":1321},[1281,2325,2326,2328,2331,2334,2337],{"class":1283,"line":604},[1281,2327,1819],{"class":1309},[1281,2329,2330],{"class":1321}," ($status ",[1281,2332,2333],{"class":1309},">=",[1281,2335,2336],{"class":1295}," 400",[1281,2338,2265],{"class":1321},[1281,2340,2341,2344,2346,2349,2352],{"class":1283,"line":609},[1281,2342,2343],{"class":1321},"    $error ",[1281,2345,1915],{"class":1309},[1281,2347,2348],{"class":1321}," $body[",[1281,2350,2351],{"class":1302},"'error'",[1281,2353,2354],{"class":1321},"];\n",[1281,2356,2357,2359,2361,2363,2365,2367,2370,2373,2376,2379,2381,2384],{"class":1283,"line":614},[1281,2358,2270],{"class":1309},[1281,2360,1834],{"class":1309},[1281,2362,2275],{"class":1295},[1281,2364,1519],{"class":1321},[1281,2366,1325],{"class":1302},[1281,2368,2369],{"class":1321},"$status",[1281,2371,2372],{"class":1302}," {",[1281,2374,2375],{"class":1321},"$error",[1281,2377,2378],{"class":1302},"['code']}: {",[1281,2380,2375],{"class":1321},[1281,2382,2383],{"class":1302},"['message']}\"",[1281,2385,1881],{"class":1321},[1281,2387,2388],{"class":1283,"line":620},[1281,2389,1460],{"class":1321},[1281,2391,2392,2395,2398,2401],{"class":1283,"line":625},[1281,2393,2394],{"class":1295},"print_r",[1281,2396,2397],{"class":1321},"($body[",[1281,2399,2400],{"class":1302},"'data'",[1281,2402,2236],{"class":1321},[2404,2405,2406],"style",{},"html pre.shiki code .sLBg1, html code.shiki .sLBg1{--shiki-default:#66707B;--shiki-dark:#BDC4CC}html pre.shiki code .soyes, html code.shiki .soyes{--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .sT6z2, html code.shiki .sT6z2{--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sKwhi, html code.shiki .sKwhi{--shiki-default:#622CBC;--shiki-dark:#DBB7FF}",{"title":1277,"searchDepth":377,"depth":382,"links":2408},[],"Registers 30 to 1000 students in one request.","md",{},"13",{"title":179,"description":2409},"api\u002Freference\u002Fcreate-student-import","AonAJ_PnauSU-lOv8l84P42HqEieIbSnenhOH8j_ovY",1791554613401]