@examplary/sdk 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -381,7 +381,7 @@ interface paths {
381
381
  patch?: never;
382
382
  trace?: never;
383
383
  };
384
- "/me": {
384
+ "/exams/{id}/sessions": {
385
385
  parameters: {
386
386
  query?: never;
387
387
  header?: never;
@@ -389,121 +389,127 @@ interface paths {
389
389
  cookie?: never;
390
390
  };
391
391
  /**
392
- * Get me
393
- * @description Get the current user's account details.
392
+ * List exam sessions
393
+ * @description Get a list of all student sessions for an exam, representing a set of answers from a student.
394
394
  */
395
- get: operations["me.get"];
395
+ get: operations["exams.sessions.list"];
396
396
  put?: never;
397
- post?: never;
397
+ /**
398
+ * Create session
399
+ * @description Manually create a session, possibly from uploaded data.
400
+ */
401
+ post: operations["exams.sessions.import"];
398
402
  delete?: never;
399
403
  options?: never;
400
404
  head?: never;
401
- /**
402
- * Update me
403
- * @description Update the current user's account details.
404
- */
405
- patch: operations["me.update"];
405
+ patch?: never;
406
406
  trace?: never;
407
407
  };
408
- "/media/upload": {
408
+ "/exams/{id}/sessions/scan": {
409
409
  parameters: {
410
410
  query?: never;
411
411
  header?: never;
412
412
  path?: never;
413
413
  cookie?: never;
414
414
  };
415
+ get?: never;
416
+ put?: never;
415
417
  /**
416
- * Get file upload URL
417
- * @description Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
418
+ * Get answers from scan
419
+ * @description Scan student answers from a document.
418
420
  */
419
- get: operations["media.upload"];
420
- put?: never;
421
- post?: never;
421
+ post: operations["exams.sessions.scan"];
422
422
  delete?: never;
423
423
  options?: never;
424
424
  head?: never;
425
425
  patch?: never;
426
426
  trace?: never;
427
427
  };
428
- "/org": {
428
+ "/exams/{id}/sessions/scan-document": {
429
429
  parameters: {
430
430
  query?: never;
431
431
  header?: never;
432
432
  path?: never;
433
433
  cookie?: never;
434
434
  };
435
- /** Get organization */
436
- get: operations["org.get"];
435
+ get?: never;
437
436
  put?: never;
438
- post?: never;
439
- /** Delete organization */
440
- delete: operations["org.delete"];
437
+ /**
438
+ * Scan document for student answers
439
+ * @description Start a background task to extract student answers from an uploaded PDF document.
440
+ */
441
+ post: operations["exams.sessions.scanDocument"];
442
+ delete?: never;
441
443
  options?: never;
442
444
  head?: never;
443
- /** Update organization */
444
- patch: operations["org.update"];
445
+ patch?: never;
445
446
  trace?: never;
446
447
  };
447
- "/org/custom-domain": {
448
+ "/exams/{id}/sessions/{sessionId}": {
448
449
  parameters: {
449
450
  query?: never;
450
451
  header?: never;
451
452
  path?: never;
452
453
  cookie?: never;
453
454
  };
454
- /** Get custom domain configuration */
455
- get: operations["org.customDomain.get"];
455
+ /**
456
+ * Get exam session
457
+ * @description Get a single exam session by its ID, representing a set of answers from a student.
458
+ */
459
+ get: operations["exams.sessions.get"];
456
460
  put?: never;
457
- /** Update custom domain configuration */
458
- post: operations["org.customDomain.update"];
459
- delete?: never;
461
+ post?: never;
462
+ /**
463
+ * Delete exam session
464
+ * @description Remove an exam session.
465
+ */
466
+ delete: operations["exams.sessions.delete"];
460
467
  options?: never;
461
468
  head?: never;
462
469
  patch?: never;
463
470
  trace?: never;
464
471
  };
465
- "/orgs": {
472
+ "/exams/{id}/sessions/{sessionId}/feedback": {
466
473
  parameters: {
467
474
  query?: never;
468
475
  header?: never;
469
476
  path?: never;
470
477
  cookie?: never;
471
478
  };
472
- /** List all organizations */
473
- get: operations["orgs.list"];
479
+ get?: never;
474
480
  put?: never;
475
481
  /**
476
- * Create a new organization
477
- * @description Create a new workspace to collaborate with others on exams.
482
+ * Provide feedback
483
+ * @description Set teacher feedback and/or a grade for a specific question in an exam session.
478
484
  */
479
- post: operations["orgs.create"];
485
+ post: operations["exams.sessions.saveFeedback"];
480
486
  delete?: never;
481
487
  options?: never;
482
488
  head?: never;
483
489
  patch?: never;
484
490
  trace?: never;
485
491
  };
486
- "/api-keys": {
492
+ "/exams/{id}/sessions/{sessionId}/overall-feedback": {
487
493
  parameters: {
488
494
  query?: never;
489
495
  header?: never;
490
496
  path?: never;
491
497
  cookie?: never;
492
498
  };
499
+ get?: never;
500
+ put?: never;
493
501
  /**
494
- * Get API key
495
- * @description Get the API key for the current org/user combination. Creates one if none exists.
502
+ * Provide overall feedback
503
+ * @description Set teacher feedback for the test as a whole in an exam session.
496
504
  */
497
- get: operations["apiKeys.get"];
498
- put?: never;
499
- post?: never;
505
+ post: operations["exams.sessions.saveOverallFeedback"];
500
506
  delete?: never;
501
507
  options?: never;
502
508
  head?: never;
503
509
  patch?: never;
504
510
  trace?: never;
505
511
  };
506
- "/api-keys/reset": {
512
+ "/exams/{id}/sessions/{sessionId}/generate-overall-feedback": {
507
513
  parameters: {
508
514
  query?: never;
509
515
  header?: never;
@@ -513,41 +519,37 @@ interface paths {
513
519
  get?: never;
514
520
  put?: never;
515
521
  /**
516
- * Reset API key
517
- * @description Invalidate old API keys for this org/user and create a new one.
522
+ * Generate overall feedback
523
+ * @description Generate feedback for the test as a whole in an exam session.
518
524
  */
519
- post: operations["apiKeys.reset"];
525
+ post: operations["exams.sessions.generateOverallFeedback"];
520
526
  delete?: never;
521
527
  options?: never;
522
528
  head?: never;
523
529
  patch?: never;
524
530
  trace?: never;
525
531
  };
526
- "/attributes": {
532
+ "/exams/{id}/sessions/{sessionId}/suggestions/accept-all": {
527
533
  parameters: {
528
534
  query?: never;
529
535
  header?: never;
530
536
  path?: never;
531
537
  cookie?: never;
532
538
  };
533
- /**
534
- * List attributes
535
- * @description Get all custom attributes configured for the current workspace.
536
- */
537
- get: operations["attributes.list"];
539
+ get?: never;
538
540
  put?: never;
539
541
  /**
540
- * Create attribute
541
- * @description Create a new custom attribute in the current workspace.
542
+ * Accept AI grading suggestions
543
+ * @description Accept all AI-generated grading suggestions for the exam session.
542
544
  */
543
- post: operations["attributes.create"];
545
+ post: operations["exams.sessions.acceptAllSuggestions"];
544
546
  delete?: never;
545
547
  options?: never;
546
548
  head?: never;
547
549
  patch?: never;
548
550
  trace?: never;
549
551
  };
550
- "/attributes/reorder": {
552
+ "/exams/{id}/sessions/{sessionId}/suggestions/{questionId}/accept": {
551
553
  parameters: {
552
554
  query?: never;
553
555
  header?: never;
@@ -557,17 +559,17 @@ interface paths {
557
559
  get?: never;
558
560
  put?: never;
559
561
  /**
560
- * Reorder attributes
561
- * @description Update the position of multiple attributes at once.
562
+ * Accept single AI grading suggestion
563
+ * @description Accept a single AI-generated grading suggestion for the exam session.
562
564
  */
563
- post: operations["attributes.reorder"];
565
+ post: operations["exams.sessions.acceptSuggestion"];
564
566
  delete?: never;
565
567
  options?: never;
566
568
  head?: never;
567
569
  patch?: never;
568
570
  trace?: never;
569
571
  };
570
- "/attributes/{id}": {
572
+ "/exams/{id}/sessions/{sessionId}/answers/{questionId}": {
571
573
  parameters: {
572
574
  query?: never;
573
575
  header?: never;
@@ -576,22 +578,18 @@ interface paths {
576
578
  };
577
579
  get?: never;
578
580
  put?: never;
579
- /**
580
- * Update attribute
581
- * @description Update an existing attribute in the current workspace.
582
- */
583
- post: operations["attributes.update"];
584
- /**
585
- * Delete attribute
586
- * @description Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
587
- */
588
- delete: operations["attributes.delete"];
581
+ post?: never;
582
+ delete?: never;
589
583
  options?: never;
590
584
  head?: never;
591
- patch?: never;
585
+ /**
586
+ * Edit answer
587
+ * @description Edit a single answer in an exam session.
588
+ */
589
+ patch: operations["exams.sessions.editAnswer"];
592
590
  trace?: never;
593
591
  };
594
- "/taxonomies": {
592
+ "/exams/{id}/sessions/{sessionId}/comments": {
595
593
  parameters: {
596
594
  query?: never;
597
595
  header?: never;
@@ -599,23 +597,23 @@ interface paths {
599
597
  cookie?: never;
600
598
  };
601
599
  /**
602
- * Get taxonomies
603
- * @description Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
600
+ * List session comments
601
+ * @description Get a list of all comments left on a student's assessment session.
604
602
  */
605
- get: operations["taxonomies.list"];
603
+ get: operations["exams.sessions.comments.list"];
606
604
  put?: never;
607
605
  /**
608
- * Create taxonomy
609
- * @description Save a new taxonomy in the current workspace.
606
+ * Create session comment
607
+ * @description Add a new comment to a question in a student's assessment session.
610
608
  */
611
- post: operations["taxonomies.create"];
609
+ post: operations["exams.sessions.comments.create"];
612
610
  delete?: never;
613
611
  options?: never;
614
612
  head?: never;
615
613
  patch?: never;
616
614
  trace?: never;
617
615
  };
618
- "/taxonomies/{id}": {
616
+ "/exams/{id}/sessions/{sessionId}/comments/{commentId}": {
619
617
  parameters: {
620
618
  query?: never;
621
619
  header?: never;
@@ -624,66 +622,62 @@ interface paths {
624
622
  };
625
623
  get?: never;
626
624
  put?: never;
625
+ post?: never;
627
626
  /**
628
- * Update taxonomy
629
- * @description Update an existing taxonomy in the current workspace.
630
- */
631
- post: operations["taxonomies.update"];
632
- /**
633
- * Delete taxonomy
634
- * @description Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
627
+ * Delete session comment
628
+ * @description Remove a comment from a session.
635
629
  */
636
- delete: operations["taxonomies.delete"];
630
+ delete: operations["exams.sessions.comments.delete"];
637
631
  options?: never;
638
632
  head?: never;
639
- patch?: never;
633
+ /**
634
+ * Update session comment
635
+ * @description Edit the body of an existing session comment.
636
+ */
637
+ patch: operations["exams.sessions.comments.update"];
640
638
  trace?: never;
641
639
  };
642
- "/permissions/autocomplete": {
640
+ "/exams/{id}/questions/import": {
643
641
  parameters: {
644
642
  query?: never;
645
643
  header?: never;
646
644
  path?: never;
647
645
  cookie?: never;
648
646
  };
647
+ get?: never;
648
+ put?: never;
649
649
  /**
650
- * Autocomplete users and groups
651
- * @description Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
650
+ * Import questions
651
+ * @description Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
652
652
  */
653
- get: operations["permissions.autocomplete"];
654
- put?: never;
655
- post?: never;
653
+ post: operations["exams.questions.import"];
656
654
  delete?: never;
657
655
  options?: never;
658
656
  head?: never;
659
657
  patch?: never;
660
658
  trace?: never;
661
659
  };
662
- "/permissions/{resource}": {
660
+ "/exams/{id}/questions/generate": {
663
661
  parameters: {
664
662
  query?: never;
665
663
  header?: never;
666
664
  path?: never;
667
665
  cookie?: never;
668
666
  };
669
- /**
670
- * Get sharing permissions
671
- * @description Get a list of users, groups and orgs that have access to a specific resource.
672
- */
673
- get: operations["permissions.list"];
667
+ get?: never;
674
668
  put?: never;
675
669
  /**
676
- * Create permission
677
- * @description Create a new permission for a specific resource, or update the role of an existing actor.
670
+ * Generate question
671
+ * @description Generate a new question for the exam using an AI prompt.
678
672
  */
679
- post: operations["permissions.assign"];
673
+ post: operations["exams.questions.generate"];
680
674
  delete?: never;
681
675
  options?: never;
682
676
  head?: never;
683
677
  patch?: never;
684
678
  trace?: never;
685
679
  };
686
- "/permissions/{resource}/{actor}": {
680
+ "/exams/{id}/questions/{questionId}": {
687
681
  parameters: {
688
682
  query?: never;
689
683
  header?: never;
@@ -691,67 +685,59 @@ interface paths {
691
685
  cookie?: never;
692
686
  };
693
687
  /**
694
- * Get actor role
695
- * @description Get the role of a specific actor for a specific resource.
688
+ * Get question
689
+ * @description Retrieve a question by its ID.
696
690
  */
697
- get: operations["permissions.getActorRole"];
691
+ get: operations["exams.questions.get"];
698
692
  put?: never;
699
693
  post?: never;
700
- /**
701
- * Remove permission
702
- * @description Remove a permission for a specific actor on a specific resource.
703
- */
704
- delete: operations["permissions.delete"];
694
+ delete?: never;
705
695
  options?: never;
706
696
  head?: never;
707
697
  patch?: never;
708
698
  trace?: never;
709
699
  };
710
- "/student-levels": {
700
+ "/exams/{id}/questions/{questionId}/generate": {
711
701
  parameters: {
712
702
  query?: never;
713
703
  header?: never;
714
704
  path?: never;
715
705
  cookie?: never;
716
706
  };
707
+ get?: never;
708
+ put?: never;
717
709
  /**
718
- * List available student levels
719
- * @description Get a list of available default student levels.
710
+ * Regenerate question
711
+ * @description Update a question using an AI prompt.
720
712
  */
721
- get: operations["studentLevels.list"];
722
- put?: never;
723
- post?: never;
713
+ post: operations["exams.questions.regenerate"];
724
714
  delete?: never;
725
715
  options?: never;
726
716
  head?: never;
727
717
  patch?: never;
728
718
  trace?: never;
729
719
  };
730
- "/users": {
720
+ "/exams/{id}/export/qti3-zip": {
731
721
  parameters: {
732
722
  query?: never;
733
723
  header?: never;
734
724
  path?: never;
735
725
  cookie?: never;
736
726
  };
737
- /**
738
- * List users
739
- * @description Get a list of all users in the workspace.
740
- */
741
- get: operations["users.list"];
727
+ get?: never;
742
728
  put?: never;
743
729
  /**
744
- * Create user
745
- * @description Create a new user in the workspace.
730
+ * Export QTI 3 package
731
+ * @description Export an exam as a QTI 3 ZIP package.
746
732
  */
747
- post: operations["users.create"];
733
+ post: operations["exams.export.qti3Zip"];
748
734
  delete?: never;
749
735
  options?: never;
750
736
  head?: never;
751
737
  patch?: never;
752
738
  trace?: never;
753
739
  };
754
- "/users/{id}": {
740
+ "/exams/{id}/export/qti21-zip": {
755
741
  parameters: {
756
742
  query?: never;
757
743
  header?: never;
@@ -760,22 +746,18 @@ interface paths {
760
746
  };
761
747
  get?: never;
762
748
  put?: never;
763
- post?: never;
764
749
  /**
765
- * Delete user
766
- * @description Delete a user from the workspace.
750
+ * Export QTI 2.1 package
751
+ * @description Export an exam as a QTI 2.1 ZIP package.
767
752
  */
768
- delete: operations["users.delete"];
753
+ post: operations["exams.export.qti21Zip"];
754
+ delete?: never;
769
755
  options?: never;
770
756
  head?: never;
771
- /**
772
- * Update user role
773
- * @description Update a user's role within the workspace.
774
- */
775
- patch: operations["users.update"];
757
+ patch?: never;
776
758
  trace?: never;
777
759
  };
778
- "/exams/{id}/sessions": {
760
+ "/exams": {
779
761
  parameters: {
780
762
  query?: never;
781
763
  header?: never;
@@ -783,23 +765,23 @@ interface paths {
783
765
  cookie?: never;
784
766
  };
785
767
  /**
786
- * List exam sessions
787
- * @description Get a list of all student sessions for an exam, representing a set of answers from a student.
768
+ * List exams
769
+ * @description Get a list of all exams within your workspace.
788
770
  */
789
- get: operations["exams.sessions.list"];
771
+ get: operations["exams.list"];
790
772
  put?: never;
791
773
  /**
792
- * Create session
793
- * @description Manually create a session, possibly from uploaded data.
774
+ * Create exam
775
+ * @description Create a new exam within your workspace.
794
776
  */
795
- post: operations["exams.sessions.import"];
777
+ post: operations["exams.create"];
796
778
  delete?: never;
797
779
  options?: never;
798
780
  head?: never;
799
781
  patch?: never;
800
782
  trace?: never;
801
783
  };
802
- "/exams/{id}/sessions/scan": {
784
+ "/exams/import": {
803
785
  parameters: {
804
786
  query?: never;
805
787
  header?: never;
@@ -809,61 +791,45 @@ interface paths {
809
791
  get?: never;
810
792
  put?: never;
811
793
  /**
812
- * Get answers from scan
813
- * @description Scan student answers from a document.
794
+ * Import exam
795
+ * @description Create an exam by importing one or more source materials (e.g. an existing exam).
814
796
  */
815
- post: operations["exams.sessions.scan"];
797
+ post: operations["exams.import"];
816
798
  delete?: never;
817
799
  options?: never;
818
800
  head?: never;
819
801
  patch?: never;
820
802
  trace?: never;
821
803
  };
822
- "/exams/{id}/sessions/scan-document": {
804
+ "/exams/{id}": {
823
805
  parameters: {
824
806
  query?: never;
825
807
  header?: never;
826
808
  path?: never;
827
809
  cookie?: never;
828
810
  };
829
- get?: never;
830
- put?: never;
831
811
  /**
832
- * Scan document for student answers
833
- * @description Start a background task to extract student answers from an uploaded PDF document.
812
+ * Get exam
813
+ * @description Get a single exam by its ID.
834
814
  */
835
- post: operations["exams.sessions.scanDocument"];
836
- delete?: never;
837
- options?: never;
838
- head?: never;
839
- patch?: never;
840
- trace?: never;
841
- };
842
- "/exams/{id}/sessions/{sessionId}": {
843
- parameters: {
844
- query?: never;
845
- header?: never;
846
- path?: never;
847
- cookie?: never;
848
- };
815
+ get: operations["exams.get"];
816
+ put?: never;
849
817
  /**
850
- * Get exam session
851
- * @description Get a single exam session by its ID, representing a set of answers from a student.
818
+ * Update exam
819
+ * @description Update an existing exam.
852
820
  */
853
- get: operations["exams.sessions.get"];
854
- put?: never;
855
- post?: never;
821
+ post: operations["exams.update"];
856
822
  /**
857
- * Delete exam session
858
- * @description Remove an exam session.
823
+ * Delete exam
824
+ * @description Delete the exam.
859
825
  */
860
- delete: operations["exams.sessions.delete"];
826
+ delete: operations["exams.delete"];
861
827
  options?: never;
862
828
  head?: never;
863
829
  patch?: never;
864
830
  trace?: never;
865
831
  };
866
- "/exams/{id}/sessions/{sessionId}/feedback": {
832
+ "/exams/{id}/duplicate": {
867
833
  parameters: {
868
834
  query?: never;
869
835
  header?: never;
@@ -873,17 +839,17 @@ interface paths {
873
839
  get?: never;
874
840
  put?: never;
875
841
  /**
876
- * Provide feedback
877
- * @description Set teacher feedback and/or a grade for a specific question in an exam session.
842
+ * Duplicate exam
843
+ * @description Duplicate the exam's questions and settings to a new exam.
878
844
  */
879
- post: operations["exams.sessions.saveFeedback"];
845
+ post: operations["exams.duplicate"];
880
846
  delete?: never;
881
847
  options?: never;
882
848
  head?: never;
883
849
  patch?: never;
884
850
  trace?: never;
885
851
  };
886
- "/exams/{id}/sessions/{sessionId}/overall-feedback": {
852
+ "/exams/{id}/print": {
887
853
  parameters: {
888
854
  query?: never;
889
855
  header?: never;
@@ -893,17 +859,17 @@ interface paths {
893
859
  get?: never;
894
860
  put?: never;
895
861
  /**
896
- * Provide overall feedback
897
- * @description Set teacher feedback for the test as a whole in an exam session.
862
+ * Print exam
863
+ * @description Export an exam to a PDF file or Word document.
898
864
  */
899
- post: operations["exams.sessions.saveOverallFeedback"];
865
+ post: operations["exams.print"];
900
866
  delete?: never;
901
867
  options?: never;
902
868
  head?: never;
903
869
  patch?: never;
904
870
  trace?: never;
905
871
  };
906
- "/exams/{id}/sessions/{sessionId}/generate-overall-feedback": {
872
+ "/exams/{id}/generate": {
907
873
  parameters: {
908
874
  query?: never;
909
875
  header?: never;
@@ -913,17 +879,17 @@ interface paths {
913
879
  get?: never;
914
880
  put?: never;
915
881
  /**
916
- * Generate overall feedback
917
- * @description Generate feedback for the test as a whole in an exam session.
882
+ * Generate exam
883
+ * @description Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
918
884
  */
919
- post: operations["exams.sessions.generateOverallFeedback"];
885
+ post: operations["exams.startGeneration"];
920
886
  delete?: never;
921
887
  options?: never;
922
888
  head?: never;
923
889
  patch?: never;
924
890
  trace?: never;
925
891
  };
926
- "/exams/{id}/sessions/{sessionId}/suggestions/accept-all": {
892
+ "/exams/{id}/generate/cancel": {
927
893
  parameters: {
928
894
  query?: never;
929
895
  header?: never;
@@ -933,157 +899,159 @@ interface paths {
933
899
  get?: never;
934
900
  put?: never;
935
901
  /**
936
- * Accept AI grading suggestions
937
- * @description Accept all AI-generated grading suggestions for the exam session.
902
+ * Cancel exam generation
903
+ * @description Cancel an ongoing job to generate new questions for the exam using AI.
938
904
  */
939
- post: operations["exams.sessions.acceptAllSuggestions"];
905
+ post: operations["exams.cancelGeneration"];
940
906
  delete?: never;
941
907
  options?: never;
942
908
  head?: never;
943
909
  patch?: never;
944
910
  trace?: never;
945
911
  };
946
- "/exams/{id}/sessions/{sessionId}/suggestions/{questionId}/accept": {
912
+ "/exams/{id}/context-suggestions": {
947
913
  parameters: {
948
914
  query?: never;
949
915
  header?: never;
950
916
  path?: never;
951
917
  cookie?: never;
952
918
  };
953
- get?: never;
954
- put?: never;
955
919
  /**
956
- * Accept single AI grading suggestion
957
- * @description Accept a single AI-generated grading suggestion for the exam session.
920
+ * Get exam context suggestions
921
+ * @description Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
958
922
  */
959
- post: operations["exams.sessions.acceptSuggestion"];
923
+ get: operations["exams.getContextSuggestions"];
924
+ put?: never;
925
+ post?: never;
960
926
  delete?: never;
961
927
  options?: never;
962
928
  head?: never;
963
929
  patch?: never;
964
930
  trace?: never;
965
931
  };
966
- "/exams/{id}/sessions/{sessionId}/answers/{questionId}": {
932
+ "/me": {
967
933
  parameters: {
968
934
  query?: never;
969
935
  header?: never;
970
936
  path?: never;
971
937
  cookie?: never;
972
938
  };
973
- get?: never;
939
+ /**
940
+ * Get me
941
+ * @description Get the current user's account details.
942
+ */
943
+ get: operations["me.get"];
974
944
  put?: never;
975
945
  post?: never;
976
946
  delete?: never;
977
947
  options?: never;
978
948
  head?: never;
979
949
  /**
980
- * Edit answer
981
- * @description Edit a single answer in an exam session.
950
+ * Update me
951
+ * @description Update the current user's account details.
982
952
  */
983
- patch: operations["exams.sessions.editAnswer"];
953
+ patch: operations["me.update"];
984
954
  trace?: never;
985
955
  };
986
- "/exams/{id}/questions/import": {
956
+ "/media/upload": {
987
957
  parameters: {
988
958
  query?: never;
989
959
  header?: never;
990
960
  path?: never;
991
961
  cookie?: never;
992
962
  };
993
- get?: never;
994
- put?: never;
995
963
  /**
996
- * Import questions
997
- * @description Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
964
+ * Get file upload URL
965
+ * @description Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
998
966
  */
999
- post: operations["exams.questions.import"];
967
+ get: operations["media.upload"];
968
+ put?: never;
969
+ post?: never;
1000
970
  delete?: never;
1001
971
  options?: never;
1002
972
  head?: never;
1003
973
  patch?: never;
1004
974
  trace?: never;
1005
975
  };
1006
- "/exams/{id}/questions/generate": {
976
+ "/org": {
1007
977
  parameters: {
1008
978
  query?: never;
1009
979
  header?: never;
1010
980
  path?: never;
1011
981
  cookie?: never;
1012
982
  };
1013
- get?: never;
983
+ /** Get organization */
984
+ get: operations["org.get"];
1014
985
  put?: never;
1015
- /**
1016
- * Generate question
1017
- * @description Generate a new question for the exam using an AI prompt.
1018
- */
1019
- post: operations["exams.questions.generate"];
1020
- delete?: never;
986
+ post?: never;
987
+ /** Delete organization */
988
+ delete: operations["org.delete"];
1021
989
  options?: never;
1022
990
  head?: never;
1023
- patch?: never;
991
+ /** Update organization */
992
+ patch: operations["org.update"];
1024
993
  trace?: never;
1025
994
  };
1026
- "/exams/{id}/questions/{questionId}": {
995
+ "/org/custom-domain": {
1027
996
  parameters: {
1028
997
  query?: never;
1029
998
  header?: never;
1030
999
  path?: never;
1031
1000
  cookie?: never;
1032
1001
  };
1033
- /**
1034
- * Get question
1035
- * @description Retrieve a question by its ID.
1036
- */
1037
- get: operations["exams.questions.get"];
1002
+ /** Get custom domain configuration */
1003
+ get: operations["org.customDomain.get"];
1038
1004
  put?: never;
1039
- post?: never;
1005
+ /** Update custom domain configuration */
1006
+ post: operations["org.customDomain.update"];
1040
1007
  delete?: never;
1041
1008
  options?: never;
1042
1009
  head?: never;
1043
1010
  patch?: never;
1044
1011
  trace?: never;
1045
1012
  };
1046
- "/exams/{id}/questions/{questionId}/generate": {
1013
+ "/orgs": {
1047
1014
  parameters: {
1048
1015
  query?: never;
1049
1016
  header?: never;
1050
1017
  path?: never;
1051
1018
  cookie?: never;
1052
1019
  };
1053
- get?: never;
1020
+ /** List all organizations */
1021
+ get: operations["orgs.list"];
1054
1022
  put?: never;
1055
1023
  /**
1056
- * Regenerate question
1057
- * @description Update a question using an AI prompt.
1024
+ * Create a new organization
1025
+ * @description Create a new workspace to collaborate with others on exams.
1058
1026
  */
1059
- post: operations["exams.questions.regenerate"];
1027
+ post: operations["orgs.create"];
1060
1028
  delete?: never;
1061
1029
  options?: never;
1062
1030
  head?: never;
1063
1031
  patch?: never;
1064
1032
  trace?: never;
1065
1033
  };
1066
- "/exams/{id}/export/qti3-zip": {
1034
+ "/api-keys": {
1067
1035
  parameters: {
1068
1036
  query?: never;
1069
1037
  header?: never;
1070
1038
  path?: never;
1071
1039
  cookie?: never;
1072
1040
  };
1073
- get?: never;
1074
- put?: never;
1075
1041
  /**
1076
- * Export QTI 3 package
1077
- * @description Export an exam as a QTI 3 ZIP package.
1042
+ * Get API key
1043
+ * @description Get the API key for the current org/user combination. Creates one if none exists.
1078
1044
  */
1079
- post: operations["exams.export.qti3Zip"];
1045
+ get: operations["apiKeys.get"];
1046
+ put?: never;
1047
+ post?: never;
1080
1048
  delete?: never;
1081
1049
  options?: never;
1082
1050
  head?: never;
1083
1051
  patch?: never;
1084
1052
  trace?: never;
1085
1053
  };
1086
- "/exams/{id}/export/qti21-zip": {
1054
+ "/api-keys/reset": {
1087
1055
  parameters: {
1088
1056
  query?: never;
1089
1057
  header?: never;
@@ -1093,17 +1061,17 @@ interface paths {
1093
1061
  get?: never;
1094
1062
  put?: never;
1095
1063
  /**
1096
- * Export QTI 2.1 package
1097
- * @description Export an exam as a QTI 2.1 ZIP package.
1064
+ * Reset API key
1065
+ * @description Invalidate old API keys for this org/user and create a new one.
1098
1066
  */
1099
- post: operations["exams.export.qti21Zip"];
1067
+ post: operations["apiKeys.reset"];
1100
1068
  delete?: never;
1101
1069
  options?: never;
1102
1070
  head?: never;
1103
1071
  patch?: never;
1104
1072
  trace?: never;
1105
1073
  };
1106
- "/exams": {
1074
+ "/attributes": {
1107
1075
  parameters: {
1108
1076
  query?: never;
1109
1077
  header?: never;
@@ -1111,23 +1079,23 @@ interface paths {
1111
1079
  cookie?: never;
1112
1080
  };
1113
1081
  /**
1114
- * List exams
1115
- * @description Get a list of all exams within your workspace.
1082
+ * List attributes
1083
+ * @description Get all custom attributes configured for the current workspace.
1116
1084
  */
1117
- get: operations["exams.list"];
1085
+ get: operations["attributes.list"];
1118
1086
  put?: never;
1119
1087
  /**
1120
- * Create exam
1121
- * @description Create a new exam within your workspace.
1088
+ * Create attribute
1089
+ * @description Create a new custom attribute in the current workspace.
1122
1090
  */
1123
- post: operations["exams.create"];
1091
+ post: operations["attributes.create"];
1124
1092
  delete?: never;
1125
1093
  options?: never;
1126
1094
  head?: never;
1127
1095
  patch?: never;
1128
1096
  trace?: never;
1129
1097
  };
1130
- "/exams/import": {
1098
+ "/attributes/reorder": {
1131
1099
  parameters: {
1132
1100
  query?: never;
1133
1101
  header?: never;
@@ -1137,65 +1105,65 @@ interface paths {
1137
1105
  get?: never;
1138
1106
  put?: never;
1139
1107
  /**
1140
- * Import exam
1141
- * @description Create an exam by importing one or more source materials (e.g. an existing exam).
1108
+ * Reorder attributes
1109
+ * @description Update the position of multiple attributes at once.
1142
1110
  */
1143
- post: operations["exams.import"];
1111
+ post: operations["attributes.reorder"];
1144
1112
  delete?: never;
1145
1113
  options?: never;
1146
1114
  head?: never;
1147
1115
  patch?: never;
1148
1116
  trace?: never;
1149
1117
  };
1150
- "/exams/{id}": {
1118
+ "/attributes/{id}": {
1151
1119
  parameters: {
1152
1120
  query?: never;
1153
1121
  header?: never;
1154
1122
  path?: never;
1155
1123
  cookie?: never;
1156
1124
  };
1157
- /**
1158
- * Get exam
1159
- * @description Get a single exam by its ID.
1160
- */
1161
- get: operations["exams.get"];
1125
+ get?: never;
1162
1126
  put?: never;
1163
1127
  /**
1164
- * Update exam
1165
- * @description Update an existing exam.
1128
+ * Update attribute
1129
+ * @description Update an existing attribute in the current workspace.
1166
1130
  */
1167
- post: operations["exams.update"];
1131
+ post: operations["attributes.update"];
1168
1132
  /**
1169
- * Delete exam
1170
- * @description Delete the exam.
1133
+ * Delete attribute
1134
+ * @description Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
1171
1135
  */
1172
- delete: operations["exams.delete"];
1136
+ delete: operations["attributes.delete"];
1173
1137
  options?: never;
1174
1138
  head?: never;
1175
1139
  patch?: never;
1176
1140
  trace?: never;
1177
1141
  };
1178
- "/exams/{id}/duplicate": {
1142
+ "/taxonomies": {
1179
1143
  parameters: {
1180
1144
  query?: never;
1181
1145
  header?: never;
1182
1146
  path?: never;
1183
1147
  cookie?: never;
1184
1148
  };
1185
- get?: never;
1149
+ /**
1150
+ * Get taxonomies
1151
+ * @description Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
1152
+ */
1153
+ get: operations["taxonomies.list"];
1186
1154
  put?: never;
1187
1155
  /**
1188
- * Duplicate exam
1189
- * @description Duplicate the exam's questions and settings to a new exam.
1156
+ * Create taxonomy
1157
+ * @description Save a new taxonomy in the current workspace.
1190
1158
  */
1191
- post: operations["exams.duplicate"];
1159
+ post: operations["taxonomies.create"];
1192
1160
  delete?: never;
1193
1161
  options?: never;
1194
1162
  head?: never;
1195
1163
  patch?: never;
1196
1164
  trace?: never;
1197
1165
  };
1198
- "/exams/{id}/print": {
1166
+ "/taxonomies/{id}": {
1199
1167
  parameters: {
1200
1168
  query?: never;
1201
1169
  header?: never;
@@ -1205,57 +1173,65 @@ interface paths {
1205
1173
  get?: never;
1206
1174
  put?: never;
1207
1175
  /**
1208
- * Print exam
1209
- * @description Export an exam to a PDF file or Word document.
1176
+ * Update taxonomy
1177
+ * @description Update an existing taxonomy in the current workspace.
1210
1178
  */
1211
- post: operations["exams.print"];
1212
- delete?: never;
1179
+ post: operations["taxonomies.update"];
1180
+ /**
1181
+ * Delete taxonomy
1182
+ * @description Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
1183
+ */
1184
+ delete: operations["taxonomies.delete"];
1213
1185
  options?: never;
1214
1186
  head?: never;
1215
1187
  patch?: never;
1216
1188
  trace?: never;
1217
1189
  };
1218
- "/exams/{id}/generate": {
1190
+ "/permissions/autocomplete": {
1219
1191
  parameters: {
1220
1192
  query?: never;
1221
1193
  header?: never;
1222
1194
  path?: never;
1223
1195
  cookie?: never;
1224
1196
  };
1225
- get?: never;
1226
- put?: never;
1227
1197
  /**
1228
- * Generate exam
1229
- * @description Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
1198
+ * Autocomplete users and groups
1199
+ * @description Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
1230
1200
  */
1231
- post: operations["exams.startGeneration"];
1232
- delete?: never;
1201
+ get: operations["permissions.autocomplete"];
1202
+ put?: never;
1203
+ post?: never;
1204
+ delete?: never;
1233
1205
  options?: never;
1234
1206
  head?: never;
1235
1207
  patch?: never;
1236
1208
  trace?: never;
1237
1209
  };
1238
- "/exams/{id}/generate/cancel": {
1210
+ "/permissions/{resource}": {
1239
1211
  parameters: {
1240
1212
  query?: never;
1241
1213
  header?: never;
1242
1214
  path?: never;
1243
1215
  cookie?: never;
1244
1216
  };
1245
- get?: never;
1217
+ /**
1218
+ * Get sharing permissions
1219
+ * @description Get a list of users, groups and orgs that have access to a specific resource.
1220
+ */
1221
+ get: operations["permissions.list"];
1246
1222
  put?: never;
1247
1223
  /**
1248
- * Cancel exam generation
1249
- * @description Cancel an ongoing job to generate new questions for the exam using AI.
1224
+ * Create permission
1225
+ * @description Create a new permission for a specific resource, or update the role of an existing actor.
1250
1226
  */
1251
- post: operations["exams.cancelGeneration"];
1227
+ post: operations["permissions.assign"];
1252
1228
  delete?: never;
1253
1229
  options?: never;
1254
1230
  head?: never;
1255
1231
  patch?: never;
1256
1232
  trace?: never;
1257
1233
  };
1258
- "/exams/{id}/context-suggestions": {
1234
+ "/permissions/{resource}/{actor}": {
1259
1235
  parameters: {
1260
1236
  query?: never;
1261
1237
  header?: never;
@@ -1263,10 +1239,34 @@ interface paths {
1263
1239
  cookie?: never;
1264
1240
  };
1265
1241
  /**
1266
- * Get exam context suggestions
1267
- * @description Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
1242
+ * Get actor role
1243
+ * @description Get the role of a specific actor for a specific resource.
1268
1244
  */
1269
- get: operations["exams.getContextSuggestions"];
1245
+ get: operations["permissions.getActorRole"];
1246
+ put?: never;
1247
+ post?: never;
1248
+ /**
1249
+ * Remove permission
1250
+ * @description Remove a permission for a specific actor on a specific resource.
1251
+ */
1252
+ delete: operations["permissions.delete"];
1253
+ options?: never;
1254
+ head?: never;
1255
+ patch?: never;
1256
+ trace?: never;
1257
+ };
1258
+ "/student-levels": {
1259
+ parameters: {
1260
+ query?: never;
1261
+ header?: never;
1262
+ path?: never;
1263
+ cookie?: never;
1264
+ };
1265
+ /**
1266
+ * List available student levels
1267
+ * @description Get a list of available default student levels.
1268
+ */
1269
+ get: operations["studentLevels.list"];
1270
1270
  put?: never;
1271
1271
  post?: never;
1272
1272
  delete?: never;
@@ -1275,6 +1275,54 @@ interface paths {
1275
1275
  patch?: never;
1276
1276
  trace?: never;
1277
1277
  };
1278
+ "/users": {
1279
+ parameters: {
1280
+ query?: never;
1281
+ header?: never;
1282
+ path?: never;
1283
+ cookie?: never;
1284
+ };
1285
+ /**
1286
+ * List users
1287
+ * @description Get a list of all users in the workspace.
1288
+ */
1289
+ get: operations["users.list"];
1290
+ put?: never;
1291
+ /**
1292
+ * Create user
1293
+ * @description Create a new user in the workspace.
1294
+ */
1295
+ post: operations["users.create"];
1296
+ delete?: never;
1297
+ options?: never;
1298
+ head?: never;
1299
+ patch?: never;
1300
+ trace?: never;
1301
+ };
1302
+ "/users/{id}": {
1303
+ parameters: {
1304
+ query?: never;
1305
+ header?: never;
1306
+ path?: never;
1307
+ cookie?: never;
1308
+ };
1309
+ get?: never;
1310
+ put?: never;
1311
+ post?: never;
1312
+ /**
1313
+ * Delete user
1314
+ * @description Delete a user from the workspace.
1315
+ */
1316
+ delete: operations["users.delete"];
1317
+ options?: never;
1318
+ head?: never;
1319
+ /**
1320
+ * Update user role
1321
+ * @description Update a user's role within the workspace.
1322
+ */
1323
+ patch: operations["users.update"];
1324
+ trace?: never;
1325
+ };
1278
1326
  "/practice-spaces": {
1279
1327
  parameters: {
1280
1328
  query?: never;
@@ -2149,7 +2197,30 @@ interface operations {
2149
2197
  */
2150
2198
  type: "AssociateInteraction" | "ChoiceInteraction" | "DrawingInteraction" | "EndAttemptInteraction" | "ExtendedTextInteraction" | "GapMatchInteraction" | "GraphicAssociateInteraction" | "GraphicGapMatchInteraction" | "GraphicOrderInteraction" | "HotspotInteraction" | "HottextInteraction" | "InlineChoiceInteraction" | "MatchInteraction" | "MediaInteraction" | "OrderInteraction" | "PortableCustomInteraction" | "PositionObjectInteraction" | "SelectPointInteraction" | "SliderInteraction" | "TextEntryInteraction" | "UploadInteraction";
2151
2199
  options?: {
2152
- [key: string]: string | number | boolean | unknown[] | Record<string, never>;
2200
+ [key: string]: string | number | boolean | unknown[] | {
2201
+ [key: string]: unknown;
2202
+ };
2203
+ };
2204
+ };
2205
+ };
2206
+ };
2207
+ /** @description Import configuration for various formats */
2208
+ import?: {
2209
+ /** @description QTI 3.0 import configuration for mapping incoming QTI items to this question type */
2210
+ qti3?: {
2211
+ interaction: {
2212
+ /**
2213
+ * @description The QTI interaction type this question type handles on import
2214
+ * @enum {string}
2215
+ */
2216
+ type: "AssociateInteraction" | "ChoiceInteraction" | "DrawingInteraction" | "EndAttemptInteraction" | "ExtendedTextInteraction" | "GapMatchInteraction" | "GraphicAssociateInteraction" | "GraphicGapMatchInteraction" | "GraphicOrderInteraction" | "HotspotInteraction" | "HottextInteraction" | "InlineChoiceInteraction" | "MatchInteraction" | "MediaInteraction" | "OrderInteraction" | "PortableCustomInteraction" | "PositionObjectInteraction" | "SelectPointInteraction" | "SliderInteraction" | "TextEntryInteraction" | "UploadInteraction";
2217
+ };
2218
+ /** @description Optional JSONata expression (starting with =) that must evaluate to true for this mapping to be used. Evaluated against the same context as settings: { interaction, correctResponse, points }. Useful when multiple question types handle the same interaction type (e.g. single vs multiple choice). */
2219
+ condition?: string;
2220
+ /** @description JSONata expressions mapping QTI interaction properties to question settings */
2221
+ settings?: {
2222
+ [key: string]: string | number | boolean | unknown[] | {
2223
+ [key: string]: unknown;
2153
2224
  };
2154
2225
  };
2155
2226
  };
@@ -2639,6 +2710,38 @@ interface operations {
2639
2710
  presets: {
2640
2711
  examId: string;
2641
2712
  };
2713
+ } | {
2714
+ /** @description The user ID for whom the embed session is created */
2715
+ actor: string;
2716
+ /** @description UI options for the embed session */
2717
+ theme: {
2718
+ /** @description CSS hex color code for primary UI elements, either #RRGGBB or #RGB */
2719
+ primaryColor?: string;
2720
+ /** @description CSS hex color code for background, either #RRGGBB or #RGB */
2721
+ backgroundColor?: string;
2722
+ /** @description Locale code for UI language. Currently supported: 'en', 'nl' - other values accepted, but will default to English */
2723
+ locale?: string;
2724
+ };
2725
+ /** @description Additional key-value metadata */
2726
+ metadata?: {
2727
+ [key: string]: string | number | boolean | null;
2728
+ };
2729
+ /**
2730
+ * Format: uri
2731
+ * @description Optional redirect URL after completion
2732
+ */
2733
+ returnUrl?: string;
2734
+ /**
2735
+ * Format: uri
2736
+ * @description Optional allowed origin for postMessage events
2737
+ */
2738
+ allowedOrigin?: string;
2739
+ /** @enum {string} */
2740
+ flow: "take-exam";
2741
+ /** @description Preset values for the take-exam flow */
2742
+ presets: {
2743
+ examId: string;
2744
+ };
2642
2745
  } | {
2643
2746
  /** @description The user ID for whom the embed session is created */
2644
2747
  actor: string;
@@ -2687,7 +2790,7 @@ interface operations {
2687
2790
  /** Format: uri */
2688
2791
  embedUrl: string;
2689
2792
  /** @enum {string} */
2690
- flow: "generate-exam" | "generate-question" | "edit-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2793
+ flow: "generate-exam" | "generate-question" | "edit-exam" | "take-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2691
2794
  actor: string;
2692
2795
  enabledResponseModes: ("return_url" | "post_message")[];
2693
2796
  /** Format: date-time */
@@ -2738,7 +2841,7 @@ interface operations {
2738
2841
  /** Format: uri */
2739
2842
  embedUrl: string;
2740
2843
  /** @enum {string} */
2741
- flow: "generate-exam" | "generate-question" | "edit-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2844
+ flow: "generate-exam" | "generate-question" | "edit-exam" | "take-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2742
2845
  actor: string;
2743
2846
  enabledResponseModes: ("return_url" | "post_message")[];
2744
2847
  /** Format: date-time */
@@ -2778,240 +2881,341 @@ interface operations {
2778
2881
  requestBody?: never;
2779
2882
  responses: never;
2780
2883
  };
2781
- "me.get": {
2884
+ "exams.sessions.list": {
2782
2885
  parameters: {
2783
2886
  query?: never;
2784
2887
  header?: never;
2785
- path?: never;
2888
+ path: {
2889
+ id: string;
2890
+ };
2786
2891
  cookie?: never;
2787
2892
  };
2788
2893
  requestBody?: never;
2789
2894
  responses: never;
2790
2895
  };
2791
- "me.update": {
2896
+ "exams.sessions.import": {
2792
2897
  parameters: {
2793
2898
  query?: never;
2794
2899
  header?: never;
2795
- path?: never;
2900
+ path: {
2901
+ id: string;
2902
+ };
2796
2903
  cookie?: never;
2797
2904
  };
2798
2905
  requestBody?: {
2799
2906
  content: {
2800
2907
  "application/json": {
2801
- /** @description The user's name */
2802
- name?: string;
2803
- /** @description A map of user preferences */
2804
- preferences?: {
2805
- [key: string]: unknown;
2806
- };
2908
+ studentName: string;
2909
+ /**
2910
+ * @default manual
2911
+ * @enum {string}
2912
+ */
2913
+ source?: "online-assessment" | "document-scanner" | "answer-bot" | "manual";
2914
+ answers?: {
2915
+ question: string;
2916
+ value?: (string | (string | null)[]) | null;
2917
+ completed?: boolean | null;
2918
+ context?: unknown | null;
2919
+ pointsAwarded?: number | null;
2920
+ pointsToEarn?: number | null;
2921
+ feedback?: string | null;
2922
+ scoringCriteria?: unknown | null;
2923
+ /** Format: date-time */
2924
+ savedAt?: string;
2925
+ gradedAt?: string | null;
2926
+ gradedBy?: string | null;
2927
+ gradingStatus?: ("graded" | "auto-graded") | null;
2928
+ originalValue?: (string | (string | null)[]) | null;
2929
+ editedBy?: string | null;
2930
+ editedAt?: string | null;
2931
+ masteryTopicId?: string | null;
2932
+ traceIds?: string[] | null;
2933
+ }[];
2807
2934
  };
2808
2935
  };
2809
2936
  };
2810
2937
  responses: never;
2811
2938
  };
2812
- "media.upload": {
2939
+ "exams.sessions.scan": {
2813
2940
  parameters: {
2814
- query?: {
2815
- /** @description Original attachment filename */
2816
- filename?: string;
2817
- /** @description Category of file, used for grouping */
2818
- type?: string;
2819
- /** @description MIME type of the attachment */
2820
- contentType?: string;
2821
- };
2941
+ query?: never;
2822
2942
  header?: never;
2823
- path?: never;
2943
+ path: {
2944
+ id: string;
2945
+ };
2824
2946
  cookie?: never;
2825
2947
  };
2826
2948
  requestBody?: never;
2827
- responses: {
2828
- 200: {
2829
- headers: {
2830
- [name: string]: unknown;
2831
- };
2832
- content: {
2833
- "application/json": {
2834
- /** Format: uri */
2835
- uploadUrl?: string;
2836
- /** Format: uri */
2837
- publicUrl?: string;
2838
- };
2949
+ responses: never;
2950
+ };
2951
+ "exams.sessions.scanDocument": {
2952
+ parameters: {
2953
+ query?: never;
2954
+ header?: never;
2955
+ path: {
2956
+ id: string;
2957
+ };
2958
+ cookie?: never;
2959
+ };
2960
+ requestBody?: {
2961
+ content: {
2962
+ "application/json": {
2963
+ /** Format: uri */
2964
+ documentUrl: string;
2839
2965
  };
2840
2966
  };
2841
2967
  };
2968
+ responses: never;
2842
2969
  };
2843
- "org.get": {
2970
+ "exams.sessions.get": {
2844
2971
  parameters: {
2845
2972
  query?: never;
2846
2973
  header?: never;
2847
- path?: never;
2974
+ path: {
2975
+ id: string;
2976
+ sessionId: string;
2977
+ };
2848
2978
  cookie?: never;
2849
2979
  };
2850
2980
  requestBody?: never;
2851
2981
  responses: never;
2852
2982
  };
2853
- "org.delete": {
2983
+ "exams.sessions.delete": {
2854
2984
  parameters: {
2855
2985
  query?: never;
2856
2986
  header?: never;
2857
- path?: never;
2987
+ path: {
2988
+ id: string;
2989
+ sessionId: string;
2990
+ };
2858
2991
  cookie?: never;
2859
2992
  };
2860
2993
  requestBody?: never;
2861
2994
  responses: never;
2862
2995
  };
2863
- "org.update": {
2996
+ "exams.sessions.saveFeedback": {
2864
2997
  parameters: {
2865
2998
  query?: never;
2866
2999
  header?: never;
2867
- path?: never;
3000
+ path: {
3001
+ id: string;
3002
+ sessionId: string;
3003
+ };
2868
3004
  cookie?: never;
2869
3005
  };
2870
3006
  requestBody?: {
2871
3007
  content: {
2872
3008
  "application/json": {
2873
- name?: string;
2874
- /** Format: uri */
2875
- logoImageUrl?: string;
2876
- menuColor?: string;
2877
- accentColor?: string;
2878
- sharingBlockPublic?: boolean;
2879
- settings?: {
2880
- /** @description Whether users can only see other users in the same groups as them. */
2881
- restrictGroupVisibility?: boolean;
2882
- /** @description Whether the organization blocks public link sharing. */
2883
- sharingBlockPublic?: boolean;
2884
- };
3009
+ /** @description Question ID to provide feedback for */
3010
+ question: string;
3011
+ /** @description Points to award for the answer */
3012
+ pointsAwarded?: number;
3013
+ /** @description Optional teacher feedback for the answer */
3014
+ feedback?: string;
2885
3015
  };
2886
3016
  };
2887
3017
  };
2888
3018
  responses: never;
2889
3019
  };
2890
- "org.customDomain.get": {
3020
+ "exams.sessions.saveOverallFeedback": {
2891
3021
  parameters: {
2892
3022
  query?: never;
2893
3023
  header?: never;
2894
- path?: never;
3024
+ path: {
3025
+ id: string;
3026
+ sessionId: string;
3027
+ };
2895
3028
  cookie?: never;
2896
3029
  };
2897
- requestBody?: never;
3030
+ requestBody?: {
3031
+ content: {
3032
+ "application/json": {
3033
+ /** @description Teacher feedback for the test as a whole */
3034
+ feedback?: string | null;
3035
+ };
3036
+ };
3037
+ };
2898
3038
  responses: never;
2899
3039
  };
2900
- "org.customDomain.update": {
3040
+ "exams.sessions.generateOverallFeedback": {
2901
3041
  parameters: {
2902
3042
  query?: never;
2903
3043
  header?: never;
2904
- path?: never;
3044
+ path: {
3045
+ id: string;
3046
+ sessionId: string;
3047
+ };
2905
3048
  cookie?: never;
2906
3049
  };
2907
- requestBody?: {
2908
- content: {
2909
- "application/json": {
2910
- customDomain?: string | null;
2911
- };
3050
+ requestBody?: never;
3051
+ responses: never;
3052
+ };
3053
+ "exams.sessions.acceptAllSuggestions": {
3054
+ parameters: {
3055
+ query?: never;
3056
+ header?: never;
3057
+ path: {
3058
+ id: string;
3059
+ sessionId: string;
2912
3060
  };
3061
+ cookie?: never;
2913
3062
  };
3063
+ requestBody?: never;
2914
3064
  responses: never;
2915
3065
  };
2916
- "orgs.list": {
3066
+ "exams.sessions.acceptSuggestion": {
2917
3067
  parameters: {
2918
3068
  query?: never;
2919
3069
  header?: never;
2920
- path?: never;
3070
+ path: {
3071
+ id: string;
3072
+ sessionId: string;
3073
+ questionId: string;
3074
+ };
2921
3075
  cookie?: never;
2922
3076
  };
2923
3077
  requestBody?: never;
2924
3078
  responses: never;
2925
3079
  };
2926
- "orgs.create": {
3080
+ "exams.sessions.editAnswer": {
2927
3081
  parameters: {
2928
3082
  query?: never;
2929
3083
  header?: never;
2930
- path?: never;
3084
+ path: {
3085
+ id: string;
3086
+ sessionId: string;
3087
+ questionId: string;
3088
+ };
2931
3089
  cookie?: never;
2932
3090
  };
2933
3091
  requestBody?: {
2934
3092
  content: {
2935
3093
  "application/json": {
2936
- name: string;
3094
+ answer: {
3095
+ question: string;
3096
+ value?: (string | (string | null)[]) | null;
3097
+ completed?: boolean | null;
3098
+ context?: unknown | null;
3099
+ };
3100
+ /** @description Whether to automatically grade the answer after editing */
3101
+ autoGrade?: boolean;
2937
3102
  };
2938
3103
  };
2939
3104
  };
2940
3105
  responses: never;
2941
3106
  };
2942
- "apiKeys.get": {
3107
+ "exams.sessions.comments.list": {
2943
3108
  parameters: {
2944
3109
  query?: never;
2945
3110
  header?: never;
2946
- path?: never;
3111
+ path: {
3112
+ id: string;
3113
+ sessionId: string;
3114
+ };
2947
3115
  cookie?: never;
2948
3116
  };
2949
3117
  requestBody?: never;
2950
3118
  responses: never;
2951
3119
  };
2952
- "apiKeys.reset": {
3120
+ "exams.sessions.comments.create": {
2953
3121
  parameters: {
2954
3122
  query?: never;
2955
3123
  header?: never;
2956
- path?: never;
3124
+ path: {
3125
+ id: string;
3126
+ sessionId: string;
3127
+ };
2957
3128
  cookie?: never;
2958
3129
  };
2959
- requestBody?: never;
3130
+ requestBody?: {
3131
+ content: {
3132
+ "application/json": {
3133
+ value?: string;
3134
+ range?: [
3135
+ number,
3136
+ number
3137
+ ];
3138
+ quotation?: string;
3139
+ inReplyTo?: string;
3140
+ /** @enum {string} */
3141
+ status?: "open" | "resolved";
3142
+ /** @description Question ID the comment is attached to */
3143
+ question: string;
3144
+ };
3145
+ };
3146
+ };
2960
3147
  responses: never;
2961
3148
  };
2962
- "attributes.list": {
3149
+ "exams.sessions.comments.delete": {
2963
3150
  parameters: {
2964
3151
  query?: never;
2965
3152
  header?: never;
2966
- path?: never;
3153
+ path: {
3154
+ id: string;
3155
+ sessionId: string;
3156
+ commentId: string;
3157
+ };
2967
3158
  cookie?: never;
2968
3159
  };
2969
3160
  requestBody?: never;
2970
3161
  responses: never;
2971
3162
  };
2972
- "attributes.create": {
3163
+ "exams.sessions.comments.update": {
2973
3164
  parameters: {
2974
3165
  query?: never;
2975
3166
  header?: never;
2976
- path?: never;
3167
+ path: {
3168
+ id: string;
3169
+ sessionId: string;
3170
+ commentId: string;
3171
+ };
2977
3172
  cookie?: never;
2978
3173
  };
2979
3174
  requestBody?: {
2980
3175
  content: {
2981
3176
  "application/json": {
2982
- name: string;
3177
+ value?: string;
3178
+ range?: [
3179
+ number,
3180
+ number
3181
+ ];
3182
+ quotation?: string;
3183
+ inReplyTo?: string;
2983
3184
  /** @enum {string} */
2984
- attributeType: "string" | "category" | "studentLevel" | "subject";
2985
- options?: string[];
2986
- showInStudentDashboard?: boolean;
2987
- showAsStudentPreference?: boolean;
2988
- position?: number;
2989
- appearanceColor?: (string) | null;
3185
+ status?: "open" | "resolved";
2990
3186
  };
2991
3187
  };
2992
3188
  };
2993
3189
  responses: never;
2994
3190
  };
2995
- "attributes.reorder": {
3191
+ "exams.questions.import": {
2996
3192
  parameters: {
2997
3193
  query?: never;
2998
3194
  header?: never;
2999
- path?: never;
3195
+ path: {
3196
+ id: string;
3197
+ };
3000
3198
  cookie?: never;
3001
3199
  };
3002
3200
  requestBody?: {
3003
3201
  content: {
3004
3202
  "application/json": {
3005
- order: {
3006
- id: string;
3007
- position: number;
3008
- }[];
3203
+ /** @description File name */
3204
+ name?: string;
3205
+ /** @description MIME type of the file, e.g. application/pdf */
3206
+ type?: string;
3207
+ /** @description URL of the file, required if no content is specified. */
3208
+ url?: string;
3209
+ /** @description Content of the file as a string, as an alternative to URL. Only supported for exports from other systems (e.g. Moodle XML). */
3210
+ content?: string;
3211
+ /** @description Whether to keep existing exam settings when importing questions via AI. */
3212
+ keepExistingSettings?: boolean;
3009
3213
  };
3010
3214
  };
3011
3215
  };
3012
3216
  responses: never;
3013
3217
  };
3014
- "attributes.update": {
3218
+ "exams.questions.generate": {
3015
3219
  parameters: {
3016
3220
  query?: never;
3017
3221
  header?: never;
@@ -3023,90 +3227,53 @@ interface operations {
3023
3227
  requestBody?: {
3024
3228
  content: {
3025
3229
  "application/json": {
3026
- name?: string;
3230
+ message: string;
3231
+ questionType?: string;
3027
3232
  /** @enum {string} */
3028
- attributeType?: "string" | "category" | "studentLevel" | "subject";
3029
- options?: string[];
3030
- showInStudentDashboard?: boolean;
3031
- showAsStudentPreference?: boolean;
3032
- position?: number;
3033
- appearanceColor?: (string) | null;
3233
+ format?: "examplary_json" | "qti_v3p0" | "qti_v2p1";
3034
3234
  };
3035
3235
  };
3036
3236
  };
3037
3237
  responses: never;
3038
3238
  };
3039
- "attributes.delete": {
3239
+ "exams.questions.get": {
3040
3240
  parameters: {
3041
- query?: never;
3241
+ query?: {
3242
+ /** @description The format to return the question in. `examplary_json` returns the question in the Examplary JSON format, while `qti_v3p0` and `qti_v2p1` return the question in QTI format version 3 and 2.1 respectively. */
3243
+ format?: "examplary_json" | "qti_v3p0" | "qti_v2p1";
3244
+ };
3042
3245
  header?: never;
3043
3246
  path: {
3247
+ /** @description Exam ID, e.g. `exam_1234`. */
3044
3248
  id: string;
3249
+ /** @description Question ID, e.g. `question_1234`, or `first` to get the first question. */
3250
+ questionId: string;
3045
3251
  };
3046
3252
  cookie?: never;
3047
3253
  };
3048
3254
  requestBody?: never;
3049
3255
  responses: never;
3050
3256
  };
3051
- "taxonomies.list": {
3052
- parameters: {
3053
- query?: never;
3054
- header?: never;
3055
- path?: never;
3056
- cookie?: never;
3057
- };
3058
- requestBody?: never;
3059
- responses: never;
3060
- };
3061
- "taxonomies.create": {
3062
- parameters: {
3063
- query?: never;
3064
- header?: never;
3065
- path?: never;
3066
- cookie?: never;
3067
- };
3068
- requestBody?: {
3069
- content: {
3070
- "application/json": {
3071
- name: string;
3072
- description?: string;
3073
- instructions?: string;
3074
- levels: {
3075
- name?: string;
3076
- instructions?: string;
3077
- }[];
3078
- };
3079
- };
3080
- };
3081
- responses: never;
3082
- };
3083
- "taxonomies.update": {
3257
+ "exams.questions.regenerate": {
3084
3258
  parameters: {
3085
3259
  query?: never;
3086
3260
  header?: never;
3087
3261
  path: {
3088
3262
  id: string;
3263
+ questionId: string;
3089
3264
  };
3090
3265
  cookie?: never;
3091
3266
  };
3092
3267
  requestBody?: {
3093
3268
  content: {
3094
3269
  "application/json": {
3095
- name: string;
3096
- description?: string;
3097
- instructions?: string;
3098
- levels: {
3099
- name?: string;
3100
- instructions?: string;
3101
- }[];
3102
- } & {
3103
- [key: string]: unknown;
3270
+ message: string;
3104
3271
  };
3105
3272
  };
3106
3273
  };
3107
3274
  responses: never;
3108
3275
  };
3109
- "taxonomies.delete": {
3276
+ "exams.export.qti3Zip": {
3110
3277
  parameters: {
3111
3278
  query?: never;
3112
3279
  header?: never;
@@ -3116,290 +3283,243 @@ interface operations {
3116
3283
  cookie?: never;
3117
3284
  };
3118
3285
  requestBody?: never;
3119
- responses: never;
3120
- };
3121
- "permissions.autocomplete": {
3122
- parameters: {
3123
- query: {
3124
- /** @description Search query (min 3 characters) */
3125
- q: string;
3126
- /** @description Type of entity to search */
3127
- type?: "user" | "group";
3128
- };
3129
- header?: never;
3130
- path?: never;
3131
- cookie?: never;
3132
- };
3133
- requestBody?: never;
3134
3286
  responses: {
3135
- /** @description List of matching users and groups. */
3287
+ /** @description URL to download the exported QTI ZIP package. */
3136
3288
  200: {
3137
3289
  headers: {
3138
3290
  [name: string]: unknown;
3139
3291
  };
3140
- content?: never;
3141
- };
3142
- /** @description Query must be at least 3 characters. */
3143
- 400: {
3144
- headers: {
3145
- [name: string]: unknown;
3292
+ content: {
3293
+ "application/json": {
3294
+ /**
3295
+ * Format: uri
3296
+ * @description URL to download the exported QTI ZIP package.
3297
+ */
3298
+ url: string;
3299
+ };
3146
3300
  };
3147
- content?: never;
3148
3301
  };
3149
3302
  };
3150
3303
  };
3151
- "permissions.list": {
3304
+ "exams.export.qti21Zip": {
3152
3305
  parameters: {
3153
3306
  query?: never;
3154
3307
  header?: never;
3155
3308
  path: {
3156
- /** @description The ID of the resource to list permissions for, e.g. `exam_1234`. */
3157
- resource: string;
3309
+ id: string;
3158
3310
  };
3159
3311
  cookie?: never;
3160
3312
  };
3161
3313
  requestBody?: never;
3162
3314
  responses: {
3163
- /** @description List of permissions for the specified resource. */
3315
+ /** @description URL to download the exported QTI ZIP package. */
3164
3316
  200: {
3165
3317
  headers: {
3166
3318
  [name: string]: unknown;
3167
3319
  };
3168
3320
  content: {
3169
3321
  "application/json": {
3170
- actor: {
3171
- id: string;
3172
- name?: string;
3173
- /** Format: uri */
3174
- avatar?: string;
3175
- /** @enum {string} */
3176
- type: "user" | "group" | "org";
3177
- /** @enum {string} */
3178
- orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
3179
- };
3180
- /** @enum {string} */
3181
- role: "owner" | "manager" | "editor" | "viewer" | "participant";
3182
- /** Format: date-time */
3183
- createdAt: string;
3184
- /** Format: date-time */
3185
- updatedAt: string;
3186
- createdBy: string;
3187
- }[];
3322
+ /**
3323
+ * Format: uri
3324
+ * @description URL to download the exported QTI ZIP package.
3325
+ */
3326
+ url: string;
3327
+ };
3188
3328
  };
3189
3329
  };
3190
- /** @description No access to this resource. */
3191
- 403: {
3192
- headers: {
3193
- [name: string]: unknown;
3194
- };
3195
- content?: never;
3330
+ };
3331
+ };
3332
+ "exams.list": {
3333
+ parameters: {
3334
+ query?: {
3335
+ /** @description Optional filter by folder ID, e.g. `folder_1234`. */
3336
+ folder?: string;
3337
+ /** @description Optional filter by permission role. */
3338
+ role?: "owner" | "manager" | "editor" | "viewer" | "participant";
3196
3339
  };
3340
+ header?: never;
3341
+ path?: never;
3342
+ cookie?: never;
3197
3343
  };
3344
+ requestBody?: never;
3345
+ responses: never;
3198
3346
  };
3199
- "permissions.assign": {
3347
+ "exams.create": {
3200
3348
  parameters: {
3201
3349
  query?: never;
3202
3350
  header?: never;
3203
- path: {
3204
- /** @description The ID of the resource to assign the permission on, e.g. `exam_1234`. */
3205
- resource: string;
3206
- };
3351
+ path?: never;
3207
3352
  cookie?: never;
3208
3353
  };
3209
3354
  requestBody?: {
3210
3355
  content: {
3211
3356
  "application/json": {
3212
- /** @description The ID of the actor to assign the permission to, e.g. `user_1234`, `group_1234` or `org_1234`. */
3213
- actor: string;
3214
- /** @enum {string} */
3215
- role: "owner" | "manager" | "editor" | "viewer" | "participant";
3216
- } | {
3217
- /**
3218
- * Format: email
3219
- * @description The email of the user to add or invite.
3220
- */
3221
- email: string;
3222
- /** @enum {string} */
3223
- role: "owner" | "manager" | "editor" | "viewer" | "participant";
3224
- /**
3225
- * @description Whether to send an invitation email if the user does not exist. Defaults to false.
3226
- * @default false
3227
- */
3228
- sendInvite?: boolean;
3229
- };
3230
- };
3231
- };
3232
- responses: {
3233
- /** @description The created or updated permission. */
3234
- 201: {
3235
- headers: {
3236
- [name: string]: unknown;
3237
- };
3238
- content: {
3239
- "application/json": {
3240
- actor: {
3241
- id: string;
3242
- name?: string;
3243
- /** Format: uri */
3244
- avatar?: string;
3245
- /** @enum {string} */
3246
- type: "user" | "group" | "org";
3247
- /** @enum {string} */
3248
- orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
3357
+ name: string;
3358
+ sourceMaterialIds?: string[] | null;
3359
+ context?: string | null;
3360
+ studentLevel?: string | null;
3361
+ subject?: string | null;
3362
+ language?: string | null;
3363
+ taxonomyId?: string | null;
3364
+ intendedDuration?: unknown | null;
3365
+ allowedGenerationQuestionTypes?: string[] | null;
3366
+ metadata?: {
3367
+ [key: string]: string | number | boolean | null;
3368
+ } | null;
3369
+ questions?: ({
3370
+ /** @description Question ID */
3371
+ id?: string;
3372
+ /** @description ID of the question type */
3373
+ type?: string;
3374
+ /** @description Title for the question (stem) */
3375
+ title?: string | null;
3376
+ /** @description Optional description for the question */
3377
+ description?: string | null;
3378
+ /** @description Settings for the question, often specific to the question type */
3379
+ settings?: {
3380
+ [key: string]: unknown;
3249
3381
  };
3382
+ /** @description Scoring configuration for the question */
3383
+ scoring?: {
3384
+ /** @description The type of rubric. Different rubric types have different shapes. */
3385
+ rubricType?: ("simple" | "analytical" | "holistic" | "exact-values") | null;
3386
+ /** @description The criteria for scoring the question. For 'simple' rubric type, criteria have no levels, and their points stack (total = sum of points for all criteria that apply). For 'analytical' rubric type, there should be at least one criteria, with levels. For each criteria, a matching level is picked. For 'holistic' rubric type, there should be multiple criteria, without levels (score = single selected criteria). For 'exact-values' rubric type, each criteria represents a specific value that must be matched exactly. */
3387
+ criteria?: {
3388
+ id: string;
3389
+ /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3390
+ title?: string | null;
3391
+ /** @description The description of the scoring criterion or level. For analytical levels, this describes the specific requirements to earn the points for that level. For holistic criteria, this describes the overall requirement to earn the points for that criterion. */
3392
+ description?: string | null;
3393
+ /** @description The default amount of points to assign if this criterion or level is selected. */
3394
+ points?: number | null;
3395
+ /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3396
+ minPoints?: number | null;
3397
+ /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3398
+ maxPoints?: number | null;
3399
+ /** @description The levels of a analytical rubric criterion. Each level represents a different point value and description for the same criterion. */
3400
+ levels?: {
3401
+ id: string;
3402
+ /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3403
+ title?: string | null;
3404
+ /** @description The description of the scoring criterion or level. For analytical levels, this describes the specific requirements to earn the points for that level. For holistic criteria, this describes the overall requirement to earn the points for that criterion. */
3405
+ description?: string | null;
3406
+ /** @description The default amount of points to assign if this criterion or level is selected. */
3407
+ points?: number | null;
3408
+ /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3409
+ minPoints?: number | null;
3410
+ /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3411
+ maxPoints?: number | null;
3412
+ }[] | null;
3413
+ }[] | null;
3414
+ /** @description Whether exact values matching should be case insensitive. Only applicable for 'exact-values' rubric type. */
3415
+ exactValuesCaseInsensitive?: boolean | null;
3416
+ /** @description Optional additional grading guidance text. */
3417
+ guidance?: string | null;
3418
+ /** @description Optional example model answer text to show to graders. */
3419
+ modelAnswer?: string | null;
3420
+ /** @description The ID of the scoring template applied, if any. */
3421
+ templateId?: string | null;
3422
+ } | null;
3423
+ /** @description Tags associated with the question for categorization and search */
3424
+ tags?: string[] | null;
3425
+ /** @description Optional external ID for the question, used to link to external systems */
3426
+ externalId?: string | null;
3427
+ /** @description Metadata for the question */
3428
+ metadata?: {
3429
+ [key: string]: string | number | boolean | null;
3430
+ } | null;
3431
+ /** @description Version number, incremented when question is edited */
3432
+ v?: number | null;
3433
+ /** @description ID of the question in the question bank */
3434
+ questionBankItemId?: string | null;
3435
+ /** @description Trace IDs for internal tracking of AI generation processes */
3436
+ traceIds?: string[] | null;
3437
+ } & {
3438
+ [key: string]: unknown;
3439
+ })[] | null;
3440
+ permissions?: {
3441
+ actor: string;
3250
3442
  /** @enum {string} */
3251
3443
  role: "owner" | "manager" | "editor" | "viewer" | "participant";
3252
- /** Format: date-time */
3253
- createdAt: string;
3254
- /** Format: date-time */
3255
- updatedAt: string;
3256
- createdBy: string;
3257
- };
3258
- };
3259
- };
3260
- /** @description No access to manage this resource. */
3261
- 403: {
3262
- headers: {
3263
- [name: string]: unknown;
3444
+ }[] | null;
3264
3445
  };
3265
- content?: never;
3266
3446
  };
3267
3447
  };
3448
+ responses: never;
3268
3449
  };
3269
- "permissions.getActorRole": {
3450
+ "exams.import": {
3270
3451
  parameters: {
3271
3452
  query?: never;
3272
3453
  header?: never;
3273
- path: {
3274
- /** @description The ID of the actor to check role for, e.g. `user_abcd`. */
3275
- actor: ((string) | "me") | string;
3276
- /** @description The ID of the resource to check role for, e.g. `exam_1234`. */
3277
- resource: string;
3278
- };
3454
+ path?: never;
3279
3455
  cookie?: never;
3280
3456
  };
3281
- requestBody?: never;
3282
- responses: {
3283
- /** @description Role of the specified actor for the specified resource. */
3284
- 200: {
3285
- headers: {
3286
- [name: string]: unknown;
3287
- };
3288
- content: {
3289
- "application/json": {
3290
- actor: {
3291
- id: string;
3292
- name?: string;
3293
- /** Format: uri */
3294
- avatar?: string;
3295
- /** @enum {string} */
3296
- type: "user" | "group" | "org";
3297
- /** @enum {string} */
3298
- orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
3299
- };
3300
- /** @enum {string} */
3301
- role: "owner" | "manager" | "editor" | "viewer" | "participant";
3302
- /** Format: date-time */
3303
- createdAt: string;
3304
- /** Format: date-time */
3305
- updatedAt: string;
3306
- createdBy: string;
3307
- };
3308
- };
3309
- };
3310
- /** @description No access to this resource. */
3311
- 403: {
3312
- headers: {
3313
- [name: string]: unknown;
3314
- };
3315
- content?: never;
3316
- };
3317
- /** @description The specified actor has no access to the specified resource. */
3318
- 404: {
3319
- headers: {
3320
- [name: string]: unknown;
3457
+ requestBody?: {
3458
+ content: {
3459
+ "application/json": {
3460
+ name: string;
3461
+ sourceMaterialIds?: string[];
3321
3462
  };
3322
- content?: never;
3323
3463
  };
3324
3464
  };
3465
+ responses: never;
3325
3466
  };
3326
- "permissions.delete": {
3467
+ "exams.get": {
3327
3468
  parameters: {
3328
3469
  query?: never;
3329
3470
  header?: never;
3330
3471
  path: {
3331
- resource: string;
3332
- actor: (string) | string;
3472
+ id: string;
3333
3473
  };
3334
3474
  cookie?: never;
3335
3475
  };
3336
3476
  requestBody?: never;
3337
- responses: {
3338
- /** @description Permission successfully removed. */
3339
- 200: {
3340
- headers: {
3341
- [name: string]: unknown;
3342
- };
3343
- content?: never;
3344
- };
3345
- /** @description No access to manage this resource. */
3346
- 403: {
3347
- headers: {
3348
- [name: string]: unknown;
3349
- };
3350
- content?: never;
3351
- };
3352
- };
3477
+ responses: never;
3353
3478
  };
3354
- "studentLevels.list": {
3479
+ "exams.update": {
3355
3480
  parameters: {
3356
3481
  query?: never;
3357
3482
  header?: never;
3358
- path?: never;
3483
+ path: {
3484
+ id: string;
3485
+ };
3359
3486
  cookie?: never;
3360
3487
  };
3361
3488
  requestBody?: never;
3362
3489
  responses: never;
3363
3490
  };
3364
- "users.list": {
3491
+ "exams.delete": {
3365
3492
  parameters: {
3366
3493
  query?: never;
3367
3494
  header?: never;
3368
- path?: never;
3495
+ path: {
3496
+ id: string;
3497
+ };
3369
3498
  cookie?: never;
3370
3499
  };
3371
3500
  requestBody?: never;
3372
3501
  responses: never;
3373
3502
  };
3374
- "users.create": {
3503
+ "exams.duplicate": {
3375
3504
  parameters: {
3376
3505
  query?: never;
3377
3506
  header?: never;
3378
- path?: never;
3507
+ path: {
3508
+ id: string;
3509
+ };
3379
3510
  cookie?: never;
3380
3511
  };
3381
3512
  requestBody?: {
3382
3513
  content: {
3383
3514
  "application/json": {
3384
- /** Format: email */
3385
- email: string;
3386
- name?: string;
3387
- /**
3388
- * @default teacher
3389
- * @enum {string}
3390
- */
3391
- role?: "owner" | "admin" | "teacher" | "student" | "member";
3392
- /**
3393
- * @description Whether to send an invitation email. Defaults to false.
3394
- * @default false
3395
- */
3396
- sendInvite?: boolean;
3515
+ name: string;
3516
+ includeSessions?: boolean;
3397
3517
  };
3398
3518
  };
3399
3519
  };
3400
3520
  responses: never;
3401
3521
  };
3402
- "users.delete": {
3522
+ "exams.print": {
3403
3523
  parameters: {
3404
3524
  query?: never;
3405
3525
  header?: never;
@@ -3411,7 +3531,7 @@ interface operations {
3411
3531
  requestBody?: never;
3412
3532
  responses: never;
3413
3533
  };
3414
- "users.update": {
3534
+ "exams.startGeneration": {
3415
3535
  parameters: {
3416
3536
  query?: never;
3417
3537
  header?: never;
@@ -3423,7 +3543,7 @@ interface operations {
3423
3543
  requestBody?: never;
3424
3544
  responses: never;
3425
3545
  };
3426
- "exams.sessions.list": {
3546
+ "exams.cancelGeneration": {
3427
3547
  parameters: {
3428
3548
  query?: never;
3429
3549
  header?: never;
@@ -3435,7 +3555,7 @@ interface operations {
3435
3555
  requestBody?: never;
3436
3556
  responses: never;
3437
3557
  };
3438
- "exams.sessions.import": {
3558
+ "exams.getContextSuggestions": {
3439
3559
  parameters: {
3440
3560
  query?: never;
3441
3561
  header?: never;
@@ -3444,236 +3564,245 @@ interface operations {
3444
3564
  };
3445
3565
  cookie?: never;
3446
3566
  };
3447
- requestBody?: {
3448
- content: {
3449
- "application/json": {
3450
- studentName: string;
3451
- /**
3452
- * @default manual
3453
- * @enum {string}
3454
- */
3455
- source?: "online-assessment" | "document-scanner" | "answer-bot" | "manual";
3456
- answers?: {
3457
- question: string;
3458
- value?: (string | (string | null)[]) | null;
3459
- completed?: boolean | null;
3460
- context?: unknown | null;
3461
- pointsAwarded?: number | null;
3462
- pointsToEarn?: number | null;
3463
- feedback?: string | null;
3464
- scoringCriteria?: unknown | null;
3465
- /** Format: date-time */
3466
- savedAt?: string;
3467
- gradedAt?: string | null;
3468
- gradedBy?: string | null;
3469
- gradingStatus?: ("graded" | "auto-graded") | null;
3470
- originalValue?: (string | (string | null)[]) | null;
3471
- editedBy?: string | null;
3472
- editedAt?: string | null;
3473
- masteryTopicId?: string | null;
3474
- traceIds?: string[] | null;
3475
- }[];
3476
- };
3477
- };
3478
- };
3567
+ requestBody?: never;
3479
3568
  responses: never;
3480
3569
  };
3481
- "exams.sessions.scan": {
3570
+ "me.get": {
3482
3571
  parameters: {
3483
3572
  query?: never;
3484
3573
  header?: never;
3485
- path: {
3486
- id: string;
3487
- };
3574
+ path?: never;
3488
3575
  cookie?: never;
3489
3576
  };
3490
3577
  requestBody?: never;
3491
3578
  responses: never;
3492
3579
  };
3493
- "exams.sessions.scanDocument": {
3580
+ "me.update": {
3494
3581
  parameters: {
3495
3582
  query?: never;
3496
3583
  header?: never;
3497
- path: {
3498
- id: string;
3499
- };
3584
+ path?: never;
3500
3585
  cookie?: never;
3501
3586
  };
3502
3587
  requestBody?: {
3503
3588
  content: {
3504
3589
  "application/json": {
3505
- /** Format: uri */
3506
- documentUrl: string;
3590
+ /** @description The user's name */
3591
+ name?: string;
3592
+ /** @description A map of user preferences */
3593
+ preferences?: {
3594
+ [key: string]: unknown;
3595
+ };
3507
3596
  };
3508
3597
  };
3509
3598
  };
3510
3599
  responses: never;
3511
3600
  };
3512
- "exams.sessions.get": {
3601
+ "media.upload": {
3513
3602
  parameters: {
3514
- query?: never;
3603
+ query?: {
3604
+ /** @description Original attachment filename */
3605
+ filename?: string;
3606
+ /** @description Category of file, used for grouping */
3607
+ type?: string;
3608
+ /** @description MIME type of the attachment */
3609
+ contentType?: string;
3610
+ };
3515
3611
  header?: never;
3516
- path: {
3517
- id: string;
3518
- sessionId: string;
3612
+ path?: never;
3613
+ cookie?: never;
3614
+ };
3615
+ requestBody?: never;
3616
+ responses: {
3617
+ 200: {
3618
+ headers: {
3619
+ [name: string]: unknown;
3620
+ };
3621
+ content: {
3622
+ "application/json": {
3623
+ /** Format: uri */
3624
+ uploadUrl?: string;
3625
+ /** Format: uri */
3626
+ publicUrl?: string;
3627
+ };
3628
+ };
3519
3629
  };
3630
+ };
3631
+ };
3632
+ "org.get": {
3633
+ parameters: {
3634
+ query?: never;
3635
+ header?: never;
3636
+ path?: never;
3520
3637
  cookie?: never;
3521
3638
  };
3522
3639
  requestBody?: never;
3523
3640
  responses: never;
3524
3641
  };
3525
- "exams.sessions.delete": {
3642
+ "org.delete": {
3526
3643
  parameters: {
3527
3644
  query?: never;
3528
3645
  header?: never;
3529
- path: {
3530
- id: string;
3531
- sessionId: string;
3532
- };
3646
+ path?: never;
3533
3647
  cookie?: never;
3534
3648
  };
3535
3649
  requestBody?: never;
3536
3650
  responses: never;
3537
3651
  };
3538
- "exams.sessions.saveFeedback": {
3652
+ "org.update": {
3539
3653
  parameters: {
3540
3654
  query?: never;
3541
3655
  header?: never;
3542
- path: {
3543
- id: string;
3544
- sessionId: string;
3545
- };
3656
+ path?: never;
3546
3657
  cookie?: never;
3547
3658
  };
3548
3659
  requestBody?: {
3549
3660
  content: {
3550
3661
  "application/json": {
3551
- /** @description Question ID to provide feedback for */
3552
- question: string;
3553
- /** @description Points to award for the answer */
3554
- pointsAwarded?: number;
3555
- /** @description Optional teacher feedback for the answer */
3556
- feedback?: string;
3662
+ name?: string;
3663
+ /** Format: uri */
3664
+ logoImageUrl?: string;
3665
+ menuColor?: string;
3666
+ accentColor?: string;
3667
+ sharingBlockPublic?: boolean;
3668
+ settings?: {
3669
+ /** @description Whether users can only see other users in the same groups as them. */
3670
+ restrictGroupVisibility?: boolean;
3671
+ /** @description Whether the organization blocks public link sharing. */
3672
+ sharingBlockPublic?: boolean;
3673
+ /** @description Whether the organization blocks teachers from inviting new users. */
3674
+ sharingBlockTeachersInvitingUsers?: boolean;
3675
+ };
3557
3676
  };
3558
3677
  };
3559
3678
  };
3560
3679
  responses: never;
3561
3680
  };
3562
- "exams.sessions.saveOverallFeedback": {
3681
+ "org.customDomain.get": {
3563
3682
  parameters: {
3564
3683
  query?: never;
3565
3684
  header?: never;
3566
- path: {
3567
- id: string;
3568
- sessionId: string;
3569
- };
3685
+ path?: never;
3686
+ cookie?: never;
3687
+ };
3688
+ requestBody?: never;
3689
+ responses: never;
3690
+ };
3691
+ "org.customDomain.update": {
3692
+ parameters: {
3693
+ query?: never;
3694
+ header?: never;
3695
+ path?: never;
3570
3696
  cookie?: never;
3571
3697
  };
3572
3698
  requestBody?: {
3573
3699
  content: {
3574
3700
  "application/json": {
3575
- /** @description Teacher feedback for the test as a whole */
3576
- feedback?: string | null;
3701
+ customDomain?: string | null;
3577
3702
  };
3578
3703
  };
3579
3704
  };
3580
3705
  responses: never;
3581
3706
  };
3582
- "exams.sessions.generateOverallFeedback": {
3707
+ "orgs.list": {
3583
3708
  parameters: {
3584
3709
  query?: never;
3585
3710
  header?: never;
3586
- path: {
3587
- id: string;
3588
- sessionId: string;
3589
- };
3711
+ path?: never;
3590
3712
  cookie?: never;
3591
3713
  };
3592
3714
  requestBody?: never;
3593
3715
  responses: never;
3594
3716
  };
3595
- "exams.sessions.acceptAllSuggestions": {
3717
+ "orgs.create": {
3596
3718
  parameters: {
3597
3719
  query?: never;
3598
3720
  header?: never;
3599
- path: {
3600
- id: string;
3601
- sessionId: string;
3721
+ path?: never;
3722
+ cookie?: never;
3723
+ };
3724
+ requestBody?: {
3725
+ content: {
3726
+ "application/json": {
3727
+ name: string;
3728
+ };
3602
3729
  };
3730
+ };
3731
+ responses: never;
3732
+ };
3733
+ "apiKeys.get": {
3734
+ parameters: {
3735
+ query?: never;
3736
+ header?: never;
3737
+ path?: never;
3603
3738
  cookie?: never;
3604
3739
  };
3605
3740
  requestBody?: never;
3606
3741
  responses: never;
3607
3742
  };
3608
- "exams.sessions.acceptSuggestion": {
3743
+ "apiKeys.reset": {
3609
3744
  parameters: {
3610
3745
  query?: never;
3611
3746
  header?: never;
3612
- path: {
3613
- id: string;
3614
- sessionId: string;
3615
- questionId: string;
3616
- };
3747
+ path?: never;
3617
3748
  cookie?: never;
3618
3749
  };
3619
3750
  requestBody?: never;
3620
3751
  responses: never;
3621
3752
  };
3622
- "exams.sessions.editAnswer": {
3753
+ "attributes.list": {
3623
3754
  parameters: {
3624
3755
  query?: never;
3625
3756
  header?: never;
3626
- path: {
3627
- id: string;
3628
- sessionId: string;
3629
- questionId: string;
3630
- };
3757
+ path?: never;
3758
+ cookie?: never;
3759
+ };
3760
+ requestBody?: never;
3761
+ responses: never;
3762
+ };
3763
+ "attributes.create": {
3764
+ parameters: {
3765
+ query?: never;
3766
+ header?: never;
3767
+ path?: never;
3631
3768
  cookie?: never;
3632
3769
  };
3633
3770
  requestBody?: {
3634
3771
  content: {
3635
3772
  "application/json": {
3636
- answer: {
3637
- question: string;
3638
- value?: (string | (string | null)[]) | null;
3639
- completed?: boolean | null;
3640
- context?: unknown | null;
3641
- };
3642
- /** @description Whether to automatically grade the answer after editing */
3643
- autoGrade?: boolean;
3773
+ name: string;
3774
+ /** @enum {string} */
3775
+ attributeType: "string" | "category" | "studentLevel" | "subject";
3776
+ options?: string[];
3777
+ showInStudentDashboard?: boolean;
3778
+ showAsStudentPreference?: boolean;
3779
+ position?: number;
3780
+ appearanceColor?: (string) | null;
3644
3781
  };
3645
3782
  };
3646
3783
  };
3647
3784
  responses: never;
3648
3785
  };
3649
- "exams.questions.import": {
3786
+ "attributes.reorder": {
3650
3787
  parameters: {
3651
3788
  query?: never;
3652
3789
  header?: never;
3653
- path: {
3654
- id: string;
3655
- };
3790
+ path?: never;
3656
3791
  cookie?: never;
3657
3792
  };
3658
3793
  requestBody?: {
3659
3794
  content: {
3660
3795
  "application/json": {
3661
- /** @description File name */
3662
- name?: string;
3663
- /** @description MIME type of the file, e.g. application/pdf */
3664
- type?: string;
3665
- /** @description URL of the file, required if no content is specified. */
3666
- url?: string;
3667
- /** @description Content of the file as a string, as an alternative to URL. Only supported for exports from other systems (e.g. Moodle XML). */
3668
- content?: string;
3669
- /** @description Whether to keep existing exam settings when importing questions via AI. */
3670
- keepExistingSettings?: boolean;
3796
+ order: {
3797
+ id: string;
3798
+ position: number;
3799
+ }[];
3671
3800
  };
3672
3801
  };
3673
3802
  };
3674
3803
  responses: never;
3675
3804
  };
3676
- "exams.questions.generate": {
3805
+ "attributes.update": {
3677
3806
  parameters: {
3678
3807
  query?: never;
3679
3808
  header?: never;
@@ -3685,51 +3814,90 @@ interface operations {
3685
3814
  requestBody?: {
3686
3815
  content: {
3687
3816
  "application/json": {
3688
- message: string;
3689
- questionType?: string;
3817
+ name?: string;
3818
+ /** @enum {string} */
3819
+ attributeType?: "string" | "category" | "studentLevel" | "subject";
3820
+ options?: string[];
3821
+ showInStudentDashboard?: boolean;
3822
+ showAsStudentPreference?: boolean;
3823
+ position?: number;
3824
+ appearanceColor?: (string) | null;
3690
3825
  };
3691
3826
  };
3692
3827
  };
3693
3828
  responses: never;
3694
3829
  };
3695
- "exams.questions.get": {
3830
+ "attributes.delete": {
3696
3831
  parameters: {
3697
- query?: {
3698
- /** @description The format to return the question in. `examplary_json` returns the question in the Examplary JSON format, while `qti_v3p0` and `qti_v2p1` return the question in QTI format version 3 and 2.1 respectively. */
3699
- format?: "examplary_json" | "qti_v3p0" | "qti_v2p1";
3700
- };
3832
+ query?: never;
3701
3833
  header?: never;
3702
3834
  path: {
3703
- /** @description Exam ID, e.g. `exam_1234`. */
3704
3835
  id: string;
3705
- /** @description Question ID, e.g. `question_1234`, or `first` to get the first question. */
3706
- questionId: string;
3707
3836
  };
3708
3837
  cookie?: never;
3709
3838
  };
3710
3839
  requestBody?: never;
3711
3840
  responses: never;
3712
3841
  };
3713
- "exams.questions.regenerate": {
3842
+ "taxonomies.list": {
3843
+ parameters: {
3844
+ query?: never;
3845
+ header?: never;
3846
+ path?: never;
3847
+ cookie?: never;
3848
+ };
3849
+ requestBody?: never;
3850
+ responses: never;
3851
+ };
3852
+ "taxonomies.create": {
3853
+ parameters: {
3854
+ query?: never;
3855
+ header?: never;
3856
+ path?: never;
3857
+ cookie?: never;
3858
+ };
3859
+ requestBody?: {
3860
+ content: {
3861
+ "application/json": {
3862
+ name: string;
3863
+ description?: string;
3864
+ instructions?: string;
3865
+ levels: {
3866
+ name?: string;
3867
+ instructions?: string;
3868
+ }[];
3869
+ };
3870
+ };
3871
+ };
3872
+ responses: never;
3873
+ };
3874
+ "taxonomies.update": {
3714
3875
  parameters: {
3715
3876
  query?: never;
3716
3877
  header?: never;
3717
3878
  path: {
3718
3879
  id: string;
3719
- questionId: string;
3720
3880
  };
3721
3881
  cookie?: never;
3722
3882
  };
3723
3883
  requestBody?: {
3724
3884
  content: {
3725
3885
  "application/json": {
3726
- message: string;
3886
+ name: string;
3887
+ description?: string;
3888
+ instructions?: string;
3889
+ levels: {
3890
+ name?: string;
3891
+ instructions?: string;
3892
+ }[];
3893
+ } & {
3894
+ [key: string]: unknown;
3727
3895
  };
3728
3896
  };
3729
3897
  };
3730
3898
  responses: never;
3731
3899
  };
3732
- "exams.export.qti3Zip": {
3900
+ "taxonomies.delete": {
3733
3901
  parameters: {
3734
3902
  query?: never;
3735
3903
  header?: never;
@@ -3739,267 +3907,290 @@ interface operations {
3739
3907
  cookie?: never;
3740
3908
  };
3741
3909
  requestBody?: never;
3910
+ responses: never;
3911
+ };
3912
+ "permissions.autocomplete": {
3913
+ parameters: {
3914
+ query: {
3915
+ /** @description Search query (min 3 characters) */
3916
+ q: string;
3917
+ /** @description Type of entity to search */
3918
+ type?: "user" | "group";
3919
+ };
3920
+ header?: never;
3921
+ path?: never;
3922
+ cookie?: never;
3923
+ };
3924
+ requestBody?: never;
3742
3925
  responses: {
3743
- /** @description URL to download the exported QTI ZIP package. */
3926
+ /** @description List of matching users and groups. */
3744
3927
  200: {
3745
3928
  headers: {
3746
3929
  [name: string]: unknown;
3747
3930
  };
3748
- content: {
3749
- "application/json": {
3750
- /**
3751
- * Format: uri
3752
- * @description URL to download the exported QTI ZIP package.
3753
- */
3754
- url: string;
3755
- };
3931
+ content?: never;
3932
+ };
3933
+ /** @description Query must be at least 3 characters. */
3934
+ 400: {
3935
+ headers: {
3936
+ [name: string]: unknown;
3756
3937
  };
3938
+ content?: never;
3757
3939
  };
3758
3940
  };
3759
3941
  };
3760
- "exams.export.qti21Zip": {
3942
+ "permissions.list": {
3761
3943
  parameters: {
3762
3944
  query?: never;
3763
3945
  header?: never;
3764
3946
  path: {
3765
- id: string;
3947
+ /** @description The ID of the resource to list permissions for, e.g. `exam_1234`. */
3948
+ resource: string;
3766
3949
  };
3767
3950
  cookie?: never;
3768
3951
  };
3769
3952
  requestBody?: never;
3770
3953
  responses: {
3771
- /** @description URL to download the exported QTI ZIP package. */
3954
+ /** @description List of permissions for the specified resource. */
3772
3955
  200: {
3773
3956
  headers: {
3774
3957
  [name: string]: unknown;
3775
3958
  };
3776
3959
  content: {
3777
3960
  "application/json": {
3778
- /**
3779
- * Format: uri
3780
- * @description URL to download the exported QTI ZIP package.
3781
- */
3782
- url: string;
3783
- };
3784
- };
3785
- };
3786
- };
3787
- };
3788
- "exams.list": {
3789
- parameters: {
3790
- query?: {
3791
- /** @description Optional filter by folder ID, e.g. `folder_1234`. */
3792
- folder?: string;
3793
- /** @description Optional filter by permission role. */
3794
- role?: "owner" | "manager" | "editor" | "viewer" | "participant";
3795
- };
3796
- header?: never;
3797
- path?: never;
3798
- cookie?: never;
3799
- };
3800
- requestBody?: never;
3801
- responses: never;
3802
- };
3803
- "exams.create": {
3804
- parameters: {
3805
- query?: never;
3806
- header?: never;
3807
- path?: never;
3808
- cookie?: never;
3809
- };
3810
- requestBody?: {
3811
- content: {
3812
- "application/json": {
3813
- name: string;
3814
- sourceMaterialIds?: string[] | null;
3815
- context?: string | null;
3816
- studentLevel?: string | null;
3817
- subject?: string | null;
3818
- language?: string | null;
3819
- taxonomyId?: string | null;
3820
- intendedDuration?: unknown | null;
3821
- allowedGenerationQuestionTypes?: string[] | null;
3822
- metadata?: {
3823
- [key: string]: string | number | boolean | null;
3824
- } | null;
3825
- questions?: ({
3826
- /** @description Question ID */
3827
- id?: string;
3828
- /** @description ID of the question type */
3829
- type?: string;
3830
- /** @description Title for the question (stem) */
3831
- title?: string | null;
3832
- /** @description Optional description for the question */
3833
- description?: string | null;
3834
- /** @description Settings for the question, often specific to the question type */
3835
- settings?: {
3836
- [key: string]: unknown;
3837
- };
3838
- /** @description Scoring configuration for the question */
3839
- scoring?: {
3840
- /** @description The type of rubric. Different rubric types have different shapes. */
3841
- rubricType?: ("simple" | "analytical" | "holistic" | "exact-values") | null;
3842
- /** @description The criteria for scoring the question. For 'simple' rubric type, criteria have no levels, and their points stack (total = sum of points for all criteria that apply). For 'analytical' rubric type, there should be at least one criteria, with levels. For each criteria, a matching level is picked. For 'holistic' rubric type, there should be multiple criteria, without levels (score = single selected criteria). For 'exact-values' rubric type, each criteria represents a specific value that must be matched exactly. */
3843
- criteria?: {
3844
- id: string;
3845
- /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3846
- title?: string | null;
3847
- /** @description The description of the scoring criterion or level. For analytical levels, this describes the specific requirements to earn the points for that level. For holistic criteria, this describes the overall requirement to earn the points for that criterion. */
3848
- description?: string | null;
3849
- /** @description The default amount of points to assign if this criterion or level is selected. */
3850
- points?: number | null;
3851
- /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3852
- minPoints?: number | null;
3853
- /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3854
- maxPoints?: number | null;
3855
- /** @description The levels of a analytical rubric criterion. Each level represents a different point value and description for the same criterion. */
3856
- levels?: {
3857
- id: string;
3858
- /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3859
- title?: string | null;
3860
- /** @description The description of the scoring criterion or level. For analytical levels, this describes the specific requirements to earn the points for that level. For holistic criteria, this describes the overall requirement to earn the points for that criterion. */
3861
- description?: string | null;
3862
- /** @description The default amount of points to assign if this criterion or level is selected. */
3863
- points?: number | null;
3864
- /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3865
- minPoints?: number | null;
3866
- /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3867
- maxPoints?: number | null;
3868
- }[] | null;
3869
- }[] | null;
3870
- /** @description Whether exact values matching should be case insensitive. Only applicable for 'exact-values' rubric type. */
3871
- exactValuesCaseInsensitive?: boolean | null;
3872
- /** @description Optional additional grading guidance text. */
3873
- guidance?: string | null;
3874
- /** @description Optional example model answer text to show to graders. */
3875
- modelAnswer?: string | null;
3876
- /** @description The ID of the scoring template applied, if any. */
3877
- templateId?: string | null;
3878
- } | null;
3879
- /** @description Tags associated with the question for categorization and search */
3880
- tags?: string[] | null;
3881
- /** @description Optional external ID for the question, used to link to external systems */
3882
- externalId?: string | null;
3883
- /** @description Metadata for the question */
3884
- metadata?: {
3885
- [key: string]: string | number | boolean | null;
3886
- } | null;
3887
- /** @description Version number, incremented when question is edited */
3888
- v?: number | null;
3889
- /** @description ID of the question in the question bank */
3890
- questionBankItemId?: string | null;
3891
- /** @description Trace IDs for internal tracking of AI generation processes */
3892
- traceIds?: string[] | null;
3893
- } & {
3894
- [key: string]: unknown;
3895
- })[] | null;
3896
- permissions?: {
3897
- actor: string;
3961
+ actor: {
3962
+ id: string;
3963
+ name?: string;
3964
+ /** Format: uri */
3965
+ avatar?: string;
3966
+ /** @enum {string} */
3967
+ type: "user" | "group" | "org";
3968
+ /** @enum {string} */
3969
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
3970
+ };
3898
3971
  /** @enum {string} */
3899
3972
  role: "owner" | "manager" | "editor" | "viewer" | "participant";
3900
- }[] | null;
3973
+ /** Format: date-time */
3974
+ createdAt: string;
3975
+ /** Format: date-time */
3976
+ updatedAt: string;
3977
+ createdBy: string;
3978
+ }[];
3901
3979
  };
3902
3980
  };
3981
+ /** @description No access to this resource. */
3982
+ 403: {
3983
+ headers: {
3984
+ [name: string]: unknown;
3985
+ };
3986
+ content?: never;
3987
+ };
3903
3988
  };
3904
- responses: never;
3905
3989
  };
3906
- "exams.import": {
3990
+ "permissions.assign": {
3907
3991
  parameters: {
3908
3992
  query?: never;
3909
3993
  header?: never;
3910
- path?: never;
3994
+ path: {
3995
+ /** @description The ID of the resource to assign the permission on, e.g. `exam_1234`. */
3996
+ resource: string;
3997
+ };
3911
3998
  cookie?: never;
3912
3999
  };
3913
4000
  requestBody?: {
3914
4001
  content: {
3915
4002
  "application/json": {
3916
- name: string;
3917
- sourceMaterialIds?: string[];
4003
+ /** @description The ID of the actor to assign the permission to, e.g. `user_1234`, `group_1234` or `org_1234`. */
4004
+ actor: string;
4005
+ /** @enum {string} */
4006
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4007
+ } | {
4008
+ /**
4009
+ * Format: email
4010
+ * @description The email of the user to add or invite.
4011
+ */
4012
+ email: string;
4013
+ /** @enum {string} */
4014
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4015
+ /**
4016
+ * @description Whether to send an invitation email if the user does not exist. Defaults to false.
4017
+ * @default false
4018
+ */
4019
+ sendInvite?: boolean;
3918
4020
  };
3919
4021
  };
3920
4022
  };
3921
- responses: never;
3922
- };
3923
- "exams.get": {
3924
- parameters: {
3925
- query?: never;
3926
- header?: never;
3927
- path: {
3928
- id: string;
4023
+ responses: {
4024
+ /** @description The created or updated permission. */
4025
+ 201: {
4026
+ headers: {
4027
+ [name: string]: unknown;
4028
+ };
4029
+ content: {
4030
+ "application/json": {
4031
+ actor: {
4032
+ id: string;
4033
+ name?: string;
4034
+ /** Format: uri */
4035
+ avatar?: string;
4036
+ /** @enum {string} */
4037
+ type: "user" | "group" | "org";
4038
+ /** @enum {string} */
4039
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
4040
+ };
4041
+ /** @enum {string} */
4042
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4043
+ /** Format: date-time */
4044
+ createdAt: string;
4045
+ /** Format: date-time */
4046
+ updatedAt: string;
4047
+ createdBy: string;
4048
+ };
4049
+ };
4050
+ };
4051
+ /** @description No access to manage this resource. */
4052
+ 403: {
4053
+ headers: {
4054
+ [name: string]: unknown;
4055
+ };
4056
+ content?: never;
3929
4057
  };
3930
- cookie?: never;
3931
4058
  };
3932
- requestBody?: never;
3933
- responses: never;
3934
4059
  };
3935
- "exams.update": {
4060
+ "permissions.getActorRole": {
3936
4061
  parameters: {
3937
4062
  query?: never;
3938
4063
  header?: never;
3939
4064
  path: {
3940
- id: string;
4065
+ /** @description The ID of the actor to check role for, e.g. `user_abcd`. */
4066
+ actor: ((string) | "me") | string;
4067
+ /** @description The ID of the resource to check role for, e.g. `exam_1234`. */
4068
+ resource: string;
3941
4069
  };
3942
4070
  cookie?: never;
3943
4071
  };
3944
4072
  requestBody?: never;
3945
- responses: never;
4073
+ responses: {
4074
+ /** @description Role of the specified actor for the specified resource. */
4075
+ 200: {
4076
+ headers: {
4077
+ [name: string]: unknown;
4078
+ };
4079
+ content: {
4080
+ "application/json": {
4081
+ actor: {
4082
+ id: string;
4083
+ name?: string;
4084
+ /** Format: uri */
4085
+ avatar?: string;
4086
+ /** @enum {string} */
4087
+ type: "user" | "group" | "org";
4088
+ /** @enum {string} */
4089
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
4090
+ };
4091
+ /** @enum {string} */
4092
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4093
+ /** Format: date-time */
4094
+ createdAt: string;
4095
+ /** Format: date-time */
4096
+ updatedAt: string;
4097
+ createdBy: string;
4098
+ };
4099
+ };
4100
+ };
4101
+ /** @description No access to this resource. */
4102
+ 403: {
4103
+ headers: {
4104
+ [name: string]: unknown;
4105
+ };
4106
+ content?: never;
4107
+ };
4108
+ /** @description The specified actor has no access to the specified resource. */
4109
+ 404: {
4110
+ headers: {
4111
+ [name: string]: unknown;
4112
+ };
4113
+ content?: never;
4114
+ };
4115
+ };
3946
4116
  };
3947
- "exams.delete": {
4117
+ "permissions.delete": {
3948
4118
  parameters: {
3949
4119
  query?: never;
3950
4120
  header?: never;
3951
4121
  path: {
3952
- id: string;
4122
+ resource: string;
4123
+ actor: (string) | string;
3953
4124
  };
3954
4125
  cookie?: never;
3955
4126
  };
3956
4127
  requestBody?: never;
3957
- responses: never;
4128
+ responses: {
4129
+ /** @description Permission successfully removed. */
4130
+ 200: {
4131
+ headers: {
4132
+ [name: string]: unknown;
4133
+ };
4134
+ content?: never;
4135
+ };
4136
+ /** @description No access to manage this resource. */
4137
+ 403: {
4138
+ headers: {
4139
+ [name: string]: unknown;
4140
+ };
4141
+ content?: never;
4142
+ };
4143
+ };
3958
4144
  };
3959
- "exams.duplicate": {
4145
+ "studentLevels.list": {
3960
4146
  parameters: {
3961
4147
  query?: never;
3962
4148
  header?: never;
3963
- path: {
3964
- id: string;
3965
- };
4149
+ path?: never;
3966
4150
  cookie?: never;
3967
4151
  };
3968
- requestBody?: {
3969
- content: {
3970
- "application/json": {
3971
- name: string;
3972
- includeSessions?: boolean;
3973
- };
3974
- };
3975
- };
4152
+ requestBody?: never;
3976
4153
  responses: never;
3977
4154
  };
3978
- "exams.print": {
4155
+ "users.list": {
3979
4156
  parameters: {
3980
4157
  query?: never;
3981
4158
  header?: never;
3982
- path: {
3983
- id: string;
3984
- };
4159
+ path?: never;
3985
4160
  cookie?: never;
3986
4161
  };
3987
4162
  requestBody?: never;
3988
4163
  responses: never;
3989
4164
  };
3990
- "exams.startGeneration": {
4165
+ "users.create": {
3991
4166
  parameters: {
3992
4167
  query?: never;
3993
4168
  header?: never;
3994
- path: {
3995
- id: string;
3996
- };
4169
+ path?: never;
3997
4170
  cookie?: never;
3998
4171
  };
3999
- requestBody?: never;
4172
+ requestBody?: {
4173
+ content: {
4174
+ "application/json": {
4175
+ /** Format: email */
4176
+ email: string;
4177
+ name?: string;
4178
+ /**
4179
+ * @default teacher
4180
+ * @enum {string}
4181
+ */
4182
+ role?: "owner" | "admin" | "teacher" | "student" | "member";
4183
+ /**
4184
+ * @description Whether to send an invitation email. Defaults to false.
4185
+ * @default false
4186
+ */
4187
+ sendInvite?: boolean;
4188
+ };
4189
+ };
4190
+ };
4000
4191
  responses: never;
4001
4192
  };
4002
- "exams.cancelGeneration": {
4193
+ "users.delete": {
4003
4194
  parameters: {
4004
4195
  query?: never;
4005
4196
  header?: never;
@@ -4011,7 +4202,7 @@ interface operations {
4011
4202
  requestBody?: never;
4012
4203
  responses: never;
4013
4204
  };
4014
- "exams.getContextSuggestions": {
4205
+ "users.update": {
4015
4206
  parameters: {
4016
4207
  query?: never;
4017
4208
  header?: never;
@@ -4434,6 +4625,18 @@ interface operations {
4434
4625
  } & {
4435
4626
  [key: string]: unknown;
4436
4627
  };
4628
+ externalId?: string;
4629
+ parentSourceMaterialId?: string;
4630
+ summary?: string;
4631
+ factsCount?: number;
4632
+ /** @enum {string} */
4633
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4634
+ numberOfPages?: number;
4635
+ chapterMarkers?: {
4636
+ title: string;
4637
+ startPage: number;
4638
+ endPage: number;
4639
+ }[];
4437
4640
  convertedSourceV2?: {
4438
4641
  /** Format: uri */
4439
4642
  url: string;
@@ -4456,20 +4659,8 @@ interface operations {
4456
4659
  } & {
4457
4660
  [key: string]: unknown;
4458
4661
  };
4459
- externalId?: string;
4460
- parentSourceMaterialId?: string;
4461
- cacheName?: string;
4462
- summary?: string;
4463
- factsCount?: number;
4464
- /** @enum {string} */
4465
- processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4466
- numberOfPages?: number;
4467
- chapterMarkers?: {
4468
- title: string;
4469
- startPage: number;
4470
- endPage: number;
4471
- }[];
4472
4662
  topics?: unknown;
4663
+ cacheName?: string;
4473
4664
  }[];
4474
4665
  };
4475
4666
  };
@@ -4528,6 +4719,18 @@ interface operations {
4528
4719
  } & {
4529
4720
  [key: string]: unknown;
4530
4721
  };
4722
+ externalId?: string;
4723
+ parentSourceMaterialId?: string;
4724
+ summary?: string;
4725
+ factsCount?: number;
4726
+ /** @enum {string} */
4727
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4728
+ numberOfPages?: number;
4729
+ chapterMarkers?: {
4730
+ title: string;
4731
+ startPage: number;
4732
+ endPage: number;
4733
+ }[];
4531
4734
  convertedSourceV2?: {
4532
4735
  /** Format: uri */
4533
4736
  url: string;
@@ -4550,20 +4753,8 @@ interface operations {
4550
4753
  } & {
4551
4754
  [key: string]: unknown;
4552
4755
  };
4553
- externalId?: string;
4554
- parentSourceMaterialId?: string;
4555
- cacheName?: string;
4556
- summary?: string;
4557
- factsCount?: number;
4558
- /** @enum {string} */
4559
- processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4560
- numberOfPages?: number;
4561
- chapterMarkers?: {
4562
- title: string;
4563
- startPage: number;
4564
- endPage: number;
4565
- }[];
4566
4756
  topics?: unknown;
4757
+ cacheName?: string;
4567
4758
  };
4568
4759
  };
4569
4760
  };
@@ -4608,6 +4799,18 @@ interface operations {
4608
4799
  } & {
4609
4800
  [key: string]: unknown;
4610
4801
  };
4802
+ externalId?: string;
4803
+ parentSourceMaterialId?: string;
4804
+ summary?: string;
4805
+ factsCount?: number;
4806
+ /** @enum {string} */
4807
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4808
+ numberOfPages?: number;
4809
+ chapterMarkers?: {
4810
+ title: string;
4811
+ startPage: number;
4812
+ endPage: number;
4813
+ }[];
4611
4814
  convertedSourceV2?: {
4612
4815
  /** Format: uri */
4613
4816
  url: string;
@@ -4630,20 +4833,8 @@ interface operations {
4630
4833
  } & {
4631
4834
  [key: string]: unknown;
4632
4835
  };
4633
- externalId?: string;
4634
- parentSourceMaterialId?: string;
4635
- cacheName?: string;
4636
- summary?: string;
4637
- factsCount?: number;
4638
- /** @enum {string} */
4639
- processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4640
- numberOfPages?: number;
4641
- chapterMarkers?: {
4642
- title: string;
4643
- startPage: number;
4644
- endPage: number;
4645
- }[];
4646
4836
  topics?: unknown;
4837
+ cacheName?: string;
4647
4838
  };
4648
4839
  };
4649
4840
  };
@@ -4730,6 +4921,18 @@ interface operations {
4730
4921
  } & {
4731
4922
  [key: string]: unknown;
4732
4923
  };
4924
+ externalId?: string;
4925
+ parentSourceMaterialId?: string;
4926
+ summary?: string;
4927
+ factsCount?: number;
4928
+ /** @enum {string} */
4929
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4930
+ numberOfPages?: number;
4931
+ chapterMarkers?: {
4932
+ title: string;
4933
+ startPage: number;
4934
+ endPage: number;
4935
+ }[];
4733
4936
  convertedSourceV2?: {
4734
4937
  /** Format: uri */
4735
4938
  url: string;
@@ -4752,20 +4955,8 @@ interface operations {
4752
4955
  } & {
4753
4956
  [key: string]: unknown;
4754
4957
  };
4755
- externalId?: string;
4756
- parentSourceMaterialId?: string;
4757
- cacheName?: string;
4758
- summary?: string;
4759
- factsCount?: number;
4760
- /** @enum {string} */
4761
- processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4762
- numberOfPages?: number;
4763
- chapterMarkers?: {
4764
- title: string;
4765
- startPage: number;
4766
- endPage: number;
4767
- }[];
4768
4958
  topics?: unknown;
4959
+ cacheName?: string;
4769
4960
  };
4770
4961
  };
4771
4962
  };
@@ -5528,38 +5719,6 @@ interface _PathOverrides {
5528
5719
  "embedSessions.revoke": {
5529
5720
  id: string;
5530
5721
  };
5531
- "attributes.update": {
5532
- id: string;
5533
- };
5534
- "attributes.delete": {
5535
- id: string;
5536
- };
5537
- "taxonomies.update": {
5538
- id: string;
5539
- };
5540
- "taxonomies.delete": {
5541
- id: string;
5542
- };
5543
- "permissions.list": {
5544
- resource: string;
5545
- };
5546
- "permissions.assign": {
5547
- resource: string;
5548
- };
5549
- "permissions.getActorRole": {
5550
- actor: string;
5551
- resource: string;
5552
- };
5553
- "permissions.delete": {
5554
- resource: string;
5555
- actor: string;
5556
- };
5557
- "users.update": {
5558
- id: string;
5559
- };
5560
- "users.delete": {
5561
- id: string;
5562
- };
5563
5722
  "exams.sessions.list": {
5564
5723
  examId: string;
5565
5724
  };
@@ -5606,6 +5765,24 @@ interface _PathOverrides {
5606
5765
  sessionId: string;
5607
5766
  questionId: string;
5608
5767
  };
5768
+ "exams.sessions.comments.list": {
5769
+ examId: string;
5770
+ sessionId: string;
5771
+ };
5772
+ "exams.sessions.comments.create": {
5773
+ examId: string;
5774
+ sessionId: string;
5775
+ };
5776
+ "exams.sessions.comments.update": {
5777
+ examId: string;
5778
+ sessionId: string;
5779
+ commentId: string;
5780
+ };
5781
+ "exams.sessions.comments.delete": {
5782
+ examId: string;
5783
+ sessionId: string;
5784
+ commentId: string;
5785
+ };
5609
5786
  "exams.questions.import": {
5610
5787
  examId: string;
5611
5788
  };
@@ -5650,6 +5827,38 @@ interface _PathOverrides {
5650
5827
  "exams.getContextSuggestions": {
5651
5828
  examId: string;
5652
5829
  };
5830
+ "attributes.update": {
5831
+ id: string;
5832
+ };
5833
+ "attributes.delete": {
5834
+ id: string;
5835
+ };
5836
+ "taxonomies.update": {
5837
+ id: string;
5838
+ };
5839
+ "taxonomies.delete": {
5840
+ id: string;
5841
+ };
5842
+ "permissions.list": {
5843
+ resource: string;
5844
+ };
5845
+ "permissions.assign": {
5846
+ resource: string;
5847
+ };
5848
+ "permissions.getActorRole": {
5849
+ actor: string;
5850
+ resource: string;
5851
+ };
5852
+ "permissions.delete": {
5853
+ resource: string;
5854
+ actor: string;
5855
+ };
5856
+ "users.update": {
5857
+ id: string;
5858
+ };
5859
+ "users.delete": {
5860
+ id: string;
5861
+ };
5653
5862
  "practiceSpaces.get": {
5654
5863
  id: string;
5655
5864
  };
@@ -6017,553 +6226,590 @@ declare class EmbedSessions {
6017
6226
  revoke(id: string, options?: ExamplaryRequestOptions): Promise<Response<"embedSessions.revoke">>;
6018
6227
  revoke(args: Args<"embedSessions.revoke">, options?: ExamplaryRequestOptions): Promise<Response<"embedSessions.revoke">>;
6019
6228
  }
6020
- declare class Me {
6229
+ declare class ExamsSessionsComments {
6021
6230
  private readonly ctx;
6022
6231
  constructor(ctx: ClientContext);
6023
6232
  /**
6024
- * Get me
6233
+ * List session comments
6025
6234
  *
6026
- * Get the current user's account details.
6235
+ * Get a list of all comments left on a student's assessment session.
6027
6236
  *
6028
- * API endpoint: `GET /me`
6237
+ * API endpoint: `GET /exams/{examId}/sessions/{sessionId}/comments`
6029
6238
  */
6030
- get(args?: Args<"me.get">, options?: ExamplaryRequestOptions): Promise<Response<"me.get">>;
6239
+ list(args: Args<"exams.sessions.comments.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.list">>;
6031
6240
  /**
6032
- * Update me
6241
+ * Create session comment
6033
6242
  *
6034
- * Update the current user's account details.
6243
+ * Add a new comment to a question in a student's assessment session.
6035
6244
  *
6036
- * API endpoint: `PATCH /me`
6245
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/comments`
6037
6246
  */
6038
- update(args?: Args<"me.update">, options?: ExamplaryRequestOptions): Promise<Response<"me.update">>;
6039
- }
6040
- declare class Media {
6041
- private readonly ctx;
6042
- constructor(ctx: ClientContext);
6247
+ create(args: Args<"exams.sessions.comments.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.create">>;
6043
6248
  /**
6044
- * Get file upload URL
6249
+ * Update session comment
6045
6250
  *
6046
- * Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
6251
+ * Edit the body of an existing session comment.
6047
6252
  *
6048
- * API endpoint: `GET /media/upload`
6253
+ * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/comments/{commentId}`
6049
6254
  */
6050
- upload(args: Args$1, options?: ExamplaryRequestOptions): Promise<Response$1>;
6255
+ update(args: Args<"exams.sessions.comments.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.update">>;
6256
+ /**
6257
+ * Delete session comment
6258
+ *
6259
+ * Remove a comment from a session.
6260
+ *
6261
+ * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}/comments/{commentId}`
6262
+ */
6263
+ delete(args: Args<"exams.sessions.comments.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.delete">>;
6051
6264
  }
6052
- declare class OrgCustomDomain {
6265
+ declare class ExamsSessions {
6053
6266
  private readonly ctx;
6267
+ readonly comments: ExamsSessionsComments;
6054
6268
  constructor(ctx: ClientContext);
6055
6269
  /**
6056
- * Get custom domain configuration
6270
+ * List exam sessions
6057
6271
  *
6058
- * API endpoint: `GET /org/custom-domain`
6272
+ * Get a list of all student sessions for an exam, representing a set of answers from a student.
6273
+ *
6274
+ * API endpoint: `GET /exams/{examId}/sessions`
6059
6275
  */
6060
- get(args?: Args<"org.customDomain.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.get">>;
6276
+ list(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6277
+ list(args: Args<"exams.sessions.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6061
6278
  /**
6062
- * Update custom domain configuration
6279
+ * Create session
6063
6280
  *
6064
- * API endpoint: `POST /org/custom-domain`
6281
+ * Manually create a session, possibly from uploaded data.
6282
+ *
6283
+ * API endpoint: `POST /exams/{examId}/sessions`
6065
6284
  */
6066
- update(args?: Args<"org.customDomain.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.update">>;
6067
- }
6068
- declare class Org {
6069
- private readonly ctx;
6070
- readonly customDomain: OrgCustomDomain;
6071
- constructor(ctx: ClientContext);
6285
+ import(args: Args<"exams.sessions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.import">>;
6072
6286
  /**
6073
- * Get organization
6287
+ * Get answers from scan
6074
6288
  *
6075
- * API endpoint: `GET /org`
6289
+ * Scan student answers from a document.
6290
+ *
6291
+ * API endpoint: `POST /exams/{examId}/sessions/scan`
6076
6292
  */
6077
- get(args?: Args<"org.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.get">>;
6293
+ scan(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6294
+ scan(args: Args<"exams.sessions.scan">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6078
6295
  /**
6079
- * Update organization
6296
+ * Scan document for student answers
6080
6297
  *
6081
- * API endpoint: `PATCH /org`
6298
+ * Start a background task to extract student answers from an uploaded PDF document.
6299
+ *
6300
+ * API endpoint: `POST /exams/{examId}/sessions/scan-document`
6082
6301
  */
6083
- update(args?: Args<"org.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.update">>;
6302
+ scanDocument(args: Args<"exams.sessions.scanDocument">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scanDocument">>;
6084
6303
  /**
6085
- * Delete organization
6304
+ * Get exam session
6086
6305
  *
6087
- * API endpoint: `DELETE /org`
6306
+ * Get a single exam session by its ID, representing a set of answers from a student.
6307
+ *
6308
+ * API endpoint: `GET /exams/{examId}/sessions/{sessionId}`
6088
6309
  */
6089
- delete(args?: Args<"org.delete">, options?: ExamplaryRequestOptions): Promise<Response<"org.delete">>;
6090
- }
6091
- declare class Orgs {
6092
- private readonly ctx;
6093
- constructor(ctx: ClientContext);
6310
+ get(args: Args<"exams.sessions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.get">>;
6094
6311
  /**
6095
- * List all organizations
6312
+ * Delete exam session
6096
6313
  *
6097
- * API endpoint: `GET /orgs`
6314
+ * Remove an exam session.
6315
+ *
6316
+ * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}`
6098
6317
  */
6099
- list(args?: Args<"orgs.list">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.list">>;
6318
+ delete(args: Args<"exams.sessions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.delete">>;
6100
6319
  /**
6101
- * Create a new organization
6320
+ * Provide feedback
6102
6321
  *
6103
- * Create a new workspace to collaborate with others on exams.
6322
+ * Set teacher feedback and/or a grade for a specific question in an exam session.
6104
6323
  *
6105
- * API endpoint: `POST /orgs`
6324
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/feedback`
6106
6325
  */
6107
- create(args?: Args<"orgs.create">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.create">>;
6108
- }
6109
- declare class ApiKeys {
6110
- private readonly ctx;
6111
- constructor(ctx: ClientContext);
6326
+ saveFeedback(args: Args<"exams.sessions.saveFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveFeedback">>;
6112
6327
  /**
6113
- * Get API key
6328
+ * Provide overall feedback
6114
6329
  *
6115
- * Get the API key for the current org/user combination. Creates one if none exists.
6330
+ * Set teacher feedback for the test as a whole in an exam session.
6116
6331
  *
6117
- * API endpoint: `GET /api-keys`
6332
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/overall-feedback`
6118
6333
  */
6119
- get(args?: Args<"apiKeys.get">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.get">>;
6334
+ saveOverallFeedback(args: Args<"exams.sessions.saveOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveOverallFeedback">>;
6120
6335
  /**
6121
- * Reset API key
6336
+ * Generate overall feedback
6122
6337
  *
6123
- * Invalidate old API keys for this org/user and create a new one.
6338
+ * Generate feedback for the test as a whole in an exam session.
6124
6339
  *
6125
- * API endpoint: `POST /api-keys/reset`
6340
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/generate-overall-feedback`
6126
6341
  */
6127
- reset(args?: Args<"apiKeys.reset">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.reset">>;
6128
- }
6129
- declare class Attributes {
6130
- private readonly ctx;
6131
- constructor(ctx: ClientContext);
6342
+ generateOverallFeedback(args: Args<"exams.sessions.generateOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.generateOverallFeedback">>;
6132
6343
  /**
6133
- * List attributes
6344
+ * Accept AI grading suggestions
6134
6345
  *
6135
- * Get all custom attributes configured for the current workspace.
6346
+ * Accept all AI-generated grading suggestions for the exam session.
6136
6347
  *
6137
- * API endpoint: `GET /attributes`
6348
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/accept-all`
6138
6349
  */
6139
- list(args?: Args<"attributes.list">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.list">>;
6350
+ acceptAllSuggestions(args: Args<"exams.sessions.acceptAllSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptAllSuggestions">>;
6140
6351
  /**
6141
- * Create attribute
6352
+ * Accept single AI grading suggestion
6142
6353
  *
6143
- * Create a new custom attribute in the current workspace.
6354
+ * Accept a single AI-generated grading suggestion for the exam session.
6144
6355
  *
6145
- * API endpoint: `POST /attributes`
6356
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/{questionId}/accept`
6146
6357
  */
6147
- create(args?: Args<"attributes.create">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.create">>;
6358
+ acceptSuggestion(args: Args<"exams.sessions.acceptSuggestion">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptSuggestion">>;
6148
6359
  /**
6149
- * Reorder attributes
6360
+ * Edit answer
6150
6361
  *
6151
- * Update the position of multiple attributes at once.
6362
+ * Edit a single answer in an exam session.
6152
6363
  *
6153
- * API endpoint: `POST /attributes/reorder`
6364
+ * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/answers/{questionId}`
6154
6365
  */
6155
- reorder(args?: Args<"attributes.reorder">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.reorder">>;
6366
+ editAnswer(args: Args<"exams.sessions.editAnswer">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.editAnswer">>;
6367
+ }
6368
+ declare class ExamsQuestions {
6369
+ private readonly ctx;
6370
+ constructor(ctx: ClientContext);
6156
6371
  /**
6157
- * Update attribute
6372
+ * Import questions
6158
6373
  *
6159
- * Update an existing attribute in the current workspace.
6374
+ * Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
6160
6375
  *
6161
- * API endpoint: `POST /attributes/{id}`
6376
+ * API endpoint: `POST /exams/{examId}/questions/import`
6162
6377
  */
6163
- update(args: Args<"attributes.update">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.update">>;
6378
+ import(args: Args<"exams.questions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.import">>;
6164
6379
  /**
6165
- * Delete attribute
6380
+ * Generate question
6166
6381
  *
6167
- * Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
6382
+ * Generate a new question for the exam using an AI prompt.
6168
6383
  *
6169
- * API endpoint: `DELETE /attributes/{id}`
6384
+ * API endpoint: `POST /exams/{examId}/questions/generate`
6170
6385
  */
6171
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6172
- delete(args: Args<"attributes.delete">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6173
- }
6174
- declare class Taxonomies {
6175
- private readonly ctx;
6176
- constructor(ctx: ClientContext);
6386
+ generate(args: Args<"exams.questions.generate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.generate">>;
6177
6387
  /**
6178
- * Get taxonomies
6388
+ * Get question
6179
6389
  *
6180
- * Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
6390
+ * Retrieve a question by its ID.
6181
6391
  *
6182
- * API endpoint: `GET /taxonomies`
6392
+ * API endpoint: `GET /exams/{examId}/questions/{questionId}`
6183
6393
  */
6184
- list(args?: Args<"taxonomies.list">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.list">>;
6394
+ get(args: Args<"exams.questions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.get">>;
6185
6395
  /**
6186
- * Create taxonomy
6396
+ * Regenerate question
6187
6397
  *
6188
- * Save a new taxonomy in the current workspace.
6398
+ * Update a question using an AI prompt.
6189
6399
  *
6190
- * API endpoint: `POST /taxonomies`
6400
+ * API endpoint: `POST /exams/{examId}/questions/{questionId}/generate`
6191
6401
  */
6192
- create(args?: Args<"taxonomies.create">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.create">>;
6402
+ regenerate(args: Args<"exams.questions.regenerate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.regenerate">>;
6403
+ }
6404
+ declare class ExamsExport {
6405
+ private readonly ctx;
6406
+ constructor(ctx: ClientContext);
6193
6407
  /**
6194
- * Update taxonomy
6408
+ * Export QTI 3 package
6195
6409
  *
6196
- * Update an existing taxonomy in the current workspace.
6410
+ * Export an exam as a QTI 3 ZIP package.
6197
6411
  *
6198
- * API endpoint: `POST /taxonomies/{id}`
6412
+ * API endpoint: `POST /exams/{examId}/export/qti3-zip`
6199
6413
  */
6200
- update(args: Args<"taxonomies.update">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.update">>;
6414
+ qti3Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6415
+ qti3Zip(args: Args<"exams.export.qti3Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6201
6416
  /**
6202
- * Delete taxonomy
6417
+ * Export QTI 2.1 package
6203
6418
  *
6204
- * Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
6419
+ * Export an exam as a QTI 2.1 ZIP package.
6205
6420
  *
6206
- * API endpoint: `DELETE /taxonomies/{id}`
6421
+ * API endpoint: `POST /exams/{examId}/export/qti21-zip`
6207
6422
  */
6208
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6209
- delete(args: Args<"taxonomies.delete">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6423
+ qti21Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6424
+ qti21Zip(args: Args<"exams.export.qti21Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6210
6425
  }
6211
- declare class Permissions {
6426
+ declare class Exams {
6212
6427
  private readonly ctx;
6428
+ readonly sessions: ExamsSessions;
6429
+ readonly questions: ExamsQuestions;
6430
+ readonly export: ExamsExport;
6213
6431
  constructor(ctx: ClientContext);
6214
6432
  /**
6215
- * Autocomplete users and groups
6433
+ * List exams
6216
6434
  *
6217
- * Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
6435
+ * Get a list of all exams within your workspace.
6218
6436
  *
6219
- * API endpoint: `GET /permissions/autocomplete`
6437
+ * API endpoint: `GET /exams`
6220
6438
  */
6221
- autocomplete(args: Args<"permissions.autocomplete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.autocomplete">>;
6439
+ list(args?: Args<"exams.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.list">>;
6222
6440
  /**
6223
- * Get sharing permissions
6441
+ * Create exam
6224
6442
  *
6225
- * Get a list of users, groups and orgs that have access to a specific resource.
6443
+ * Create a new exam within your workspace.
6226
6444
  *
6227
- * API endpoint: `GET /permissions/{resource}`
6445
+ * API endpoint: `POST /exams`
6228
6446
  */
6229
- list(resource: string, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6230
- list(args: Args<"permissions.list">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6447
+ create(args?: Args<"exams.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.create">>;
6231
6448
  /**
6232
- * Create permission
6449
+ * Import exam
6233
6450
  *
6234
- * Create a new permission for a specific resource, or update the role of an existing actor.
6451
+ * Create an exam by importing one or more source materials (e.g. an existing exam).
6235
6452
  *
6236
- * API endpoint: `POST /permissions/{resource}`
6453
+ * API endpoint: `POST /exams/import`
6237
6454
  */
6238
- assign(args: Args<"permissions.assign">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.assign">>;
6455
+ import(args?: Args<"exams.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.import">>;
6239
6456
  /**
6240
- * Get actor role
6457
+ * Get exam
6241
6458
  *
6242
- * Get the role of a specific actor for a specific resource.
6459
+ * Get a single exam by its ID.
6243
6460
  *
6244
- * API endpoint: `GET /permissions/{resource}/{actor}`
6461
+ * API endpoint: `GET /exams/{id}`
6245
6462
  */
6246
- getActorRole(args: Args<"permissions.getActorRole">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.getActorRole">>;
6463
+ get(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6464
+ get(args: Args<"exams.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6247
6465
  /**
6248
- * Remove permission
6466
+ * Update exam
6249
6467
  *
6250
- * Remove a permission for a specific actor on a specific resource.
6468
+ * Update an existing exam.
6251
6469
  *
6252
- * API endpoint: `DELETE /permissions/{resource}/{actor}`
6470
+ * API endpoint: `POST /exams/{id}`
6253
6471
  */
6254
- delete(args: Args<"permissions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.delete">>;
6255
- }
6256
- declare class StudentLevels {
6257
- private readonly ctx;
6258
- constructor(ctx: ClientContext);
6472
+ update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6473
+ update(args: Args<"exams.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6259
6474
  /**
6260
- * List available student levels
6475
+ * Delete exam
6261
6476
  *
6262
- * Get a list of available default student levels.
6477
+ * Delete the exam.
6263
6478
  *
6264
- * API endpoint: `GET /student-levels`
6479
+ * API endpoint: `DELETE /exams/{id}`
6265
6480
  */
6266
- list(args?: Args<"studentLevels.list">, options?: ExamplaryRequestOptions): Promise<Response<"studentLevels.list">>;
6267
- }
6268
- declare class Users {
6269
- private readonly ctx;
6270
- constructor(ctx: ClientContext);
6481
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6482
+ delete(args: Args<"exams.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6271
6483
  /**
6272
- * List users
6484
+ * Duplicate exam
6273
6485
  *
6274
- * Get a list of all users in the workspace.
6486
+ * Duplicate the exam's questions and settings to a new exam.
6275
6487
  *
6276
- * API endpoint: `GET /users`
6488
+ * API endpoint: `POST /exams/{examId}/duplicate`
6277
6489
  */
6278
- list(args?: Args<"users.list">, options?: ExamplaryRequestOptions): Promise<Response<"users.list">>;
6490
+ duplicate(args: Args<"exams.duplicate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.duplicate">>;
6279
6491
  /**
6280
- * Create user
6492
+ * Print exam
6281
6493
  *
6282
- * Create a new user in the workspace.
6494
+ * Export an exam to a PDF file or Word document.
6283
6495
  *
6284
- * API endpoint: `POST /users`
6496
+ * API endpoint: `POST /exams/{examId}/print`
6285
6497
  */
6286
- create(args?: Args<"users.create">, options?: ExamplaryRequestOptions): Promise<Response<"users.create">>;
6498
+ print(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6499
+ print(args: Args<"exams.print">, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6287
6500
  /**
6288
- * Update user role
6501
+ * Generate exam
6289
6502
  *
6290
- * Update a user's role within the workspace.
6503
+ * Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
6291
6504
  *
6292
- * API endpoint: `PATCH /users/{id}`
6505
+ * API endpoint: `POST /exams/{examId}/generate`
6293
6506
  */
6294
- update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6295
- update(args: Args<"users.update">, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6507
+ startGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6508
+ startGeneration(args: Args<"exams.startGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6296
6509
  /**
6297
- * Delete user
6510
+ * Cancel exam generation
6298
6511
  *
6299
- * Delete a user from the workspace.
6512
+ * Cancel an ongoing job to generate new questions for the exam using AI.
6300
6513
  *
6301
- * API endpoint: `DELETE /users/{id}`
6514
+ * API endpoint: `POST /exams/{examId}/generate/cancel`
6302
6515
  */
6303
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6304
- delete(args: Args<"users.delete">, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6516
+ cancelGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6517
+ cancelGeneration(args: Args<"exams.cancelGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6518
+ /**
6519
+ * Get exam context suggestions
6520
+ *
6521
+ * Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
6522
+ *
6523
+ * API endpoint: `GET /exams/{examId}/context-suggestions`
6524
+ */
6525
+ getContextSuggestions(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6526
+ getContextSuggestions(args: Args<"exams.getContextSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6305
6527
  }
6306
- declare class ExamsSessions {
6528
+ declare class Me {
6307
6529
  private readonly ctx;
6308
6530
  constructor(ctx: ClientContext);
6309
6531
  /**
6310
- * List exam sessions
6532
+ * Get me
6311
6533
  *
6312
- * Get a list of all student sessions for an exam, representing a set of answers from a student.
6534
+ * Get the current user's account details.
6313
6535
  *
6314
- * API endpoint: `GET /exams/{examId}/sessions`
6536
+ * API endpoint: `GET /me`
6315
6537
  */
6316
- list(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6317
- list(args: Args<"exams.sessions.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6538
+ get(args?: Args<"me.get">, options?: ExamplaryRequestOptions): Promise<Response<"me.get">>;
6318
6539
  /**
6319
- * Create session
6540
+ * Update me
6320
6541
  *
6321
- * Manually create a session, possibly from uploaded data.
6542
+ * Update the current user's account details.
6322
6543
  *
6323
- * API endpoint: `POST /exams/{examId}/sessions`
6544
+ * API endpoint: `PATCH /me`
6324
6545
  */
6325
- import(args: Args<"exams.sessions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.import">>;
6546
+ update(args?: Args<"me.update">, options?: ExamplaryRequestOptions): Promise<Response<"me.update">>;
6547
+ }
6548
+ declare class Media {
6549
+ private readonly ctx;
6550
+ constructor(ctx: ClientContext);
6326
6551
  /**
6327
- * Get answers from scan
6552
+ * Get file upload URL
6328
6553
  *
6329
- * Scan student answers from a document.
6554
+ * Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
6330
6555
  *
6331
- * API endpoint: `POST /exams/{examId}/sessions/scan`
6556
+ * API endpoint: `GET /media/upload`
6332
6557
  */
6333
- scan(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6334
- scan(args: Args<"exams.sessions.scan">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6558
+ upload(args: Args$1, options?: ExamplaryRequestOptions): Promise<Response$1>;
6559
+ }
6560
+ declare class OrgCustomDomain {
6561
+ private readonly ctx;
6562
+ constructor(ctx: ClientContext);
6335
6563
  /**
6336
- * Scan document for student answers
6337
- *
6338
- * Start a background task to extract student answers from an uploaded PDF document.
6564
+ * Get custom domain configuration
6339
6565
  *
6340
- * API endpoint: `POST /exams/{examId}/sessions/scan-document`
6566
+ * API endpoint: `GET /org/custom-domain`
6341
6567
  */
6342
- scanDocument(args: Args<"exams.sessions.scanDocument">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scanDocument">>;
6568
+ get(args?: Args<"org.customDomain.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.get">>;
6343
6569
  /**
6344
- * Get exam session
6345
- *
6346
- * Get a single exam session by its ID, representing a set of answers from a student.
6570
+ * Update custom domain configuration
6347
6571
  *
6348
- * API endpoint: `GET /exams/{examId}/sessions/{sessionId}`
6572
+ * API endpoint: `POST /org/custom-domain`
6349
6573
  */
6350
- get(args: Args<"exams.sessions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.get">>;
6574
+ update(args?: Args<"org.customDomain.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.update">>;
6575
+ }
6576
+ declare class Org {
6577
+ private readonly ctx;
6578
+ readonly customDomain: OrgCustomDomain;
6579
+ constructor(ctx: ClientContext);
6351
6580
  /**
6352
- * Delete exam session
6353
- *
6354
- * Remove an exam session.
6581
+ * Get organization
6355
6582
  *
6356
- * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}`
6583
+ * API endpoint: `GET /org`
6357
6584
  */
6358
- delete(args: Args<"exams.sessions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.delete">>;
6585
+ get(args?: Args<"org.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.get">>;
6359
6586
  /**
6360
- * Provide feedback
6361
- *
6362
- * Set teacher feedback and/or a grade for a specific question in an exam session.
6587
+ * Update organization
6363
6588
  *
6364
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/feedback`
6589
+ * API endpoint: `PATCH /org`
6365
6590
  */
6366
- saveFeedback(args: Args<"exams.sessions.saveFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveFeedback">>;
6591
+ update(args?: Args<"org.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.update">>;
6367
6592
  /**
6368
- * Provide overall feedback
6369
- *
6370
- * Set teacher feedback for the test as a whole in an exam session.
6593
+ * Delete organization
6371
6594
  *
6372
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/overall-feedback`
6595
+ * API endpoint: `DELETE /org`
6373
6596
  */
6374
- saveOverallFeedback(args: Args<"exams.sessions.saveOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveOverallFeedback">>;
6597
+ delete(args?: Args<"org.delete">, options?: ExamplaryRequestOptions): Promise<Response<"org.delete">>;
6598
+ }
6599
+ declare class Orgs {
6600
+ private readonly ctx;
6601
+ constructor(ctx: ClientContext);
6375
6602
  /**
6376
- * Generate overall feedback
6377
- *
6378
- * Generate feedback for the test as a whole in an exam session.
6603
+ * List all organizations
6379
6604
  *
6380
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/generate-overall-feedback`
6605
+ * API endpoint: `GET /orgs`
6381
6606
  */
6382
- generateOverallFeedback(args: Args<"exams.sessions.generateOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.generateOverallFeedback">>;
6607
+ list(args?: Args<"orgs.list">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.list">>;
6383
6608
  /**
6384
- * Accept AI grading suggestions
6609
+ * Create a new organization
6385
6610
  *
6386
- * Accept all AI-generated grading suggestions for the exam session.
6611
+ * Create a new workspace to collaborate with others on exams.
6387
6612
  *
6388
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/accept-all`
6613
+ * API endpoint: `POST /orgs`
6389
6614
  */
6390
- acceptAllSuggestions(args: Args<"exams.sessions.acceptAllSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptAllSuggestions">>;
6615
+ create(args?: Args<"orgs.create">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.create">>;
6616
+ }
6617
+ declare class ApiKeys {
6618
+ private readonly ctx;
6619
+ constructor(ctx: ClientContext);
6391
6620
  /**
6392
- * Accept single AI grading suggestion
6621
+ * Get API key
6393
6622
  *
6394
- * Accept a single AI-generated grading suggestion for the exam session.
6623
+ * Get the API key for the current org/user combination. Creates one if none exists.
6395
6624
  *
6396
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/{questionId}/accept`
6625
+ * API endpoint: `GET /api-keys`
6397
6626
  */
6398
- acceptSuggestion(args: Args<"exams.sessions.acceptSuggestion">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptSuggestion">>;
6627
+ get(args?: Args<"apiKeys.get">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.get">>;
6399
6628
  /**
6400
- * Edit answer
6629
+ * Reset API key
6401
6630
  *
6402
- * Edit a single answer in an exam session.
6631
+ * Invalidate old API keys for this org/user and create a new one.
6403
6632
  *
6404
- * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/answers/{questionId}`
6633
+ * API endpoint: `POST /api-keys/reset`
6405
6634
  */
6406
- editAnswer(args: Args<"exams.sessions.editAnswer">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.editAnswer">>;
6635
+ reset(args?: Args<"apiKeys.reset">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.reset">>;
6407
6636
  }
6408
- declare class ExamsQuestions {
6637
+ declare class Attributes {
6409
6638
  private readonly ctx;
6410
6639
  constructor(ctx: ClientContext);
6411
6640
  /**
6412
- * Import questions
6641
+ * List attributes
6413
6642
  *
6414
- * Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
6643
+ * Get all custom attributes configured for the current workspace.
6415
6644
  *
6416
- * API endpoint: `POST /exams/{examId}/questions/import`
6645
+ * API endpoint: `GET /attributes`
6417
6646
  */
6418
- import(args: Args<"exams.questions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.import">>;
6647
+ list(args?: Args<"attributes.list">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.list">>;
6419
6648
  /**
6420
- * Generate question
6649
+ * Create attribute
6421
6650
  *
6422
- * Generate a new question for the exam using an AI prompt.
6651
+ * Create a new custom attribute in the current workspace.
6423
6652
  *
6424
- * API endpoint: `POST /exams/{examId}/questions/generate`
6653
+ * API endpoint: `POST /attributes`
6425
6654
  */
6426
- generate(args: Args<"exams.questions.generate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.generate">>;
6655
+ create(args?: Args<"attributes.create">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.create">>;
6427
6656
  /**
6428
- * Get question
6657
+ * Reorder attributes
6429
6658
  *
6430
- * Retrieve a question by its ID.
6659
+ * Update the position of multiple attributes at once.
6431
6660
  *
6432
- * API endpoint: `GET /exams/{examId}/questions/{questionId}`
6661
+ * API endpoint: `POST /attributes/reorder`
6433
6662
  */
6434
- get(args: Args<"exams.questions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.get">>;
6663
+ reorder(args?: Args<"attributes.reorder">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.reorder">>;
6435
6664
  /**
6436
- * Regenerate question
6665
+ * Update attribute
6437
6666
  *
6438
- * Update a question using an AI prompt.
6667
+ * Update an existing attribute in the current workspace.
6439
6668
  *
6440
- * API endpoint: `POST /exams/{examId}/questions/{questionId}/generate`
6669
+ * API endpoint: `POST /attributes/{id}`
6441
6670
  */
6442
- regenerate(args: Args<"exams.questions.regenerate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.regenerate">>;
6671
+ update(args: Args<"attributes.update">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.update">>;
6672
+ /**
6673
+ * Delete attribute
6674
+ *
6675
+ * Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
6676
+ *
6677
+ * API endpoint: `DELETE /attributes/{id}`
6678
+ */
6679
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6680
+ delete(args: Args<"attributes.delete">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6443
6681
  }
6444
- declare class ExamsExport {
6682
+ declare class Taxonomies {
6445
6683
  private readonly ctx;
6446
6684
  constructor(ctx: ClientContext);
6447
6685
  /**
6448
- * Export QTI 3 package
6686
+ * Get taxonomies
6449
6687
  *
6450
- * Export an exam as a QTI 3 ZIP package.
6688
+ * Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
6451
6689
  *
6452
- * API endpoint: `POST /exams/{examId}/export/qti3-zip`
6690
+ * API endpoint: `GET /taxonomies`
6453
6691
  */
6454
- qti3Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6455
- qti3Zip(args: Args<"exams.export.qti3Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6692
+ list(args?: Args<"taxonomies.list">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.list">>;
6456
6693
  /**
6457
- * Export QTI 2.1 package
6694
+ * Create taxonomy
6458
6695
  *
6459
- * Export an exam as a QTI 2.1 ZIP package.
6696
+ * Save a new taxonomy in the current workspace.
6460
6697
  *
6461
- * API endpoint: `POST /exams/{examId}/export/qti21-zip`
6698
+ * API endpoint: `POST /taxonomies`
6462
6699
  */
6463
- qti21Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6464
- qti21Zip(args: Args<"exams.export.qti21Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6465
- }
6466
- declare class Exams {
6467
- private readonly ctx;
6468
- readonly sessions: ExamsSessions;
6469
- readonly questions: ExamsQuestions;
6470
- readonly export: ExamsExport;
6471
- constructor(ctx: ClientContext);
6700
+ create(args?: Args<"taxonomies.create">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.create">>;
6472
6701
  /**
6473
- * List exams
6702
+ * Update taxonomy
6474
6703
  *
6475
- * Get a list of all exams within your workspace.
6704
+ * Update an existing taxonomy in the current workspace.
6476
6705
  *
6477
- * API endpoint: `GET /exams`
6706
+ * API endpoint: `POST /taxonomies/{id}`
6478
6707
  */
6479
- list(args?: Args<"exams.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.list">>;
6708
+ update(args: Args<"taxonomies.update">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.update">>;
6480
6709
  /**
6481
- * Create exam
6710
+ * Delete taxonomy
6482
6711
  *
6483
- * Create a new exam within your workspace.
6712
+ * Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
6484
6713
  *
6485
- * API endpoint: `POST /exams`
6714
+ * API endpoint: `DELETE /taxonomies/{id}`
6486
6715
  */
6487
- create(args?: Args<"exams.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.create">>;
6716
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6717
+ delete(args: Args<"taxonomies.delete">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6718
+ }
6719
+ declare class Permissions {
6720
+ private readonly ctx;
6721
+ constructor(ctx: ClientContext);
6488
6722
  /**
6489
- * Import exam
6723
+ * Autocomplete users and groups
6490
6724
  *
6491
- * Create an exam by importing one or more source materials (e.g. an existing exam).
6725
+ * Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
6492
6726
  *
6493
- * API endpoint: `POST /exams/import`
6727
+ * API endpoint: `GET /permissions/autocomplete`
6494
6728
  */
6495
- import(args?: Args<"exams.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.import">>;
6729
+ autocomplete(args: Args<"permissions.autocomplete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.autocomplete">>;
6496
6730
  /**
6497
- * Get exam
6731
+ * Get sharing permissions
6498
6732
  *
6499
- * Get a single exam by its ID.
6733
+ * Get a list of users, groups and orgs that have access to a specific resource.
6500
6734
  *
6501
- * API endpoint: `GET /exams/{id}`
6735
+ * API endpoint: `GET /permissions/{resource}`
6502
6736
  */
6503
- get(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6504
- get(args: Args<"exams.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6737
+ list(resource: string, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6738
+ list(args: Args<"permissions.list">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6505
6739
  /**
6506
- * Update exam
6740
+ * Create permission
6507
6741
  *
6508
- * Update an existing exam.
6742
+ * Create a new permission for a specific resource, or update the role of an existing actor.
6509
6743
  *
6510
- * API endpoint: `POST /exams/{id}`
6744
+ * API endpoint: `POST /permissions/{resource}`
6511
6745
  */
6512
- update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6513
- update(args: Args<"exams.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6746
+ assign(args: Args<"permissions.assign">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.assign">>;
6514
6747
  /**
6515
- * Delete exam
6748
+ * Get actor role
6516
6749
  *
6517
- * Delete the exam.
6750
+ * Get the role of a specific actor for a specific resource.
6518
6751
  *
6519
- * API endpoint: `DELETE /exams/{id}`
6752
+ * API endpoint: `GET /permissions/{resource}/{actor}`
6520
6753
  */
6521
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6522
- delete(args: Args<"exams.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6754
+ getActorRole(args: Args<"permissions.getActorRole">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.getActorRole">>;
6523
6755
  /**
6524
- * Duplicate exam
6756
+ * Remove permission
6525
6757
  *
6526
- * Duplicate the exam's questions and settings to a new exam.
6758
+ * Remove a permission for a specific actor on a specific resource.
6527
6759
  *
6528
- * API endpoint: `POST /exams/{examId}/duplicate`
6760
+ * API endpoint: `DELETE /permissions/{resource}/{actor}`
6529
6761
  */
6530
- duplicate(args: Args<"exams.duplicate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.duplicate">>;
6762
+ delete(args: Args<"permissions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.delete">>;
6763
+ }
6764
+ declare class StudentLevels {
6765
+ private readonly ctx;
6766
+ constructor(ctx: ClientContext);
6531
6767
  /**
6532
- * Print exam
6768
+ * List available student levels
6533
6769
  *
6534
- * Export an exam to a PDF file or Word document.
6770
+ * Get a list of available default student levels.
6535
6771
  *
6536
- * API endpoint: `POST /exams/{examId}/print`
6772
+ * API endpoint: `GET /student-levels`
6537
6773
  */
6538
- print(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6539
- print(args: Args<"exams.print">, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6774
+ list(args?: Args<"studentLevels.list">, options?: ExamplaryRequestOptions): Promise<Response<"studentLevels.list">>;
6775
+ }
6776
+ declare class Users {
6777
+ private readonly ctx;
6778
+ constructor(ctx: ClientContext);
6540
6779
  /**
6541
- * Generate exam
6780
+ * List users
6542
6781
  *
6543
- * Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
6782
+ * Get a list of all users in the workspace.
6544
6783
  *
6545
- * API endpoint: `POST /exams/{examId}/generate`
6784
+ * API endpoint: `GET /users`
6546
6785
  */
6547
- startGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6548
- startGeneration(args: Args<"exams.startGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6786
+ list(args?: Args<"users.list">, options?: ExamplaryRequestOptions): Promise<Response<"users.list">>;
6549
6787
  /**
6550
- * Cancel exam generation
6788
+ * Create user
6551
6789
  *
6552
- * Cancel an ongoing job to generate new questions for the exam using AI.
6790
+ * Create a new user in the workspace.
6553
6791
  *
6554
- * API endpoint: `POST /exams/{examId}/generate/cancel`
6792
+ * API endpoint: `POST /users`
6555
6793
  */
6556
- cancelGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6557
- cancelGeneration(args: Args<"exams.cancelGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6794
+ create(args?: Args<"users.create">, options?: ExamplaryRequestOptions): Promise<Response<"users.create">>;
6558
6795
  /**
6559
- * Get exam context suggestions
6796
+ * Update user role
6560
6797
  *
6561
- * Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
6798
+ * Update a user's role within the workspace.
6562
6799
  *
6563
- * API endpoint: `GET /exams/{examId}/context-suggestions`
6800
+ * API endpoint: `PATCH /users/{id}`
6564
6801
  */
6565
- getContextSuggestions(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6566
- getContextSuggestions(args: Args<"exams.getContextSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6802
+ update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6803
+ update(args: Args<"users.update">, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6804
+ /**
6805
+ * Delete user
6806
+ *
6807
+ * Delete a user from the workspace.
6808
+ *
6809
+ * API endpoint: `DELETE /users/{id}`
6810
+ */
6811
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6812
+ delete(args: Args<"users.delete">, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6567
6813
  }
6568
6814
  declare class PracticeSpacesStudents {
6569
6815
  private readonly ctx;
@@ -6949,6 +7195,7 @@ declare class Examplary {
6949
7195
  readonly library: Library;
6950
7196
  readonly oauth: Oauth;
6951
7197
  readonly embedSessions: EmbedSessions;
7198
+ readonly exams: Exams;
6952
7199
  readonly me: Me;
6953
7200
  readonly media: Media;
6954
7201
  readonly org: Org;
@@ -6959,7 +7206,6 @@ declare class Examplary {
6959
7206
  readonly permissions: Permissions;
6960
7207
  readonly studentLevels: StudentLevels;
6961
7208
  readonly users: Users;
6962
- readonly exams: Exams;
6963
7209
  readonly practiceSpaces: PracticeSpaces;
6964
7210
  readonly sourceMaterials: SourceMaterials;
6965
7211
  readonly folders: Folders;