@examplary/sdk 2.3.0 → 2.5.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,177 +899,179 @@ 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
+ "/audit-logs": {
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
+ * List audit logs
1043
+ * @description List the workspace's audit logs, newest first, with optional date range, actor and object filters. Paginated.
1078
1044
  */
1079
- post: operations["exams.export.qti3Zip"];
1045
+ get: operations["audit-logs.list"];
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
+ "/audit-logs/export": {
1087
1055
  parameters: {
1088
1056
  query?: never;
1089
1057
  header?: never;
1090
1058
  path?: never;
1091
1059
  cookie?: never;
1092
1060
  };
1093
- get?: never;
1094
- put?: never;
1095
1061
  /**
1096
- * Export QTI 2.1 package
1097
- * @description Export an exam as a QTI 2.1 ZIP package.
1062
+ * Export audit logs
1063
+ * @description Export audit logs for a date range (optionally filtered by actor/object) as ND-JSON. Returns a temporary download URL.
1098
1064
  */
1099
- post: operations["exams.export.qti21Zip"];
1065
+ get: operations["audit-logs.export"];
1066
+ put?: never;
1067
+ post?: never;
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
+ "/api-keys": {
1107
1075
  parameters: {
1108
1076
  query?: never;
1109
1077
  header?: never;
@@ -1111,23 +1079,19 @@ 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
+ * Get API key
1083
+ * @description Get the API key for the current org/user combination. Creates one if none exists.
1116
1084
  */
1117
- get: operations["exams.list"];
1085
+ get: operations["apiKeys.get"];
1118
1086
  put?: never;
1119
- /**
1120
- * Create exam
1121
- * @description Create a new exam within your workspace.
1122
- */
1123
- post: operations["exams.create"];
1087
+ post?: never;
1124
1088
  delete?: never;
1125
1089
  options?: never;
1126
1090
  head?: never;
1127
1091
  patch?: never;
1128
1092
  trace?: never;
1129
1093
  };
1130
- "/exams/import": {
1094
+ "/api-keys/reset": {
1131
1095
  parameters: {
1132
1096
  query?: never;
1133
1097
  header?: never;
@@ -1137,17 +1101,17 @@ interface paths {
1137
1101
  get?: never;
1138
1102
  put?: never;
1139
1103
  /**
1140
- * Import exam
1141
- * @description Create an exam by importing one or more source materials (e.g. an existing exam).
1104
+ * Reset API key
1105
+ * @description Invalidate old API keys for this org/user and create a new one.
1142
1106
  */
1143
- post: operations["exams.import"];
1107
+ post: operations["apiKeys.reset"];
1144
1108
  delete?: never;
1145
1109
  options?: never;
1146
1110
  head?: never;
1147
1111
  patch?: never;
1148
1112
  trace?: never;
1149
1113
  };
1150
- "/exams/{id}": {
1114
+ "/attributes": {
1151
1115
  parameters: {
1152
1116
  query?: never;
1153
1117
  header?: never;
@@ -1155,27 +1119,23 @@ interface paths {
1155
1119
  cookie?: never;
1156
1120
  };
1157
1121
  /**
1158
- * Get exam
1159
- * @description Get a single exam by its ID.
1122
+ * List attributes
1123
+ * @description Get all custom attributes configured for the current workspace.
1160
1124
  */
1161
- get: operations["exams.get"];
1125
+ get: operations["attributes.list"];
1162
1126
  put?: never;
1163
1127
  /**
1164
- * Update exam
1165
- * @description Update an existing exam.
1166
- */
1167
- post: operations["exams.update"];
1168
- /**
1169
- * Delete exam
1170
- * @description Delete the exam.
1128
+ * Create attribute
1129
+ * @description Create a new custom attribute in the current workspace.
1171
1130
  */
1172
- delete: operations["exams.delete"];
1131
+ post: operations["attributes.create"];
1132
+ delete?: never;
1173
1133
  options?: never;
1174
1134
  head?: never;
1175
1135
  patch?: never;
1176
1136
  trace?: never;
1177
1137
  };
1178
- "/exams/{id}/duplicate": {
1138
+ "/attributes/reorder": {
1179
1139
  parameters: {
1180
1140
  query?: never;
1181
1141
  header?: never;
@@ -1185,17 +1145,17 @@ interface paths {
1185
1145
  get?: never;
1186
1146
  put?: never;
1187
1147
  /**
1188
- * Duplicate exam
1189
- * @description Duplicate the exam's questions and settings to a new exam.
1148
+ * Reorder attributes
1149
+ * @description Update the position of multiple attributes at once.
1190
1150
  */
1191
- post: operations["exams.duplicate"];
1151
+ post: operations["attributes.reorder"];
1192
1152
  delete?: never;
1193
1153
  options?: never;
1194
1154
  head?: never;
1195
1155
  patch?: never;
1196
1156
  trace?: never;
1197
1157
  };
1198
- "/exams/{id}/print": {
1158
+ "/attributes/{id}": {
1199
1159
  parameters: {
1200
1160
  query?: never;
1201
1161
  header?: never;
@@ -1205,37 +1165,45 @@ interface paths {
1205
1165
  get?: never;
1206
1166
  put?: never;
1207
1167
  /**
1208
- * Print exam
1209
- * @description Export an exam to a PDF file or Word document.
1168
+ * Update attribute
1169
+ * @description Update an existing attribute in the current workspace.
1210
1170
  */
1211
- post: operations["exams.print"];
1212
- delete?: never;
1171
+ post: operations["attributes.update"];
1172
+ /**
1173
+ * Delete attribute
1174
+ * @description Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
1175
+ */
1176
+ delete: operations["attributes.delete"];
1213
1177
  options?: never;
1214
1178
  head?: never;
1215
1179
  patch?: never;
1216
1180
  trace?: never;
1217
1181
  };
1218
- "/exams/{id}/generate": {
1182
+ "/taxonomies": {
1219
1183
  parameters: {
1220
1184
  query?: never;
1221
1185
  header?: never;
1222
1186
  path?: never;
1223
1187
  cookie?: never;
1224
1188
  };
1225
- get?: never;
1189
+ /**
1190
+ * Get taxonomies
1191
+ * @description Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
1192
+ */
1193
+ get: operations["taxonomies.list"];
1226
1194
  put?: never;
1227
1195
  /**
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.
1196
+ * Create taxonomy
1197
+ * @description Save a new taxonomy in the current workspace.
1230
1198
  */
1231
- post: operations["exams.startGeneration"];
1199
+ post: operations["taxonomies.create"];
1232
1200
  delete?: never;
1233
1201
  options?: never;
1234
1202
  head?: never;
1235
1203
  patch?: never;
1236
1204
  trace?: never;
1237
1205
  };
1238
- "/exams/{id}/generate/cancel": {
1206
+ "/taxonomies/{id}": {
1239
1207
  parameters: {
1240
1208
  query?: never;
1241
1209
  header?: never;
@@ -1245,17 +1213,41 @@ interface paths {
1245
1213
  get?: never;
1246
1214
  put?: never;
1247
1215
  /**
1248
- * Cancel exam generation
1249
- * @description Cancel an ongoing job to generate new questions for the exam using AI.
1216
+ * Update taxonomy
1217
+ * @description Update an existing taxonomy in the current workspace.
1250
1218
  */
1251
- post: operations["exams.cancelGeneration"];
1219
+ post: operations["taxonomies.update"];
1220
+ /**
1221
+ * Delete taxonomy
1222
+ * @description Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
1223
+ */
1224
+ delete: operations["taxonomies.delete"];
1225
+ options?: never;
1226
+ head?: never;
1227
+ patch?: never;
1228
+ trace?: never;
1229
+ };
1230
+ "/permissions/autocomplete": {
1231
+ parameters: {
1232
+ query?: never;
1233
+ header?: never;
1234
+ path?: never;
1235
+ cookie?: never;
1236
+ };
1237
+ /**
1238
+ * Autocomplete users and groups
1239
+ * @description Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
1240
+ */
1241
+ get: operations["permissions.autocomplete"];
1242
+ put?: never;
1243
+ post?: never;
1252
1244
  delete?: never;
1253
1245
  options?: never;
1254
1246
  head?: never;
1255
1247
  patch?: never;
1256
1248
  trace?: never;
1257
1249
  };
1258
- "/exams/{id}/context-suggestions": {
1250
+ "/permissions/{resource}": {
1259
1251
  parameters: {
1260
1252
  query?: never;
1261
1253
  header?: never;
@@ -1263,10 +1255,58 @@ interface paths {
1263
1255
  cookie?: never;
1264
1256
  };
1265
1257
  /**
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.
1258
+ * Get sharing permissions
1259
+ * @description Get a list of users, groups and orgs that have access to a specific resource.
1268
1260
  */
1269
- get: operations["exams.getContextSuggestions"];
1261
+ get: operations["permissions.list"];
1262
+ put?: never;
1263
+ /**
1264
+ * Create permission
1265
+ * @description Create a new permission for a specific resource, or update the role of an existing actor.
1266
+ */
1267
+ post: operations["permissions.assign"];
1268
+ delete?: never;
1269
+ options?: never;
1270
+ head?: never;
1271
+ patch?: never;
1272
+ trace?: never;
1273
+ };
1274
+ "/permissions/{resource}/{actor}": {
1275
+ parameters: {
1276
+ query?: never;
1277
+ header?: never;
1278
+ path?: never;
1279
+ cookie?: never;
1280
+ };
1281
+ /**
1282
+ * Get actor role
1283
+ * @description Get the role of a specific actor for a specific resource.
1284
+ */
1285
+ get: operations["permissions.getActorRole"];
1286
+ put?: never;
1287
+ post?: never;
1288
+ /**
1289
+ * Remove permission
1290
+ * @description Remove a permission for a specific actor on a specific resource.
1291
+ */
1292
+ delete: operations["permissions.delete"];
1293
+ options?: never;
1294
+ head?: never;
1295
+ patch?: never;
1296
+ trace?: never;
1297
+ };
1298
+ "/student-levels": {
1299
+ parameters: {
1300
+ query?: never;
1301
+ header?: never;
1302
+ path?: never;
1303
+ cookie?: never;
1304
+ };
1305
+ /**
1306
+ * List available student levels
1307
+ * @description Get a list of available default student levels.
1308
+ */
1309
+ get: operations["studentLevels.list"];
1270
1310
  put?: never;
1271
1311
  post?: never;
1272
1312
  delete?: never;
@@ -1275,6 +1315,54 @@ interface paths {
1275
1315
  patch?: never;
1276
1316
  trace?: never;
1277
1317
  };
1318
+ "/users": {
1319
+ parameters: {
1320
+ query?: never;
1321
+ header?: never;
1322
+ path?: never;
1323
+ cookie?: never;
1324
+ };
1325
+ /**
1326
+ * List users
1327
+ * @description Get a list of all users in the workspace.
1328
+ */
1329
+ get: operations["users.list"];
1330
+ put?: never;
1331
+ /**
1332
+ * Create user
1333
+ * @description Create a new user in the workspace.
1334
+ */
1335
+ post: operations["users.create"];
1336
+ delete?: never;
1337
+ options?: never;
1338
+ head?: never;
1339
+ patch?: never;
1340
+ trace?: never;
1341
+ };
1342
+ "/users/{id}": {
1343
+ parameters: {
1344
+ query?: never;
1345
+ header?: never;
1346
+ path?: never;
1347
+ cookie?: never;
1348
+ };
1349
+ get?: never;
1350
+ put?: never;
1351
+ post?: never;
1352
+ /**
1353
+ * Delete user
1354
+ * @description Delete a user from the workspace.
1355
+ */
1356
+ delete: operations["users.delete"];
1357
+ options?: never;
1358
+ head?: never;
1359
+ /**
1360
+ * Update user role
1361
+ * @description Update a user's role within the workspace.
1362
+ */
1363
+ patch: operations["users.update"];
1364
+ trace?: never;
1365
+ };
1278
1366
  "/practice-spaces": {
1279
1367
  parameters: {
1280
1368
  query?: never;
@@ -1899,6 +1987,54 @@ interface paths {
1899
1987
  patch: operations["patchRubrics:id"];
1900
1988
  trace?: never;
1901
1989
  };
1990
+ "/prompts": {
1991
+ parameters: {
1992
+ query?: never;
1993
+ header?: never;
1994
+ path?: never;
1995
+ cookie?: never;
1996
+ };
1997
+ /**
1998
+ * Get prompts
1999
+ * @description Get a list of reusable prompts, merging the workspace's saved prompts with the defaults provided by Examplary. Optionally filter by type and language.
2000
+ */
2001
+ get: operations["prompts.list"];
2002
+ put?: never;
2003
+ /**
2004
+ * Save prompt
2005
+ * @description Save a reusable prompt in the current workspace.
2006
+ */
2007
+ post: operations["prompts.create"];
2008
+ delete?: never;
2009
+ options?: never;
2010
+ head?: never;
2011
+ patch?: never;
2012
+ trace?: never;
2013
+ };
2014
+ "/prompts/{id}": {
2015
+ parameters: {
2016
+ query?: never;
2017
+ header?: never;
2018
+ path?: never;
2019
+ cookie?: never;
2020
+ };
2021
+ get?: never;
2022
+ put?: never;
2023
+ post?: never;
2024
+ /**
2025
+ * Delete prompt
2026
+ * @description Delete a prompt from the current workspace.
2027
+ */
2028
+ delete: operations["prompts.delete"];
2029
+ options?: never;
2030
+ head?: never;
2031
+ /**
2032
+ * Update prompt
2033
+ * @description Update an existing prompt in the current workspace.
2034
+ */
2035
+ patch: operations["prompts.update"];
2036
+ trace?: never;
2037
+ };
1902
2038
  "/jobs/{id}": {
1903
2039
  parameters: {
1904
2040
  query?: never;
@@ -2149,7 +2285,30 @@ interface operations {
2149
2285
  */
2150
2286
  type: "AssociateInteraction" | "ChoiceInteraction" | "DrawingInteraction" | "EndAttemptInteraction" | "ExtendedTextInteraction" | "GapMatchInteraction" | "GraphicAssociateInteraction" | "GraphicGapMatchInteraction" | "GraphicOrderInteraction" | "HotspotInteraction" | "HottextInteraction" | "InlineChoiceInteraction" | "MatchInteraction" | "MediaInteraction" | "OrderInteraction" | "PortableCustomInteraction" | "PositionObjectInteraction" | "SelectPointInteraction" | "SliderInteraction" | "TextEntryInteraction" | "UploadInteraction";
2151
2287
  options?: {
2152
- [key: string]: string | number | boolean | unknown[] | Record<string, never>;
2288
+ [key: string]: string | number | boolean | unknown[] | {
2289
+ [key: string]: unknown;
2290
+ };
2291
+ };
2292
+ };
2293
+ };
2294
+ };
2295
+ /** @description Import configuration for various formats */
2296
+ import?: {
2297
+ /** @description QTI 3.0 import configuration for mapping incoming QTI items to this question type */
2298
+ qti3?: {
2299
+ interaction: {
2300
+ /**
2301
+ * @description The QTI interaction type this question type handles on import
2302
+ * @enum {string}
2303
+ */
2304
+ type: "AssociateInteraction" | "ChoiceInteraction" | "DrawingInteraction" | "EndAttemptInteraction" | "ExtendedTextInteraction" | "GapMatchInteraction" | "GraphicAssociateInteraction" | "GraphicGapMatchInteraction" | "GraphicOrderInteraction" | "HotspotInteraction" | "HottextInteraction" | "InlineChoiceInteraction" | "MatchInteraction" | "MediaInteraction" | "OrderInteraction" | "PortableCustomInteraction" | "PositionObjectInteraction" | "SelectPointInteraction" | "SliderInteraction" | "TextEntryInteraction" | "UploadInteraction";
2305
+ };
2306
+ /** @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). */
2307
+ condition?: string;
2308
+ /** @description JSONata expressions mapping QTI interaction properties to question settings */
2309
+ settings?: {
2310
+ [key: string]: string | number | boolean | unknown[] | {
2311
+ [key: string]: unknown;
2153
2312
  };
2154
2313
  };
2155
2314
  };
@@ -2639,6 +2798,38 @@ interface operations {
2639
2798
  presets: {
2640
2799
  examId: string;
2641
2800
  };
2801
+ } | {
2802
+ /** @description The user ID for whom the embed session is created */
2803
+ actor: string;
2804
+ /** @description UI options for the embed session */
2805
+ theme: {
2806
+ /** @description CSS hex color code for primary UI elements, either #RRGGBB or #RGB */
2807
+ primaryColor?: string;
2808
+ /** @description CSS hex color code for background, either #RRGGBB or #RGB */
2809
+ backgroundColor?: string;
2810
+ /** @description Locale code for UI language. Currently supported: 'en', 'nl' - other values accepted, but will default to English */
2811
+ locale?: string;
2812
+ };
2813
+ /** @description Additional key-value metadata */
2814
+ metadata?: {
2815
+ [key: string]: string | number | boolean | null;
2816
+ };
2817
+ /**
2818
+ * Format: uri
2819
+ * @description Optional redirect URL after completion
2820
+ */
2821
+ returnUrl?: string;
2822
+ /**
2823
+ * Format: uri
2824
+ * @description Optional allowed origin for postMessage events
2825
+ */
2826
+ allowedOrigin?: string;
2827
+ /** @enum {string} */
2828
+ flow: "take-exam";
2829
+ /** @description Preset values for the take-exam flow */
2830
+ presets: {
2831
+ examId: string;
2832
+ };
2642
2833
  } | {
2643
2834
  /** @description The user ID for whom the embed session is created */
2644
2835
  actor: string;
@@ -2687,7 +2878,7 @@ interface operations {
2687
2878
  /** Format: uri */
2688
2879
  embedUrl: string;
2689
2880
  /** @enum {string} */
2690
- flow: "generate-exam" | "generate-question" | "edit-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2881
+ flow: "generate-exam" | "generate-question" | "edit-exam" | "take-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2691
2882
  actor: string;
2692
2883
  enabledResponseModes: ("return_url" | "post_message")[];
2693
2884
  /** Format: date-time */
@@ -2738,7 +2929,7 @@ interface operations {
2738
2929
  /** Format: uri */
2739
2930
  embedUrl: string;
2740
2931
  /** @enum {string} */
2741
- flow: "generate-exam" | "generate-question" | "edit-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2932
+ flow: "generate-exam" | "generate-question" | "edit-exam" | "take-exam" | "edit-rubric" | "mark-answer" | "practice-space-student";
2742
2933
  actor: string;
2743
2934
  enabledResponseModes: ("return_url" | "post_message")[];
2744
2935
  /** Format: date-time */
@@ -2778,309 +2969,341 @@ interface operations {
2778
2969
  requestBody?: never;
2779
2970
  responses: never;
2780
2971
  };
2781
- "me.get": {
2972
+ "exams.sessions.list": {
2782
2973
  parameters: {
2783
2974
  query?: never;
2784
2975
  header?: never;
2785
- path?: never;
2976
+ path: {
2977
+ id: string;
2978
+ };
2786
2979
  cookie?: never;
2787
2980
  };
2788
2981
  requestBody?: never;
2789
2982
  responses: never;
2790
2983
  };
2791
- "me.update": {
2984
+ "exams.sessions.import": {
2792
2985
  parameters: {
2793
2986
  query?: never;
2794
2987
  header?: never;
2795
- path?: never;
2988
+ path: {
2989
+ id: string;
2990
+ };
2796
2991
  cookie?: never;
2797
2992
  };
2798
2993
  requestBody?: {
2799
2994
  content: {
2800
2995
  "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
- };
2996
+ studentName: string;
2997
+ /**
2998
+ * @default manual
2999
+ * @enum {string}
3000
+ */
3001
+ source?: "online-assessment" | "document-scanner" | "answer-bot" | "manual";
3002
+ answers?: {
3003
+ question: string;
3004
+ value?: (string | (string | null)[]) | null;
3005
+ completed?: boolean | null;
3006
+ context?: unknown | null;
3007
+ pointsAwarded?: number | null;
3008
+ pointsToEarn?: number | null;
3009
+ feedback?: string | null;
3010
+ scoringCriteria?: unknown | null;
3011
+ /** Format: date-time */
3012
+ savedAt?: string;
3013
+ gradedAt?: string | null;
3014
+ gradedBy?: string | null;
3015
+ gradingStatus?: ("graded" | "auto-graded") | null;
3016
+ originalValue?: (string | (string | null)[]) | null;
3017
+ editedBy?: string | null;
3018
+ editedAt?: string | null;
3019
+ masteryTopicId?: string | null;
3020
+ traceIds?: string[] | null;
3021
+ }[];
2807
3022
  };
2808
3023
  };
2809
3024
  };
2810
3025
  responses: never;
2811
3026
  };
2812
- "media.upload": {
2813
- 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
- };
2822
- header?: never;
2823
- path?: never;
2824
- cookie?: never;
2825
- };
2826
- 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
- };
2839
- };
2840
- };
2841
- };
2842
- };
2843
- "org.get": {
2844
- parameters: {
2845
- query?: never;
2846
- header?: never;
2847
- path?: never;
2848
- cookie?: never;
2849
- };
2850
- requestBody?: never;
2851
- responses: never;
2852
- };
2853
- "org.delete": {
3027
+ "exams.sessions.scan": {
2854
3028
  parameters: {
2855
3029
  query?: never;
2856
3030
  header?: never;
2857
- path?: never;
3031
+ path: {
3032
+ id: string;
3033
+ };
2858
3034
  cookie?: never;
2859
3035
  };
2860
3036
  requestBody?: never;
2861
3037
  responses: never;
2862
3038
  };
2863
- "org.update": {
3039
+ "exams.sessions.scanDocument": {
2864
3040
  parameters: {
2865
3041
  query?: never;
2866
3042
  header?: never;
2867
- path?: never;
3043
+ path: {
3044
+ id: string;
3045
+ };
2868
3046
  cookie?: never;
2869
3047
  };
2870
3048
  requestBody?: {
2871
3049
  content: {
2872
3050
  "application/json": {
2873
- name?: string;
2874
3051
  /** 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
- };
3052
+ documentUrl: string;
2885
3053
  };
2886
3054
  };
2887
3055
  };
2888
3056
  responses: never;
2889
3057
  };
2890
- "org.customDomain.get": {
3058
+ "exams.sessions.get": {
2891
3059
  parameters: {
2892
3060
  query?: never;
2893
3061
  header?: never;
2894
- path?: never;
3062
+ path: {
3063
+ id: string;
3064
+ sessionId: string;
3065
+ };
2895
3066
  cookie?: never;
2896
3067
  };
2897
3068
  requestBody?: never;
2898
3069
  responses: never;
2899
3070
  };
2900
- "org.customDomain.update": {
3071
+ "exams.sessions.delete": {
2901
3072
  parameters: {
2902
3073
  query?: never;
2903
3074
  header?: never;
2904
- path?: never;
2905
- cookie?: never;
2906
- };
2907
- requestBody?: {
2908
- content: {
2909
- "application/json": {
2910
- customDomain?: string | null;
2911
- };
3075
+ path: {
3076
+ id: string;
3077
+ sessionId: string;
2912
3078
  };
3079
+ cookie?: never;
2913
3080
  };
3081
+ requestBody?: never;
2914
3082
  responses: never;
2915
3083
  };
2916
- "orgs.list": {
3084
+ "exams.sessions.saveFeedback": {
2917
3085
  parameters: {
2918
3086
  query?: never;
2919
3087
  header?: never;
2920
- path?: never;
3088
+ path: {
3089
+ id: string;
3090
+ sessionId: string;
3091
+ };
2921
3092
  cookie?: never;
2922
3093
  };
2923
- requestBody?: never;
3094
+ requestBody?: {
3095
+ content: {
3096
+ "application/json": {
3097
+ /** @description Question ID to provide feedback for */
3098
+ question: string;
3099
+ /** @description Points to award for the answer */
3100
+ pointsAwarded?: number;
3101
+ /** @description Optional teacher feedback for the answer */
3102
+ feedback?: string;
3103
+ };
3104
+ };
3105
+ };
2924
3106
  responses: never;
2925
3107
  };
2926
- "orgs.create": {
3108
+ "exams.sessions.saveOverallFeedback": {
2927
3109
  parameters: {
2928
3110
  query?: never;
2929
3111
  header?: never;
2930
- path?: never;
3112
+ path: {
3113
+ id: string;
3114
+ sessionId: string;
3115
+ };
2931
3116
  cookie?: never;
2932
3117
  };
2933
3118
  requestBody?: {
2934
3119
  content: {
2935
3120
  "application/json": {
2936
- name: string;
3121
+ /** @description Teacher feedback for the test as a whole */
3122
+ feedback?: string | null;
2937
3123
  };
2938
3124
  };
2939
3125
  };
2940
3126
  responses: never;
2941
3127
  };
2942
- "apiKeys.get": {
3128
+ "exams.sessions.generateOverallFeedback": {
2943
3129
  parameters: {
2944
3130
  query?: never;
2945
3131
  header?: never;
2946
- path?: never;
3132
+ path: {
3133
+ id: string;
3134
+ sessionId: string;
3135
+ };
2947
3136
  cookie?: never;
2948
3137
  };
2949
3138
  requestBody?: never;
2950
3139
  responses: never;
2951
3140
  };
2952
- "apiKeys.reset": {
3141
+ "exams.sessions.acceptAllSuggestions": {
2953
3142
  parameters: {
2954
3143
  query?: never;
2955
3144
  header?: never;
2956
- path?: never;
3145
+ path: {
3146
+ id: string;
3147
+ sessionId: string;
3148
+ };
2957
3149
  cookie?: never;
2958
3150
  };
2959
3151
  requestBody?: never;
2960
3152
  responses: never;
2961
3153
  };
2962
- "attributes.list": {
3154
+ "exams.sessions.acceptSuggestion": {
2963
3155
  parameters: {
2964
3156
  query?: never;
2965
3157
  header?: never;
2966
- path?: never;
3158
+ path: {
3159
+ id: string;
3160
+ sessionId: string;
3161
+ questionId: string;
3162
+ };
2967
3163
  cookie?: never;
2968
3164
  };
2969
3165
  requestBody?: never;
2970
3166
  responses: never;
2971
3167
  };
2972
- "attributes.create": {
3168
+ "exams.sessions.editAnswer": {
2973
3169
  parameters: {
2974
3170
  query?: never;
2975
3171
  header?: never;
2976
- path?: never;
3172
+ path: {
3173
+ id: string;
3174
+ sessionId: string;
3175
+ questionId: string;
3176
+ };
2977
3177
  cookie?: never;
2978
3178
  };
2979
3179
  requestBody?: {
2980
3180
  content: {
2981
3181
  "application/json": {
2982
- name: string;
2983
- /** @enum {string} */
2984
- attributeType: "string" | "category" | "studentLevel" | "subject";
2985
- options?: string[];
2986
- showInStudentDashboard?: boolean;
2987
- showAsStudentPreference?: boolean;
2988
- position?: number;
2989
- appearanceColor?: (string) | null;
3182
+ answer: {
3183
+ question: string;
3184
+ value?: (string | (string | null)[]) | null;
3185
+ completed?: boolean | null;
3186
+ context?: unknown | null;
3187
+ };
3188
+ /** @description Whether to automatically grade the answer after editing */
3189
+ autoGrade?: boolean;
2990
3190
  };
2991
3191
  };
2992
3192
  };
2993
3193
  responses: never;
2994
3194
  };
2995
- "attributes.reorder": {
3195
+ "exams.sessions.comments.list": {
2996
3196
  parameters: {
2997
3197
  query?: never;
2998
3198
  header?: never;
2999
- path?: never;
3000
- cookie?: never;
3001
- };
3002
- requestBody?: {
3003
- content: {
3004
- "application/json": {
3005
- order: {
3006
- id: string;
3007
- position: number;
3008
- }[];
3009
- };
3199
+ path: {
3200
+ id: string;
3201
+ sessionId: string;
3010
3202
  };
3203
+ cookie?: never;
3011
3204
  };
3205
+ requestBody?: never;
3012
3206
  responses: never;
3013
3207
  };
3014
- "attributes.update": {
3208
+ "exams.sessions.comments.create": {
3015
3209
  parameters: {
3016
3210
  query?: never;
3017
3211
  header?: never;
3018
3212
  path: {
3019
3213
  id: string;
3214
+ sessionId: string;
3020
3215
  };
3021
3216
  cookie?: never;
3022
3217
  };
3023
3218
  requestBody?: {
3024
3219
  content: {
3025
3220
  "application/json": {
3026
- name?: string;
3221
+ value?: string;
3222
+ range?: [
3223
+ number,
3224
+ number
3225
+ ];
3226
+ quotation?: string;
3227
+ inReplyTo?: string;
3027
3228
  /** @enum {string} */
3028
- attributeType?: "string" | "category" | "studentLevel" | "subject";
3029
- options?: string[];
3030
- showInStudentDashboard?: boolean;
3031
- showAsStudentPreference?: boolean;
3032
- position?: number;
3033
- appearanceColor?: (string) | null;
3229
+ status?: "open" | "resolved";
3230
+ /** @description Question ID the comment is attached to */
3231
+ question: string;
3034
3232
  };
3035
3233
  };
3036
3234
  };
3037
3235
  responses: never;
3038
3236
  };
3039
- "attributes.delete": {
3237
+ "exams.sessions.comments.delete": {
3040
3238
  parameters: {
3041
3239
  query?: never;
3042
3240
  header?: never;
3043
3241
  path: {
3044
3242
  id: string;
3243
+ sessionId: string;
3244
+ commentId: string;
3045
3245
  };
3046
3246
  cookie?: never;
3047
3247
  };
3048
3248
  requestBody?: never;
3049
3249
  responses: never;
3050
3250
  };
3051
- "taxonomies.list": {
3251
+ "exams.sessions.comments.update": {
3052
3252
  parameters: {
3053
3253
  query?: never;
3054
3254
  header?: never;
3055
- path?: never;
3255
+ path: {
3256
+ id: string;
3257
+ sessionId: string;
3258
+ commentId: string;
3259
+ };
3056
3260
  cookie?: never;
3057
3261
  };
3058
- requestBody?: never;
3262
+ requestBody?: {
3263
+ content: {
3264
+ "application/json": {
3265
+ value?: string;
3266
+ range?: [
3267
+ number,
3268
+ number
3269
+ ];
3270
+ quotation?: string;
3271
+ inReplyTo?: string;
3272
+ /** @enum {string} */
3273
+ status?: "open" | "resolved";
3274
+ };
3275
+ };
3276
+ };
3059
3277
  responses: never;
3060
3278
  };
3061
- "taxonomies.create": {
3279
+ "exams.questions.import": {
3062
3280
  parameters: {
3063
3281
  query?: never;
3064
3282
  header?: never;
3065
- path?: never;
3283
+ path: {
3284
+ id: string;
3285
+ };
3066
3286
  cookie?: never;
3067
3287
  };
3068
3288
  requestBody?: {
3069
3289
  content: {
3070
3290
  "application/json": {
3071
- name: string;
3072
- description?: string;
3073
- instructions?: string;
3074
- levels: {
3075
- name?: string;
3076
- instructions?: string;
3077
- }[];
3291
+ /** @description File name */
3292
+ name?: string;
3293
+ /** @description MIME type of the file, e.g. application/pdf */
3294
+ type?: string;
3295
+ /** @description URL of the file, required if no content is specified. */
3296
+ url?: string;
3297
+ /** @description Content of the file as a string, as an alternative to URL. Only supported for exports from other systems (e.g. Moodle XML). */
3298
+ content?: string;
3299
+ /** @description Whether to keep existing exam settings when importing questions via AI. */
3300
+ keepExistingSettings?: boolean;
3078
3301
  };
3079
3302
  };
3080
3303
  };
3081
3304
  responses: never;
3082
3305
  };
3083
- "taxonomies.update": {
3306
+ "exams.questions.generate": {
3084
3307
  parameters: {
3085
3308
  query?: never;
3086
3309
  header?: never;
@@ -3092,278 +3315,116 @@ interface operations {
3092
3315
  requestBody?: {
3093
3316
  content: {
3094
3317
  "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;
3318
+ message: string;
3319
+ questionType?: string;
3320
+ /** @enum {string} */
3321
+ format?: "examplary_json" | "qti_v3p0" | "qti_v2p1";
3104
3322
  };
3105
3323
  };
3106
3324
  };
3107
3325
  responses: never;
3108
3326
  };
3109
- "taxonomies.delete": {
3327
+ "exams.questions.get": {
3110
3328
  parameters: {
3111
- query?: never;
3329
+ query?: {
3330
+ /** @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. */
3331
+ format?: "examplary_json" | "qti_v3p0" | "qti_v2p1";
3332
+ };
3112
3333
  header?: never;
3113
3334
  path: {
3335
+ /** @description Exam ID, e.g. `exam_1234`. */
3114
3336
  id: string;
3337
+ /** @description Question ID, e.g. `question_1234`, or `first` to get the first question. */
3338
+ questionId: string;
3115
3339
  };
3116
3340
  cookie?: never;
3117
3341
  };
3118
3342
  requestBody?: never;
3119
3343
  responses: never;
3120
3344
  };
3121
- "permissions.autocomplete": {
3345
+ "exams.questions.regenerate": {
3122
3346
  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
- responses: {
3135
- /** @description List of matching users and groups. */
3136
- 200: {
3137
- headers: {
3138
- [name: string]: unknown;
3139
- };
3140
- content?: never;
3141
- };
3142
- /** @description Query must be at least 3 characters. */
3143
- 400: {
3144
- headers: {
3145
- [name: string]: unknown;
3146
- };
3147
- content?: never;
3148
- };
3149
- };
3150
- };
3151
- "permissions.list": {
3152
- parameters: {
3153
- query?: never;
3154
- header?: never;
3155
- path: {
3156
- /** @description The ID of the resource to list permissions for, e.g. `exam_1234`. */
3157
- resource: string;
3158
- };
3159
- cookie?: never;
3160
- };
3161
- requestBody?: never;
3162
- responses: {
3163
- /** @description List of permissions for the specified resource. */
3164
- 200: {
3165
- headers: {
3166
- [name: string]: unknown;
3167
- };
3168
- content: {
3169
- "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
- }[];
3188
- };
3189
- };
3190
- /** @description No access to this resource. */
3191
- 403: {
3192
- headers: {
3193
- [name: string]: unknown;
3194
- };
3195
- content?: never;
3196
- };
3197
- };
3198
- };
3199
- "permissions.assign": {
3200
- parameters: {
3201
- query?: never;
3347
+ query?: never;
3202
3348
  header?: never;
3203
3349
  path: {
3204
- /** @description The ID of the resource to assign the permission on, e.g. `exam_1234`. */
3205
- resource: string;
3350
+ id: string;
3351
+ questionId: string;
3206
3352
  };
3207
3353
  cookie?: never;
3208
3354
  };
3209
3355
  requestBody?: {
3210
3356
  content: {
3211
3357
  "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";
3249
- };
3250
- /** @enum {string} */
3251
- 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;
3358
+ message: string;
3264
3359
  };
3265
- content?: never;
3266
3360
  };
3267
3361
  };
3362
+ responses: never;
3268
3363
  };
3269
- "permissions.getActorRole": {
3364
+ "exams.export.qti3Zip": {
3270
3365
  parameters: {
3271
3366
  query?: never;
3272
3367
  header?: never;
3273
3368
  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;
3369
+ id: string;
3278
3370
  };
3279
3371
  cookie?: never;
3280
3372
  };
3281
3373
  requestBody?: never;
3282
3374
  responses: {
3283
- /** @description Role of the specified actor for the specified resource. */
3375
+ /** @description URL to download the exported QTI ZIP package. */
3284
3376
  200: {
3285
3377
  headers: {
3286
3378
  [name: string]: unknown;
3287
3379
  };
3288
3380
  content: {
3289
3381
  "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;
3382
+ /**
3383
+ * Format: uri
3384
+ * @description URL to download the exported QTI ZIP package.
3385
+ */
3386
+ url: string;
3307
3387
  };
3308
3388
  };
3309
3389
  };
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;
3321
- };
3322
- content?: never;
3323
- };
3324
3390
  };
3325
3391
  };
3326
- "permissions.delete": {
3392
+ "exams.export.qti21Zip": {
3327
3393
  parameters: {
3328
3394
  query?: never;
3329
3395
  header?: never;
3330
3396
  path: {
3331
- resource: string;
3332
- actor: (string) | string;
3397
+ id: string;
3333
3398
  };
3334
3399
  cookie?: never;
3335
3400
  };
3336
3401
  requestBody?: never;
3337
3402
  responses: {
3338
- /** @description Permission successfully removed. */
3403
+ /** @description URL to download the exported QTI ZIP package. */
3339
3404
  200: {
3340
3405
  headers: {
3341
3406
  [name: string]: unknown;
3342
3407
  };
3343
- content?: never;
3344
- };
3345
- /** @description No access to manage this resource. */
3346
- 403: {
3347
- headers: {
3348
- [name: string]: unknown;
3408
+ content: {
3409
+ "application/json": {
3410
+ /**
3411
+ * Format: uri
3412
+ * @description URL to download the exported QTI ZIP package.
3413
+ */
3414
+ url: string;
3415
+ };
3349
3416
  };
3350
- content?: never;
3351
3417
  };
3352
3418
  };
3353
3419
  };
3354
- "studentLevels.list": {
3355
- parameters: {
3356
- query?: never;
3357
- header?: never;
3358
- path?: never;
3359
- cookie?: never;
3360
- };
3361
- requestBody?: never;
3362
- responses: never;
3363
- };
3364
- "users.list": {
3420
+ "exams.list": {
3365
3421
  parameters: {
3366
- query?: never;
3422
+ query?: {
3423
+ /** @description Optional filter by folder ID, e.g. `folder_1234`. */
3424
+ folder?: string;
3425
+ /** @description Optional filter by permission role. */
3426
+ role?: "owner" | "manager" | "editor" | "viewer" | "participant";
3427
+ };
3367
3428
  header?: never;
3368
3429
  path?: never;
3369
3430
  cookie?: never;
@@ -3371,7 +3432,7 @@ interface operations {
3371
3432
  requestBody?: never;
3372
3433
  responses: never;
3373
3434
  };
3374
- "users.create": {
3435
+ "exams.create": {
3375
3436
  parameters: {
3376
3437
  query?: never;
3377
3438
  header?: never;
@@ -3381,104 +3442,117 @@ interface operations {
3381
3442
  requestBody?: {
3382
3443
  content: {
3383
3444
  "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;
3397
- };
3398
- };
3399
- };
3400
- responses: never;
3401
- };
3402
- "users.delete": {
3403
- parameters: {
3404
- query?: never;
3405
- header?: never;
3406
- path: {
3407
- id: string;
3408
- };
3409
- cookie?: never;
3410
- };
3411
- requestBody?: never;
3412
- responses: never;
3413
- };
3414
- "users.update": {
3415
- parameters: {
3416
- query?: never;
3417
- header?: never;
3418
- path: {
3419
- id: string;
3420
- };
3421
- cookie?: never;
3422
- };
3423
- requestBody?: never;
3424
- responses: never;
3425
- };
3426
- "exams.sessions.list": {
3427
- parameters: {
3428
- query?: never;
3429
- header?: never;
3430
- path: {
3431
- id: string;
3445
+ name: string;
3446
+ sourceMaterialIds?: string[] | null;
3447
+ context?: string | null;
3448
+ studentLevel?: string | null;
3449
+ subject?: string | null;
3450
+ language?: string | null;
3451
+ taxonomyId?: string | null;
3452
+ intendedDuration?: unknown | null;
3453
+ allowedGenerationQuestionTypes?: string[] | null;
3454
+ metadata?: {
3455
+ [key: string]: string | number | boolean | null;
3456
+ } | null;
3457
+ questions?: ({
3458
+ /** @description Question ID */
3459
+ id?: string;
3460
+ /** @description ID of the question type */
3461
+ type?: string;
3462
+ /** @description Title for the question (stem) */
3463
+ title?: string | null;
3464
+ /** @description Optional description for the question */
3465
+ description?: string | null;
3466
+ /** @description Settings for the question, often specific to the question type */
3467
+ settings?: {
3468
+ [key: string]: unknown;
3469
+ };
3470
+ /** @description Scoring configuration for the question */
3471
+ scoring?: {
3472
+ /** @description The type of rubric. Different rubric types have different shapes. */
3473
+ rubricType?: ("simple" | "analytical" | "holistic" | "exact-values") | null;
3474
+ /** @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. */
3475
+ criteria?: {
3476
+ id: string;
3477
+ /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3478
+ title?: string | null;
3479
+ /** @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. */
3480
+ description?: string | null;
3481
+ /** @description The default amount of points to assign if this criterion or level is selected. */
3482
+ points?: number | null;
3483
+ /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3484
+ minPoints?: number | null;
3485
+ /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3486
+ maxPoints?: number | null;
3487
+ /** @description The levels of a analytical rubric criterion. Each level represents a different point value and description for the same criterion. */
3488
+ levels?: {
3489
+ id: string;
3490
+ /** @description The title of the scoring criterion or level. Only applies to analytical levels and holistic criteria. */
3491
+ title?: string | null;
3492
+ /** @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. */
3493
+ description?: string | null;
3494
+ /** @description The default amount of points to assign if this criterion or level is selected. */
3495
+ points?: number | null;
3496
+ /** @description The minimum amount of points that can be assigned if this criterion or level is selected. */
3497
+ minPoints?: number | null;
3498
+ /** @description The maximum amount of points that can be assigned if this criterion or level is selected. */
3499
+ maxPoints?: number | null;
3500
+ }[] | null;
3501
+ }[] | null;
3502
+ /** @description Whether exact values matching should be case insensitive. Only applicable for 'exact-values' rubric type. */
3503
+ exactValuesCaseInsensitive?: boolean | null;
3504
+ /** @description Optional additional grading guidance text. */
3505
+ guidance?: string | null;
3506
+ /** @description Optional example model answer text to show to graders. */
3507
+ modelAnswer?: string | null;
3508
+ /** @description The ID of the scoring template applied, if any. */
3509
+ templateId?: string | null;
3510
+ } | null;
3511
+ /** @description Tags associated with the question for categorization and search */
3512
+ tags?: string[] | null;
3513
+ /** @description Optional external ID for the question, used to link to external systems */
3514
+ externalId?: string | null;
3515
+ /** @description Metadata for the question */
3516
+ metadata?: {
3517
+ [key: string]: string | number | boolean | null;
3518
+ } | null;
3519
+ /** @description Version number, incremented when question is edited */
3520
+ v?: number | null;
3521
+ /** @description ID of the question in the question bank */
3522
+ questionBankItemId?: string | null;
3523
+ /** @description Trace IDs for internal tracking of AI generation processes */
3524
+ traceIds?: string[] | null;
3525
+ } & {
3526
+ [key: string]: unknown;
3527
+ })[] | null;
3528
+ permissions?: {
3529
+ actor: string;
3530
+ /** @enum {string} */
3531
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
3532
+ }[] | null;
3533
+ };
3432
3534
  };
3433
- cookie?: never;
3434
3535
  };
3435
- requestBody?: never;
3436
3536
  responses: never;
3437
3537
  };
3438
- "exams.sessions.import": {
3538
+ "exams.import": {
3439
3539
  parameters: {
3440
3540
  query?: never;
3441
3541
  header?: never;
3442
- path: {
3443
- id: string;
3444
- };
3542
+ path?: never;
3445
3543
  cookie?: never;
3446
3544
  };
3447
3545
  requestBody?: {
3448
3546
  content: {
3449
3547
  "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
- }[];
3548
+ name: string;
3549
+ sourceMaterialIds?: string[];
3476
3550
  };
3477
3551
  };
3478
3552
  };
3479
3553
  responses: never;
3480
3554
  };
3481
- "exams.sessions.scan": {
3555
+ "exams.get": {
3482
3556
  parameters: {
3483
3557
  query?: never;
3484
3558
  header?: never;
@@ -3490,274 +3564,367 @@ interface operations {
3490
3564
  requestBody?: never;
3491
3565
  responses: never;
3492
3566
  };
3493
- "exams.sessions.scanDocument": {
3494
- parameters: {
3495
- query?: never;
3496
- header?: never;
3497
- path: {
3498
- id: string;
3499
- };
3500
- cookie?: never;
3501
- };
3502
- requestBody?: {
3503
- content: {
3504
- "application/json": {
3505
- /** Format: uri */
3506
- documentUrl: string;
3507
- };
3508
- };
3509
- };
3510
- responses: never;
3511
- };
3512
- "exams.sessions.get": {
3567
+ "exams.update": {
3513
3568
  parameters: {
3514
3569
  query?: never;
3515
3570
  header?: never;
3516
3571
  path: {
3517
3572
  id: string;
3518
- sessionId: string;
3519
3573
  };
3520
3574
  cookie?: never;
3521
3575
  };
3522
3576
  requestBody?: never;
3523
3577
  responses: never;
3524
3578
  };
3525
- "exams.sessions.delete": {
3579
+ "exams.delete": {
3526
3580
  parameters: {
3527
3581
  query?: never;
3528
3582
  header?: never;
3529
3583
  path: {
3530
3584
  id: string;
3531
- sessionId: string;
3532
3585
  };
3533
3586
  cookie?: never;
3534
3587
  };
3535
3588
  requestBody?: never;
3536
3589
  responses: never;
3537
3590
  };
3538
- "exams.sessions.saveFeedback": {
3591
+ "exams.duplicate": {
3539
3592
  parameters: {
3540
3593
  query?: never;
3541
3594
  header?: never;
3542
3595
  path: {
3543
3596
  id: string;
3544
- sessionId: string;
3545
3597
  };
3546
3598
  cookie?: never;
3547
3599
  };
3548
3600
  requestBody?: {
3549
3601
  content: {
3550
3602
  "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;
3603
+ name: string;
3604
+ includeSessions?: boolean;
3557
3605
  };
3558
3606
  };
3559
3607
  };
3560
3608
  responses: never;
3561
3609
  };
3562
- "exams.sessions.saveOverallFeedback": {
3610
+ "exams.print": {
3563
3611
  parameters: {
3564
3612
  query?: never;
3565
3613
  header?: never;
3566
3614
  path: {
3567
3615
  id: string;
3568
- sessionId: string;
3569
3616
  };
3570
3617
  cookie?: never;
3571
3618
  };
3572
- requestBody?: {
3573
- content: {
3574
- "application/json": {
3575
- /** @description Teacher feedback for the test as a whole */
3576
- feedback?: string | null;
3577
- };
3578
- };
3579
- };
3619
+ requestBody?: never;
3580
3620
  responses: never;
3581
3621
  };
3582
- "exams.sessions.generateOverallFeedback": {
3622
+ "exams.startGeneration": {
3583
3623
  parameters: {
3584
3624
  query?: never;
3585
3625
  header?: never;
3586
3626
  path: {
3587
3627
  id: string;
3588
- sessionId: string;
3589
3628
  };
3590
3629
  cookie?: never;
3591
3630
  };
3592
3631
  requestBody?: never;
3593
3632
  responses: never;
3594
3633
  };
3595
- "exams.sessions.acceptAllSuggestions": {
3634
+ "exams.cancelGeneration": {
3596
3635
  parameters: {
3597
3636
  query?: never;
3598
3637
  header?: never;
3599
3638
  path: {
3600
3639
  id: string;
3601
- sessionId: string;
3602
3640
  };
3603
3641
  cookie?: never;
3604
3642
  };
3605
3643
  requestBody?: never;
3606
3644
  responses: never;
3607
3645
  };
3608
- "exams.sessions.acceptSuggestion": {
3646
+ "exams.getContextSuggestions": {
3609
3647
  parameters: {
3610
3648
  query?: never;
3611
3649
  header?: never;
3612
3650
  path: {
3613
3651
  id: string;
3614
- sessionId: string;
3615
- questionId: string;
3616
3652
  };
3617
3653
  cookie?: never;
3618
3654
  };
3619
3655
  requestBody?: never;
3620
3656
  responses: never;
3621
3657
  };
3622
- "exams.sessions.editAnswer": {
3658
+ "me.get": {
3623
3659
  parameters: {
3624
3660
  query?: never;
3625
3661
  header?: never;
3626
- path: {
3627
- id: string;
3628
- sessionId: string;
3629
- questionId: string;
3630
- };
3662
+ path?: never;
3631
3663
  cookie?: never;
3632
3664
  };
3633
- requestBody?: {
3634
- content: {
3635
- "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;
3644
- };
3645
- };
3646
- };
3665
+ requestBody?: never;
3647
3666
  responses: never;
3648
3667
  };
3649
- "exams.questions.import": {
3668
+ "me.update": {
3650
3669
  parameters: {
3651
3670
  query?: never;
3652
3671
  header?: never;
3653
- path: {
3654
- id: string;
3655
- };
3672
+ path?: never;
3656
3673
  cookie?: never;
3657
3674
  };
3658
3675
  requestBody?: {
3659
3676
  content: {
3660
3677
  "application/json": {
3661
- /** @description File name */
3678
+ /** @description The user's name */
3662
3679
  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;
3680
+ /** @description A map of user preferences */
3681
+ preferences?: {
3682
+ [key: string]: unknown;
3683
+ };
3671
3684
  };
3672
3685
  };
3673
3686
  };
3674
3687
  responses: never;
3675
3688
  };
3676
- "exams.questions.generate": {
3689
+ "media.upload": {
3677
3690
  parameters: {
3678
- query?: never;
3679
- header?: never;
3680
- path: {
3681
- id: string;
3691
+ query?: {
3692
+ /** @description Original attachment filename */
3693
+ filename?: string;
3694
+ /** @description Category of file, used for grouping */
3695
+ type?: string;
3696
+ /** @description MIME type of the attachment */
3697
+ contentType?: string;
3682
3698
  };
3699
+ header?: never;
3700
+ path?: never;
3683
3701
  cookie?: never;
3684
3702
  };
3685
- requestBody?: {
3686
- content: {
3687
- "application/json": {
3688
- message: string;
3689
- questionType?: string;
3703
+ requestBody?: never;
3704
+ responses: {
3705
+ 200: {
3706
+ headers: {
3707
+ [name: string]: unknown;
3708
+ };
3709
+ content: {
3710
+ "application/json": {
3711
+ /** Format: uri */
3712
+ uploadUrl?: string;
3713
+ /** Format: uri */
3714
+ publicUrl?: string;
3715
+ };
3690
3716
  };
3691
3717
  };
3692
3718
  };
3719
+ };
3720
+ "org.get": {
3721
+ parameters: {
3722
+ query?: never;
3723
+ header?: never;
3724
+ path?: never;
3725
+ cookie?: never;
3726
+ };
3727
+ requestBody?: never;
3693
3728
  responses: never;
3694
3729
  };
3695
- "exams.questions.get": {
3730
+ "org.delete": {
3696
3731
  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
- };
3732
+ query?: never;
3701
3733
  header?: never;
3702
- path: {
3703
- /** @description Exam ID, e.g. `exam_1234`. */
3704
- id: string;
3705
- /** @description Question ID, e.g. `question_1234`, or `first` to get the first question. */
3706
- questionId: string;
3707
- };
3734
+ path?: never;
3708
3735
  cookie?: never;
3709
3736
  };
3710
3737
  requestBody?: never;
3711
3738
  responses: never;
3712
3739
  };
3713
- "exams.questions.regenerate": {
3740
+ "org.update": {
3714
3741
  parameters: {
3715
3742
  query?: never;
3716
3743
  header?: never;
3717
- path: {
3718
- id: string;
3719
- questionId: string;
3744
+ path?: never;
3745
+ cookie?: never;
3746
+ };
3747
+ requestBody?: {
3748
+ content: {
3749
+ "application/json": {
3750
+ name?: string;
3751
+ logoImageUrl?: string;
3752
+ menuColor?: string;
3753
+ accentColor?: string;
3754
+ settings?: {
3755
+ /** @description Whether users can only see other users in the same groups as them. */
3756
+ restrictGroupVisibility?: boolean;
3757
+ /** @description Whether the organization blocks public link sharing. */
3758
+ sharingBlockPublic?: boolean;
3759
+ /** @description Whether the organization blocks teachers from inviting new users. */
3760
+ sharingBlockTeachersInvitingUsers?: boolean;
3761
+ };
3762
+ };
3720
3763
  };
3764
+ };
3765
+ responses: never;
3766
+ };
3767
+ "org.customDomain.get": {
3768
+ parameters: {
3769
+ query?: never;
3770
+ header?: never;
3771
+ path?: never;
3772
+ cookie?: never;
3773
+ };
3774
+ requestBody?: never;
3775
+ responses: never;
3776
+ };
3777
+ "org.customDomain.update": {
3778
+ parameters: {
3779
+ query?: never;
3780
+ header?: never;
3781
+ path?: never;
3721
3782
  cookie?: never;
3722
3783
  };
3723
3784
  requestBody?: {
3724
3785
  content: {
3725
3786
  "application/json": {
3726
- message: string;
3787
+ customDomain?: string | null;
3727
3788
  };
3728
3789
  };
3729
3790
  };
3730
3791
  responses: never;
3731
3792
  };
3732
- "exams.export.qti3Zip": {
3793
+ "orgs.list": {
3733
3794
  parameters: {
3734
3795
  query?: never;
3735
3796
  header?: never;
3736
- path: {
3737
- id: string;
3797
+ path?: never;
3798
+ cookie?: never;
3799
+ };
3800
+ requestBody?: never;
3801
+ responses: never;
3802
+ };
3803
+ "orgs.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
+ };
3815
+ };
3816
+ };
3817
+ responses: never;
3818
+ };
3819
+ "audit-logs.list": {
3820
+ parameters: {
3821
+ query?: {
3822
+ actor?: string;
3823
+ object?: string;
3824
+ /** @description Start date (YYYY-MM-DD), inclusive */
3825
+ from?: string;
3826
+ /** @description End date (YYYY-MM-DD), inclusive */
3827
+ to?: string;
3828
+ /** @description Base64-encoded pagination cursor */
3829
+ exclusiveStartKey?: string;
3738
3830
  };
3831
+ header?: never;
3832
+ path?: never;
3739
3833
  cookie?: never;
3740
3834
  };
3741
3835
  requestBody?: never;
3742
- responses: {
3743
- /** @description URL to download the exported QTI ZIP package. */
3744
- 200: {
3745
- headers: {
3746
- [name: string]: unknown;
3836
+ responses: never;
3837
+ };
3838
+ "audit-logs.export": {
3839
+ parameters: {
3840
+ query: {
3841
+ /** @description Start date (YYYY-MM-DD), inclusive */
3842
+ from: string;
3843
+ /** @description End date (YYYY-MM-DD), inclusive */
3844
+ to: string;
3845
+ actor?: string;
3846
+ object?: string;
3847
+ };
3848
+ header?: never;
3849
+ path?: never;
3850
+ cookie?: never;
3851
+ };
3852
+ requestBody?: never;
3853
+ responses: never;
3854
+ };
3855
+ "apiKeys.get": {
3856
+ parameters: {
3857
+ query?: never;
3858
+ header?: never;
3859
+ path?: never;
3860
+ cookie?: never;
3861
+ };
3862
+ requestBody?: never;
3863
+ responses: never;
3864
+ };
3865
+ "apiKeys.reset": {
3866
+ parameters: {
3867
+ query?: never;
3868
+ header?: never;
3869
+ path?: never;
3870
+ cookie?: never;
3871
+ };
3872
+ requestBody?: never;
3873
+ responses: never;
3874
+ };
3875
+ "attributes.list": {
3876
+ parameters: {
3877
+ query?: never;
3878
+ header?: never;
3879
+ path?: never;
3880
+ cookie?: never;
3881
+ };
3882
+ requestBody?: never;
3883
+ responses: never;
3884
+ };
3885
+ "attributes.create": {
3886
+ parameters: {
3887
+ query?: never;
3888
+ header?: never;
3889
+ path?: never;
3890
+ cookie?: never;
3891
+ };
3892
+ requestBody?: {
3893
+ content: {
3894
+ "application/json": {
3895
+ name: string;
3896
+ /** @enum {string} */
3897
+ attributeType: "string" | "category" | "studentLevel" | "subject";
3898
+ options?: string[];
3899
+ showInStudentDashboard?: boolean;
3900
+ showAsStudentPreference?: boolean;
3901
+ position?: number;
3902
+ appearanceColor?: (string) | null;
3747
3903
  };
3748
- content: {
3749
- "application/json": {
3750
- /**
3751
- * Format: uri
3752
- * @description URL to download the exported QTI ZIP package.
3753
- */
3754
- url: string;
3755
- };
3904
+ };
3905
+ };
3906
+ responses: never;
3907
+ };
3908
+ "attributes.reorder": {
3909
+ parameters: {
3910
+ query?: never;
3911
+ header?: never;
3912
+ path?: never;
3913
+ cookie?: never;
3914
+ };
3915
+ requestBody?: {
3916
+ content: {
3917
+ "application/json": {
3918
+ order: {
3919
+ id: string;
3920
+ position: number;
3921
+ }[];
3756
3922
  };
3757
3923
  };
3758
3924
  };
3925
+ responses: never;
3759
3926
  };
3760
- "exams.export.qti21Zip": {
3927
+ "attributes.update": {
3761
3928
  parameters: {
3762
3929
  query?: never;
3763
3930
  header?: never;
@@ -3766,33 +3933,37 @@ interface operations {
3766
3933
  };
3767
3934
  cookie?: never;
3768
3935
  };
3769
- requestBody?: never;
3770
- responses: {
3771
- /** @description URL to download the exported QTI ZIP package. */
3772
- 200: {
3773
- headers: {
3774
- [name: string]: unknown;
3775
- };
3776
- content: {
3777
- "application/json": {
3778
- /**
3779
- * Format: uri
3780
- * @description URL to download the exported QTI ZIP package.
3781
- */
3782
- url: string;
3783
- };
3936
+ requestBody?: {
3937
+ content: {
3938
+ "application/json": {
3939
+ name?: string;
3940
+ /** @enum {string} */
3941
+ attributeType?: "string" | "category" | "studentLevel" | "subject";
3942
+ options?: string[];
3943
+ showInStudentDashboard?: boolean;
3944
+ showAsStudentPreference?: boolean;
3945
+ position?: number;
3946
+ appearanceColor?: (string) | null;
3784
3947
  };
3785
3948
  };
3786
3949
  };
3950
+ responses: never;
3787
3951
  };
3788
- "exams.list": {
3952
+ "attributes.delete": {
3789
3953
  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";
3954
+ query?: never;
3955
+ header?: never;
3956
+ path: {
3957
+ id: string;
3795
3958
  };
3959
+ cookie?: never;
3960
+ };
3961
+ requestBody?: never;
3962
+ responses: never;
3963
+ };
3964
+ "taxonomies.list": {
3965
+ parameters: {
3966
+ query?: never;
3796
3967
  header?: never;
3797
3968
  path?: never;
3798
3969
  cookie?: never;
@@ -3800,7 +3971,7 @@ interface operations {
3800
3971
  requestBody?: never;
3801
3972
  responses: never;
3802
3973
  };
3803
- "exams.create": {
3974
+ "taxonomies.create": {
3804
3975
  parameters: {
3805
3976
  query?: never;
3806
3977
  header?: never;
@@ -3811,195 +3982,337 @@ interface operations {
3811
3982
  content: {
3812
3983
  "application/json": {
3813
3984
  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;
3985
+ description?: string;
3986
+ instructions?: string;
3987
+ levels: {
3988
+ name?: string;
3989
+ instructions?: string;
3990
+ }[];
3991
+ };
3992
+ };
3993
+ };
3994
+ responses: never;
3995
+ };
3996
+ "taxonomies.update": {
3997
+ parameters: {
3998
+ query?: never;
3999
+ header?: never;
4000
+ path: {
4001
+ id: string;
4002
+ };
4003
+ cookie?: never;
4004
+ };
4005
+ requestBody?: {
4006
+ content: {
4007
+ "application/json": {
4008
+ name: string;
4009
+ description?: string;
4010
+ instructions?: string;
4011
+ levels: {
4012
+ name?: string;
4013
+ instructions?: string;
4014
+ }[];
4015
+ } & {
4016
+ [key: string]: unknown;
4017
+ };
4018
+ };
4019
+ };
4020
+ responses: never;
4021
+ };
4022
+ "taxonomies.delete": {
4023
+ parameters: {
4024
+ query?: never;
4025
+ header?: never;
4026
+ path: {
4027
+ id: string;
4028
+ };
4029
+ cookie?: never;
4030
+ };
4031
+ requestBody?: never;
4032
+ responses: never;
4033
+ };
4034
+ "permissions.autocomplete": {
4035
+ parameters: {
4036
+ query: {
4037
+ /** @description Search query (min 3 characters) */
4038
+ q: string;
4039
+ /** @description Type of entity to search */
4040
+ type?: "user" | "group";
4041
+ };
4042
+ header?: never;
4043
+ path?: never;
4044
+ cookie?: never;
4045
+ };
4046
+ requestBody?: never;
4047
+ responses: {
4048
+ /** @description List of matching users and groups. */
4049
+ 200: {
4050
+ headers: {
4051
+ [name: string]: unknown;
4052
+ };
4053
+ content?: never;
4054
+ };
4055
+ /** @description Query must be at least 3 characters. */
4056
+ 400: {
4057
+ headers: {
4058
+ [name: string]: unknown;
4059
+ };
4060
+ content?: never;
4061
+ };
4062
+ };
4063
+ };
4064
+ "permissions.list": {
4065
+ parameters: {
4066
+ query?: never;
4067
+ header?: never;
4068
+ path: {
4069
+ /** @description The ID of the resource to list permissions for, e.g. `exam_1234`. */
4070
+ resource: string;
4071
+ };
4072
+ cookie?: never;
4073
+ };
4074
+ requestBody?: never;
4075
+ responses: {
4076
+ /** @description List of permissions for the specified resource. */
4077
+ 200: {
4078
+ headers: {
4079
+ [name: string]: unknown;
4080
+ };
4081
+ content: {
4082
+ "application/json": {
4083
+ actor: {
4084
+ id: string;
4085
+ name?: string;
4086
+ /** Format: uri */
4087
+ avatar?: string;
4088
+ /** @enum {string} */
4089
+ type: "user" | "group" | "org";
4090
+ /** @enum {string} */
4091
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
4092
+ };
4093
+ /** @enum {string} */
4094
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4095
+ /** Format: date-time */
4096
+ createdAt: string;
4097
+ /** Format: date-time */
4098
+ updatedAt: string;
4099
+ createdBy: string;
4100
+ }[];
4101
+ };
4102
+ };
4103
+ /** @description No access to this resource. */
4104
+ 403: {
4105
+ headers: {
4106
+ [name: string]: unknown;
4107
+ };
4108
+ content?: never;
4109
+ };
4110
+ };
4111
+ };
4112
+ "permissions.assign": {
4113
+ parameters: {
4114
+ query?: never;
4115
+ header?: never;
4116
+ path: {
4117
+ /** @description The ID of the resource to assign the permission on, e.g. `exam_1234`. */
4118
+ resource: string;
4119
+ };
4120
+ cookie?: never;
4121
+ };
4122
+ requestBody?: {
4123
+ content: {
4124
+ "application/json": {
4125
+ /** @description The ID of the actor to assign the permission to, e.g. `user_1234`, `group_1234` or `org_1234`. */
4126
+ actor: string;
4127
+ /** @enum {string} */
4128
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4129
+ } | {
4130
+ /**
4131
+ * Format: email
4132
+ * @description The email of the user to add or invite.
4133
+ */
4134
+ email: string;
4135
+ /** @enum {string} */
4136
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4137
+ /**
4138
+ * @description Whether to send an invitation email if the user does not exist. Defaults to false.
4139
+ * @default false
4140
+ */
4141
+ sendInvite?: boolean;
4142
+ };
4143
+ };
4144
+ };
4145
+ responses: {
4146
+ /** @description The created or updated permission. */
4147
+ 201: {
4148
+ headers: {
4149
+ [name: string]: unknown;
4150
+ };
4151
+ content: {
4152
+ "application/json": {
4153
+ actor: {
4154
+ id: string;
4155
+ name?: string;
4156
+ /** Format: uri */
4157
+ avatar?: string;
4158
+ /** @enum {string} */
4159
+ type: "user" | "group" | "org";
4160
+ /** @enum {string} */
4161
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
4162
+ };
4163
+ /** @enum {string} */
4164
+ role: "owner" | "manager" | "editor" | "viewer" | "participant";
4165
+ /** Format: date-time */
4166
+ createdAt: string;
4167
+ /** Format: date-time */
4168
+ updatedAt: string;
4169
+ createdBy: string;
4170
+ };
4171
+ };
4172
+ };
4173
+ /** @description No access to manage this resource. */
4174
+ 403: {
4175
+ headers: {
4176
+ [name: string]: unknown;
4177
+ };
4178
+ content?: never;
4179
+ };
4180
+ };
4181
+ };
4182
+ "permissions.getActorRole": {
4183
+ parameters: {
4184
+ query?: never;
4185
+ header?: never;
4186
+ path: {
4187
+ /** @description The ID of the actor to check role for, e.g. `user_abcd`. */
4188
+ actor: ((string) | "me") | string;
4189
+ /** @description The ID of the resource to check role for, e.g. `exam_1234`. */
4190
+ resource: string;
4191
+ };
4192
+ cookie?: never;
4193
+ };
4194
+ requestBody?: never;
4195
+ responses: {
4196
+ /** @description Role of the specified actor for the specified resource. */
4197
+ 200: {
4198
+ headers: {
4199
+ [name: string]: unknown;
4200
+ };
4201
+ content: {
4202
+ "application/json": {
4203
+ actor: {
4204
+ id: string;
4205
+ name?: string;
4206
+ /** Format: uri */
4207
+ avatar?: string;
4208
+ /** @enum {string} */
4209
+ type: "user" | "group" | "org";
4210
+ /** @enum {string} */
4211
+ orgRole?: "owner" | "admin" | "teacher" | "student" | "member";
3837
4212
  };
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;
3898
4213
  /** @enum {string} */
3899
4214
  role: "owner" | "manager" | "editor" | "viewer" | "participant";
3900
- }[] | null;
4215
+ /** Format: date-time */
4216
+ createdAt: string;
4217
+ /** Format: date-time */
4218
+ updatedAt: string;
4219
+ createdBy: string;
4220
+ };
3901
4221
  };
3902
4222
  };
3903
- };
3904
- responses: never;
3905
- };
3906
- "exams.import": {
3907
- parameters: {
3908
- query?: never;
3909
- header?: never;
3910
- path?: never;
3911
- cookie?: never;
3912
- };
3913
- requestBody?: {
3914
- content: {
3915
- "application/json": {
3916
- name: string;
3917
- sourceMaterialIds?: string[];
4223
+ /** @description No access to this resource. */
4224
+ 403: {
4225
+ headers: {
4226
+ [name: string]: unknown;
4227
+ };
4228
+ content?: never;
4229
+ };
4230
+ /** @description The specified actor has no access to the specified resource. */
4231
+ 404: {
4232
+ headers: {
4233
+ [name: string]: unknown;
3918
4234
  };
4235
+ content?: never;
3919
4236
  };
3920
4237
  };
3921
- responses: never;
3922
4238
  };
3923
- "exams.get": {
4239
+ "permissions.delete": {
3924
4240
  parameters: {
3925
4241
  query?: never;
3926
4242
  header?: never;
3927
4243
  path: {
3928
- id: string;
4244
+ resource: string;
4245
+ actor: (string) | string;
3929
4246
  };
3930
4247
  cookie?: never;
3931
4248
  };
3932
4249
  requestBody?: never;
3933
- responses: never;
4250
+ responses: {
4251
+ /** @description Permission successfully removed. */
4252
+ 200: {
4253
+ headers: {
4254
+ [name: string]: unknown;
4255
+ };
4256
+ content?: never;
4257
+ };
4258
+ /** @description No access to manage this resource. */
4259
+ 403: {
4260
+ headers: {
4261
+ [name: string]: unknown;
4262
+ };
4263
+ content?: never;
4264
+ };
4265
+ };
3934
4266
  };
3935
- "exams.update": {
4267
+ "studentLevels.list": {
3936
4268
  parameters: {
3937
4269
  query?: never;
3938
4270
  header?: never;
3939
- path: {
3940
- id: string;
3941
- };
4271
+ path?: never;
3942
4272
  cookie?: never;
3943
4273
  };
3944
4274
  requestBody?: never;
3945
4275
  responses: never;
3946
4276
  };
3947
- "exams.delete": {
4277
+ "users.list": {
3948
4278
  parameters: {
3949
4279
  query?: never;
3950
4280
  header?: never;
3951
- path: {
3952
- id: string;
3953
- };
4281
+ path?: never;
3954
4282
  cookie?: never;
3955
4283
  };
3956
4284
  requestBody?: never;
3957
4285
  responses: never;
3958
4286
  };
3959
- "exams.duplicate": {
4287
+ "users.create": {
3960
4288
  parameters: {
3961
4289
  query?: never;
3962
4290
  header?: never;
3963
- path: {
3964
- id: string;
3965
- };
4291
+ path?: never;
3966
4292
  cookie?: never;
3967
4293
  };
3968
4294
  requestBody?: {
3969
4295
  content: {
3970
4296
  "application/json": {
3971
- name: string;
3972
- includeSessions?: boolean;
4297
+ /** Format: email */
4298
+ email: string;
4299
+ name?: string;
4300
+ /**
4301
+ * @default teacher
4302
+ * @enum {string}
4303
+ */
4304
+ role?: "owner" | "admin" | "teacher" | "student" | "member";
4305
+ /**
4306
+ * @description Whether to send an invitation email. Defaults to false.
4307
+ * @default false
4308
+ */
4309
+ sendInvite?: boolean;
3973
4310
  };
3974
4311
  };
3975
4312
  };
3976
4313
  responses: never;
3977
4314
  };
3978
- "exams.print": {
3979
- parameters: {
3980
- query?: never;
3981
- header?: never;
3982
- path: {
3983
- id: string;
3984
- };
3985
- cookie?: never;
3986
- };
3987
- requestBody?: never;
3988
- responses: never;
3989
- };
3990
- "exams.startGeneration": {
3991
- parameters: {
3992
- query?: never;
3993
- header?: never;
3994
- path: {
3995
- id: string;
3996
- };
3997
- cookie?: never;
3998
- };
3999
- requestBody?: never;
4000
- responses: never;
4001
- };
4002
- "exams.cancelGeneration": {
4315
+ "users.delete": {
4003
4316
  parameters: {
4004
4317
  query?: never;
4005
4318
  header?: never;
@@ -4011,7 +4324,7 @@ interface operations {
4011
4324
  requestBody?: never;
4012
4325
  responses: never;
4013
4326
  };
4014
- "exams.getContextSuggestions": {
4327
+ "users.update": {
4015
4328
  parameters: {
4016
4329
  query?: never;
4017
4330
  header?: never;
@@ -4434,6 +4747,18 @@ interface operations {
4434
4747
  } & {
4435
4748
  [key: string]: unknown;
4436
4749
  };
4750
+ externalId?: string;
4751
+ parentSourceMaterialId?: string;
4752
+ summary?: string;
4753
+ factsCount?: number;
4754
+ /** @enum {string} */
4755
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4756
+ numberOfPages?: number;
4757
+ chapterMarkers?: {
4758
+ title: string;
4759
+ startPage: number;
4760
+ endPage: number;
4761
+ }[];
4437
4762
  convertedSourceV2?: {
4438
4763
  /** Format: uri */
4439
4764
  url: string;
@@ -4456,20 +4781,8 @@ interface operations {
4456
4781
  } & {
4457
4782
  [key: string]: unknown;
4458
4783
  };
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
4784
  topics?: unknown;
4785
+ cacheName?: string;
4473
4786
  }[];
4474
4787
  };
4475
4788
  };
@@ -4528,6 +4841,18 @@ interface operations {
4528
4841
  } & {
4529
4842
  [key: string]: unknown;
4530
4843
  };
4844
+ externalId?: string;
4845
+ parentSourceMaterialId?: string;
4846
+ summary?: string;
4847
+ factsCount?: number;
4848
+ /** @enum {string} */
4849
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
4850
+ numberOfPages?: number;
4851
+ chapterMarkers?: {
4852
+ title: string;
4853
+ startPage: number;
4854
+ endPage: number;
4855
+ }[];
4531
4856
  convertedSourceV2?: {
4532
4857
  /** Format: uri */
4533
4858
  url: string;
@@ -4550,20 +4875,8 @@ interface operations {
4550
4875
  } & {
4551
4876
  [key: string]: unknown;
4552
4877
  };
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
4878
  topics?: unknown;
4879
+ cacheName?: string;
4567
4880
  };
4568
4881
  };
4569
4882
  };
@@ -4608,6 +4921,18 @@ interface operations {
4608
4921
  } & {
4609
4922
  [key: string]: unknown;
4610
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
+ }[];
4611
4936
  convertedSourceV2?: {
4612
4937
  /** Format: uri */
4613
4938
  url: string;
@@ -4630,20 +4955,8 @@ interface operations {
4630
4955
  } & {
4631
4956
  [key: string]: unknown;
4632
4957
  };
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
4958
  topics?: unknown;
4959
+ cacheName?: string;
4647
4960
  };
4648
4961
  };
4649
4962
  };
@@ -4730,6 +5043,18 @@ interface operations {
4730
5043
  } & {
4731
5044
  [key: string]: unknown;
4732
5045
  };
5046
+ externalId?: string;
5047
+ parentSourceMaterialId?: string;
5048
+ summary?: string;
5049
+ factsCount?: number;
5050
+ /** @enum {string} */
5051
+ processingStatus?: "pending" | "converting" | "summarizing" | "extracting_topics" | "extracting_facts" | "completed" | "failed";
5052
+ numberOfPages?: number;
5053
+ chapterMarkers?: {
5054
+ title: string;
5055
+ startPage: number;
5056
+ endPage: number;
5057
+ }[];
4733
5058
  convertedSourceV2?: {
4734
5059
  /** Format: uri */
4735
5060
  url: string;
@@ -4752,20 +5077,8 @@ interface operations {
4752
5077
  } & {
4753
5078
  [key: string]: unknown;
4754
5079
  };
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
5080
  topics?: unknown;
5081
+ cacheName?: string;
4769
5082
  };
4770
5083
  };
4771
5084
  };
@@ -5451,6 +5764,71 @@ interface operations {
5451
5764
  };
5452
5765
  responses: never;
5453
5766
  };
5767
+ "prompts.list": {
5768
+ parameters: {
5769
+ query?: {
5770
+ /** @description Only return prompts of this type */
5771
+ type?: string;
5772
+ /** @description Language for the default prompts, falls back to the user's preference or 'en' */
5773
+ language?: string;
5774
+ };
5775
+ header?: never;
5776
+ path?: never;
5777
+ cookie?: never;
5778
+ };
5779
+ requestBody?: never;
5780
+ responses: never;
5781
+ };
5782
+ "prompts.create": {
5783
+ parameters: {
5784
+ query?: never;
5785
+ header?: never;
5786
+ path?: never;
5787
+ cookie?: never;
5788
+ };
5789
+ requestBody?: {
5790
+ content: {
5791
+ "application/json": {
5792
+ name: string;
5793
+ promptType: string;
5794
+ content: string;
5795
+ };
5796
+ };
5797
+ };
5798
+ responses: never;
5799
+ };
5800
+ "prompts.delete": {
5801
+ parameters: {
5802
+ query?: never;
5803
+ header?: never;
5804
+ path: {
5805
+ id: string;
5806
+ };
5807
+ cookie?: never;
5808
+ };
5809
+ requestBody?: never;
5810
+ responses: never;
5811
+ };
5812
+ "prompts.update": {
5813
+ parameters: {
5814
+ query?: never;
5815
+ header?: never;
5816
+ path: {
5817
+ id: string;
5818
+ };
5819
+ cookie?: never;
5820
+ };
5821
+ requestBody?: {
5822
+ content: {
5823
+ "application/json": {
5824
+ name?: string;
5825
+ promptType?: string;
5826
+ content?: string;
5827
+ };
5828
+ };
5829
+ };
5830
+ responses: never;
5831
+ };
5454
5832
  "jobs.get": {
5455
5833
  parameters: {
5456
5834
  query?: never;
@@ -5528,38 +5906,6 @@ interface _PathOverrides {
5528
5906
  "embedSessions.revoke": {
5529
5907
  id: string;
5530
5908
  };
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
5909
  "exams.sessions.list": {
5564
5910
  examId: string;
5565
5911
  };
@@ -5606,6 +5952,24 @@ interface _PathOverrides {
5606
5952
  sessionId: string;
5607
5953
  questionId: string;
5608
5954
  };
5955
+ "exams.sessions.comments.list": {
5956
+ examId: string;
5957
+ sessionId: string;
5958
+ };
5959
+ "exams.sessions.comments.create": {
5960
+ examId: string;
5961
+ sessionId: string;
5962
+ };
5963
+ "exams.sessions.comments.update": {
5964
+ examId: string;
5965
+ sessionId: string;
5966
+ commentId: string;
5967
+ };
5968
+ "exams.sessions.comments.delete": {
5969
+ examId: string;
5970
+ sessionId: string;
5971
+ commentId: string;
5972
+ };
5609
5973
  "exams.questions.import": {
5610
5974
  examId: string;
5611
5975
  };
@@ -5650,6 +6014,38 @@ interface _PathOverrides {
5650
6014
  "exams.getContextSuggestions": {
5651
6015
  examId: string;
5652
6016
  };
6017
+ "attributes.update": {
6018
+ id: string;
6019
+ };
6020
+ "attributes.delete": {
6021
+ id: string;
6022
+ };
6023
+ "taxonomies.update": {
6024
+ id: string;
6025
+ };
6026
+ "taxonomies.delete": {
6027
+ id: string;
6028
+ };
6029
+ "permissions.list": {
6030
+ resource: string;
6031
+ };
6032
+ "permissions.assign": {
6033
+ resource: string;
6034
+ };
6035
+ "permissions.getActorRole": {
6036
+ actor: string;
6037
+ resource: string;
6038
+ };
6039
+ "permissions.delete": {
6040
+ resource: string;
6041
+ actor: string;
6042
+ };
6043
+ "users.update": {
6044
+ id: string;
6045
+ };
6046
+ "users.delete": {
6047
+ id: string;
6048
+ };
5653
6049
  "practiceSpaces.get": {
5654
6050
  id: string;
5655
6051
  };
@@ -5749,6 +6145,12 @@ interface _PathOverrides {
5749
6145
  "deleteRubrics:id": {
5750
6146
  id: string;
5751
6147
  };
6148
+ "prompts.update": {
6149
+ id: string;
6150
+ };
6151
+ "prompts.delete": {
6152
+ id: string;
6153
+ };
5752
6154
  "jobs.get": {
5753
6155
  id: string;
5754
6156
  };
@@ -6017,553 +6419,610 @@ declare class EmbedSessions {
6017
6419
  revoke(id: string, options?: ExamplaryRequestOptions): Promise<Response<"embedSessions.revoke">>;
6018
6420
  revoke(args: Args<"embedSessions.revoke">, options?: ExamplaryRequestOptions): Promise<Response<"embedSessions.revoke">>;
6019
6421
  }
6020
- declare class Me {
6422
+ declare class ExamsSessionsComments {
6021
6423
  private readonly ctx;
6022
6424
  constructor(ctx: ClientContext);
6023
6425
  /**
6024
- * Get me
6426
+ * List session comments
6025
6427
  *
6026
- * Get the current user's account details.
6428
+ * Get a list of all comments left on a student's assessment session.
6027
6429
  *
6028
- * API endpoint: `GET /me`
6430
+ * API endpoint: `GET /exams/{examId}/sessions/{sessionId}/comments`
6029
6431
  */
6030
- get(args?: Args<"me.get">, options?: ExamplaryRequestOptions): Promise<Response<"me.get">>;
6432
+ list(args: Args<"exams.sessions.comments.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.list">>;
6031
6433
  /**
6032
- * Update me
6434
+ * Create session comment
6033
6435
  *
6034
- * Update the current user's account details.
6436
+ * Add a new comment to a question in a student's assessment session.
6035
6437
  *
6036
- * API endpoint: `PATCH /me`
6438
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/comments`
6037
6439
  */
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);
6440
+ create(args: Args<"exams.sessions.comments.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.create">>;
6043
6441
  /**
6044
- * Get file upload URL
6442
+ * Update session comment
6045
6443
  *
6046
- * Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
6444
+ * Edit the body of an existing session comment.
6047
6445
  *
6048
- * API endpoint: `GET /media/upload`
6446
+ * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/comments/{commentId}`
6049
6447
  */
6050
- upload(args: Args$1, options?: ExamplaryRequestOptions): Promise<Response$1>;
6448
+ update(args: Args<"exams.sessions.comments.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.update">>;
6449
+ /**
6450
+ * Delete session comment
6451
+ *
6452
+ * Remove a comment from a session.
6453
+ *
6454
+ * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}/comments/{commentId}`
6455
+ */
6456
+ delete(args: Args<"exams.sessions.comments.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.comments.delete">>;
6051
6457
  }
6052
- declare class OrgCustomDomain {
6458
+ declare class ExamsSessions {
6053
6459
  private readonly ctx;
6460
+ readonly comments: ExamsSessionsComments;
6054
6461
  constructor(ctx: ClientContext);
6055
6462
  /**
6056
- * Get custom domain configuration
6463
+ * List exam sessions
6057
6464
  *
6058
- * API endpoint: `GET /org/custom-domain`
6465
+ * Get a list of all student sessions for an exam, representing a set of answers from a student.
6466
+ *
6467
+ * API endpoint: `GET /exams/{examId}/sessions`
6059
6468
  */
6060
- get(args?: Args<"org.customDomain.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.get">>;
6469
+ list(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6470
+ list(args: Args<"exams.sessions.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.list">>;
6061
6471
  /**
6062
- * Update custom domain configuration
6472
+ * Create session
6063
6473
  *
6064
- * API endpoint: `POST /org/custom-domain`
6474
+ * Manually create a session, possibly from uploaded data.
6475
+ *
6476
+ * API endpoint: `POST /exams/{examId}/sessions`
6065
6477
  */
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);
6478
+ import(args: Args<"exams.sessions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.import">>;
6072
6479
  /**
6073
- * Get organization
6480
+ * Get answers from scan
6074
6481
  *
6075
- * API endpoint: `GET /org`
6482
+ * Scan student answers from a document.
6483
+ *
6484
+ * API endpoint: `POST /exams/{examId}/sessions/scan`
6076
6485
  */
6077
- get(args?: Args<"org.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.get">>;
6486
+ scan(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6487
+ scan(args: Args<"exams.sessions.scan">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scan">>;
6078
6488
  /**
6079
- * Update organization
6489
+ * Scan document for student answers
6080
6490
  *
6081
- * API endpoint: `PATCH /org`
6491
+ * Start a background task to extract student answers from an uploaded PDF document.
6492
+ *
6493
+ * API endpoint: `POST /exams/{examId}/sessions/scan-document`
6082
6494
  */
6083
- update(args?: Args<"org.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.update">>;
6495
+ scanDocument(args: Args<"exams.sessions.scanDocument">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scanDocument">>;
6084
6496
  /**
6085
- * Delete organization
6497
+ * Get exam session
6086
6498
  *
6087
- * API endpoint: `DELETE /org`
6499
+ * Get a single exam session by its ID, representing a set of answers from a student.
6500
+ *
6501
+ * API endpoint: `GET /exams/{examId}/sessions/{sessionId}`
6088
6502
  */
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);
6503
+ get(args: Args<"exams.sessions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.get">>;
6094
6504
  /**
6095
- * List all organizations
6505
+ * Delete exam session
6096
6506
  *
6097
- * API endpoint: `GET /orgs`
6507
+ * Remove an exam session.
6508
+ *
6509
+ * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}`
6098
6510
  */
6099
- list(args?: Args<"orgs.list">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.list">>;
6511
+ delete(args: Args<"exams.sessions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.delete">>;
6100
6512
  /**
6101
- * Create a new organization
6513
+ * Provide feedback
6102
6514
  *
6103
- * Create a new workspace to collaborate with others on exams.
6515
+ * Set teacher feedback and/or a grade for a specific question in an exam session.
6104
6516
  *
6105
- * API endpoint: `POST /orgs`
6517
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/feedback`
6106
6518
  */
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);
6519
+ saveFeedback(args: Args<"exams.sessions.saveFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveFeedback">>;
6112
6520
  /**
6113
- * Get API key
6521
+ * Provide overall feedback
6114
6522
  *
6115
- * Get the API key for the current org/user combination. Creates one if none exists.
6523
+ * Set teacher feedback for the test as a whole in an exam session.
6116
6524
  *
6117
- * API endpoint: `GET /api-keys`
6525
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/overall-feedback`
6118
6526
  */
6119
- get(args?: Args<"apiKeys.get">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.get">>;
6527
+ saveOverallFeedback(args: Args<"exams.sessions.saveOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveOverallFeedback">>;
6120
6528
  /**
6121
- * Reset API key
6529
+ * Generate overall feedback
6122
6530
  *
6123
- * Invalidate old API keys for this org/user and create a new one.
6531
+ * Generate feedback for the test as a whole in an exam session.
6124
6532
  *
6125
- * API endpoint: `POST /api-keys/reset`
6533
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/generate-overall-feedback`
6126
6534
  */
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);
6535
+ generateOverallFeedback(args: Args<"exams.sessions.generateOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.generateOverallFeedback">>;
6132
6536
  /**
6133
- * List attributes
6537
+ * Accept AI grading suggestions
6134
6538
  *
6135
- * Get all custom attributes configured for the current workspace.
6539
+ * Accept all AI-generated grading suggestions for the exam session.
6136
6540
  *
6137
- * API endpoint: `GET /attributes`
6541
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/accept-all`
6138
6542
  */
6139
- list(args?: Args<"attributes.list">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.list">>;
6543
+ acceptAllSuggestions(args: Args<"exams.sessions.acceptAllSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptAllSuggestions">>;
6140
6544
  /**
6141
- * Create attribute
6545
+ * Accept single AI grading suggestion
6546
+ *
6547
+ * Accept a single AI-generated grading suggestion for the exam session.
6548
+ *
6549
+ * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/{questionId}/accept`
6550
+ */
6551
+ acceptSuggestion(args: Args<"exams.sessions.acceptSuggestion">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptSuggestion">>;
6552
+ /**
6553
+ * Edit answer
6554
+ *
6555
+ * Edit a single answer in an exam session.
6556
+ *
6557
+ * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/answers/{questionId}`
6558
+ */
6559
+ editAnswer(args: Args<"exams.sessions.editAnswer">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.editAnswer">>;
6560
+ }
6561
+ declare class ExamsQuestions {
6562
+ private readonly ctx;
6563
+ constructor(ctx: ClientContext);
6564
+ /**
6565
+ * Import questions
6142
6566
  *
6143
- * Create a new custom attribute in the current workspace.
6567
+ * Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
6144
6568
  *
6145
- * API endpoint: `POST /attributes`
6569
+ * API endpoint: `POST /exams/{examId}/questions/import`
6146
6570
  */
6147
- create(args?: Args<"attributes.create">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.create">>;
6571
+ import(args: Args<"exams.questions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.import">>;
6148
6572
  /**
6149
- * Reorder attributes
6573
+ * Generate question
6150
6574
  *
6151
- * Update the position of multiple attributes at once.
6575
+ * Generate a new question for the exam using an AI prompt.
6152
6576
  *
6153
- * API endpoint: `POST /attributes/reorder`
6577
+ * API endpoint: `POST /exams/{examId}/questions/generate`
6154
6578
  */
6155
- reorder(args?: Args<"attributes.reorder">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.reorder">>;
6579
+ generate(args: Args<"exams.questions.generate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.generate">>;
6156
6580
  /**
6157
- * Update attribute
6581
+ * Get question
6158
6582
  *
6159
- * Update an existing attribute in the current workspace.
6583
+ * Retrieve a question by its ID.
6160
6584
  *
6161
- * API endpoint: `POST /attributes/{id}`
6585
+ * API endpoint: `GET /exams/{examId}/questions/{questionId}`
6162
6586
  */
6163
- update(args: Args<"attributes.update">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.update">>;
6587
+ get(args: Args<"exams.questions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.get">>;
6164
6588
  /**
6165
- * Delete attribute
6589
+ * Regenerate question
6166
6590
  *
6167
- * Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
6591
+ * Update a question using an AI prompt.
6168
6592
  *
6169
- * API endpoint: `DELETE /attributes/{id}`
6593
+ * API endpoint: `POST /exams/{examId}/questions/{questionId}/generate`
6170
6594
  */
6171
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6172
- delete(args: Args<"attributes.delete">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6595
+ regenerate(args: Args<"exams.questions.regenerate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.regenerate">>;
6173
6596
  }
6174
- declare class Taxonomies {
6597
+ declare class ExamsExport {
6175
6598
  private readonly ctx;
6176
6599
  constructor(ctx: ClientContext);
6177
6600
  /**
6178
- * Get taxonomies
6179
- *
6180
- * Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
6181
- *
6182
- * API endpoint: `GET /taxonomies`
6183
- */
6184
- list(args?: Args<"taxonomies.list">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.list">>;
6185
- /**
6186
- * Create taxonomy
6601
+ * Export QTI 3 package
6187
6602
  *
6188
- * Save a new taxonomy in the current workspace.
6603
+ * Export an exam as a QTI 3 ZIP package.
6189
6604
  *
6190
- * API endpoint: `POST /taxonomies`
6605
+ * API endpoint: `POST /exams/{examId}/export/qti3-zip`
6191
6606
  */
6192
- create(args?: Args<"taxonomies.create">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.create">>;
6607
+ qti3Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6608
+ qti3Zip(args: Args<"exams.export.qti3Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti3Zip">>;
6193
6609
  /**
6194
- * Update taxonomy
6610
+ * Export QTI 2.1 package
6195
6611
  *
6196
- * Update an existing taxonomy in the current workspace.
6612
+ * Export an exam as a QTI 2.1 ZIP package.
6197
6613
  *
6198
- * API endpoint: `POST /taxonomies/{id}`
6614
+ * API endpoint: `POST /exams/{examId}/export/qti21-zip`
6199
6615
  */
6200
- update(args: Args<"taxonomies.update">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.update">>;
6616
+ qti21Zip(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6617
+ qti21Zip(args: Args<"exams.export.qti21Zip">, options?: ExamplaryRequestOptions): Promise<Response<"exams.export.qti21Zip">>;
6618
+ }
6619
+ declare class Exams {
6620
+ private readonly ctx;
6621
+ readonly sessions: ExamsSessions;
6622
+ readonly questions: ExamsQuestions;
6623
+ readonly export: ExamsExport;
6624
+ constructor(ctx: ClientContext);
6201
6625
  /**
6202
- * Delete taxonomy
6626
+ * List exams
6203
6627
  *
6204
- * Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
6628
+ * Get a list of all exams within your workspace.
6205
6629
  *
6206
- * API endpoint: `DELETE /taxonomies/{id}`
6630
+ * API endpoint: `GET /exams`
6207
6631
  */
6208
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6209
- delete(args: Args<"taxonomies.delete">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6210
- }
6211
- declare class Permissions {
6212
- private readonly ctx;
6213
- constructor(ctx: ClientContext);
6632
+ list(args?: Args<"exams.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.list">>;
6214
6633
  /**
6215
- * Autocomplete users and groups
6634
+ * Create exam
6216
6635
  *
6217
- * Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
6636
+ * Create a new exam within your workspace.
6218
6637
  *
6219
- * API endpoint: `GET /permissions/autocomplete`
6638
+ * API endpoint: `POST /exams`
6220
6639
  */
6221
- autocomplete(args: Args<"permissions.autocomplete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.autocomplete">>;
6640
+ create(args?: Args<"exams.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.create">>;
6222
6641
  /**
6223
- * Get sharing permissions
6642
+ * Import exam
6224
6643
  *
6225
- * Get a list of users, groups and orgs that have access to a specific resource.
6644
+ * Create an exam by importing one or more source materials (e.g. an existing exam).
6226
6645
  *
6227
- * API endpoint: `GET /permissions/{resource}`
6646
+ * API endpoint: `POST /exams/import`
6228
6647
  */
6229
- list(resource: string, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6230
- list(args: Args<"permissions.list">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6648
+ import(args?: Args<"exams.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.import">>;
6231
6649
  /**
6232
- * Create permission
6650
+ * Get exam
6233
6651
  *
6234
- * Create a new permission for a specific resource, or update the role of an existing actor.
6652
+ * Get a single exam by its ID.
6235
6653
  *
6236
- * API endpoint: `POST /permissions/{resource}`
6654
+ * API endpoint: `GET /exams/{id}`
6237
6655
  */
6238
- assign(args: Args<"permissions.assign">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.assign">>;
6656
+ get(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6657
+ get(args: Args<"exams.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6239
6658
  /**
6240
- * Get actor role
6659
+ * Update exam
6241
6660
  *
6242
- * Get the role of a specific actor for a specific resource.
6661
+ * Update an existing exam.
6243
6662
  *
6244
- * API endpoint: `GET /permissions/{resource}/{actor}`
6663
+ * API endpoint: `POST /exams/{id}`
6245
6664
  */
6246
- getActorRole(args: Args<"permissions.getActorRole">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.getActorRole">>;
6665
+ update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6666
+ update(args: Args<"exams.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6247
6667
  /**
6248
- * Remove permission
6668
+ * Delete exam
6249
6669
  *
6250
- * Remove a permission for a specific actor on a specific resource.
6670
+ * Delete the exam.
6251
6671
  *
6252
- * API endpoint: `DELETE /permissions/{resource}/{actor}`
6672
+ * API endpoint: `DELETE /exams/{id}`
6253
6673
  */
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);
6674
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6675
+ delete(args: Args<"exams.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6259
6676
  /**
6260
- * List available student levels
6677
+ * Duplicate exam
6261
6678
  *
6262
- * Get a list of available default student levels.
6679
+ * Duplicate the exam's questions and settings to a new exam.
6263
6680
  *
6264
- * API endpoint: `GET /student-levels`
6681
+ * API endpoint: `POST /exams/{examId}/duplicate`
6265
6682
  */
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);
6683
+ duplicate(args: Args<"exams.duplicate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.duplicate">>;
6271
6684
  /**
6272
- * List users
6685
+ * Print exam
6273
6686
  *
6274
- * Get a list of all users in the workspace.
6687
+ * Export an exam to a PDF file or Word document.
6275
6688
  *
6276
- * API endpoint: `GET /users`
6689
+ * API endpoint: `POST /exams/{examId}/print`
6277
6690
  */
6278
- list(args?: Args<"users.list">, options?: ExamplaryRequestOptions): Promise<Response<"users.list">>;
6691
+ print(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6692
+ print(args: Args<"exams.print">, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6279
6693
  /**
6280
- * Create user
6694
+ * Generate exam
6281
6695
  *
6282
- * Create a new user in the workspace.
6696
+ * Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
6283
6697
  *
6284
- * API endpoint: `POST /users`
6698
+ * API endpoint: `POST /exams/{examId}/generate`
6285
6699
  */
6286
- create(args?: Args<"users.create">, options?: ExamplaryRequestOptions): Promise<Response<"users.create">>;
6700
+ startGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6701
+ startGeneration(args: Args<"exams.startGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6287
6702
  /**
6288
- * Update user role
6703
+ * Cancel exam generation
6289
6704
  *
6290
- * Update a user's role within the workspace.
6705
+ * Cancel an ongoing job to generate new questions for the exam using AI.
6291
6706
  *
6292
- * API endpoint: `PATCH /users/{id}`
6707
+ * API endpoint: `POST /exams/{examId}/generate/cancel`
6293
6708
  */
6294
- update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6295
- update(args: Args<"users.update">, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
6709
+ cancelGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6710
+ cancelGeneration(args: Args<"exams.cancelGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6296
6711
  /**
6297
- * Delete user
6712
+ * Get exam context suggestions
6298
6713
  *
6299
- * Delete a user from the workspace.
6714
+ * Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
6300
6715
  *
6301
- * API endpoint: `DELETE /users/{id}`
6716
+ * API endpoint: `GET /exams/{examId}/context-suggestions`
6302
6717
  */
6303
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6304
- delete(args: Args<"users.delete">, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6718
+ getContextSuggestions(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6719
+ getContextSuggestions(args: Args<"exams.getContextSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6305
6720
  }
6306
- declare class ExamsSessions {
6721
+ declare class Me {
6307
6722
  private readonly ctx;
6308
6723
  constructor(ctx: ClientContext);
6309
6724
  /**
6310
- * List exam sessions
6725
+ * Get me
6311
6726
  *
6312
- * Get a list of all student sessions for an exam, representing a set of answers from a student.
6727
+ * Get the current user's account details.
6313
6728
  *
6314
- * API endpoint: `GET /exams/{examId}/sessions`
6729
+ * API endpoint: `GET /me`
6315
6730
  */
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">>;
6731
+ get(args?: Args<"me.get">, options?: ExamplaryRequestOptions): Promise<Response<"me.get">>;
6318
6732
  /**
6319
- * Create session
6733
+ * Update me
6320
6734
  *
6321
- * Manually create a session, possibly from uploaded data.
6735
+ * Update the current user's account details.
6322
6736
  *
6323
- * API endpoint: `POST /exams/{examId}/sessions`
6737
+ * API endpoint: `PATCH /me`
6324
6738
  */
6325
- import(args: Args<"exams.sessions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.import">>;
6739
+ update(args?: Args<"me.update">, options?: ExamplaryRequestOptions): Promise<Response<"me.update">>;
6740
+ }
6741
+ declare class Media {
6742
+ private readonly ctx;
6743
+ constructor(ctx: ClientContext);
6326
6744
  /**
6327
- * Get answers from scan
6745
+ * Get file upload URL
6328
6746
  *
6329
- * Scan student answers from a document.
6747
+ * Returns a signed URL for uploading a file, and a public URL for accessing it afterwards.
6330
6748
  *
6331
- * API endpoint: `POST /exams/{examId}/sessions/scan`
6749
+ * API endpoint: `GET /media/upload`
6332
6750
  */
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">>;
6751
+ upload(args: Args$1, options?: ExamplaryRequestOptions): Promise<Response$1>;
6752
+ }
6753
+ declare class OrgCustomDomain {
6754
+ private readonly ctx;
6755
+ constructor(ctx: ClientContext);
6335
6756
  /**
6336
- * Scan document for student answers
6337
- *
6338
- * Start a background task to extract student answers from an uploaded PDF document.
6757
+ * Get custom domain configuration
6339
6758
  *
6340
- * API endpoint: `POST /exams/{examId}/sessions/scan-document`
6759
+ * API endpoint: `GET /org/custom-domain`
6341
6760
  */
6342
- scanDocument(args: Args<"exams.sessions.scanDocument">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.scanDocument">>;
6761
+ get(args?: Args<"org.customDomain.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.get">>;
6343
6762
  /**
6344
- * Get exam session
6345
- *
6346
- * Get a single exam session by its ID, representing a set of answers from a student.
6763
+ * Update custom domain configuration
6347
6764
  *
6348
- * API endpoint: `GET /exams/{examId}/sessions/{sessionId}`
6765
+ * API endpoint: `POST /org/custom-domain`
6349
6766
  */
6350
- get(args: Args<"exams.sessions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.get">>;
6767
+ update(args?: Args<"org.customDomain.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.customDomain.update">>;
6768
+ }
6769
+ declare class Org {
6770
+ private readonly ctx;
6771
+ readonly customDomain: OrgCustomDomain;
6772
+ constructor(ctx: ClientContext);
6351
6773
  /**
6352
- * Delete exam session
6774
+ * Get organization
6353
6775
  *
6354
- * Remove an exam session.
6776
+ * API endpoint: `GET /org`
6777
+ */
6778
+ get(args?: Args<"org.get">, options?: ExamplaryRequestOptions): Promise<Response<"org.get">>;
6779
+ /**
6780
+ * Update organization
6355
6781
  *
6356
- * API endpoint: `DELETE /exams/{examId}/sessions/{sessionId}`
6782
+ * API endpoint: `PATCH /org`
6357
6783
  */
6358
- delete(args: Args<"exams.sessions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.delete">>;
6784
+ update(args?: Args<"org.update">, options?: ExamplaryRequestOptions): Promise<Response<"org.update">>;
6359
6785
  /**
6360
- * Provide feedback
6786
+ * Delete organization
6361
6787
  *
6362
- * Set teacher feedback and/or a grade for a specific question in an exam session.
6788
+ * API endpoint: `DELETE /org`
6789
+ */
6790
+ delete(args?: Args<"org.delete">, options?: ExamplaryRequestOptions): Promise<Response<"org.delete">>;
6791
+ }
6792
+ declare class Orgs {
6793
+ private readonly ctx;
6794
+ constructor(ctx: ClientContext);
6795
+ /**
6796
+ * List all organizations
6363
6797
  *
6364
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/feedback`
6798
+ * API endpoint: `GET /orgs`
6365
6799
  */
6366
- saveFeedback(args: Args<"exams.sessions.saveFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveFeedback">>;
6800
+ list(args?: Args<"orgs.list">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.list">>;
6367
6801
  /**
6368
- * Provide overall feedback
6802
+ * Create a new organization
6369
6803
  *
6370
- * Set teacher feedback for the test as a whole in an exam session.
6804
+ * Create a new workspace to collaborate with others on exams.
6371
6805
  *
6372
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/overall-feedback`
6806
+ * API endpoint: `POST /orgs`
6373
6807
  */
6374
- saveOverallFeedback(args: Args<"exams.sessions.saveOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.saveOverallFeedback">>;
6808
+ create(args?: Args<"orgs.create">, options?: ExamplaryRequestOptions): Promise<Response<"orgs.create">>;
6809
+ }
6810
+ declare class AuditLogs {
6811
+ private readonly ctx;
6812
+ constructor(ctx: ClientContext);
6375
6813
  /**
6376
- * Generate overall feedback
6814
+ * List audit logs
6377
6815
  *
6378
- * Generate feedback for the test as a whole in an exam session.
6816
+ * List the workspace's audit logs, newest first, with optional date range, actor and object filters. Paginated.
6379
6817
  *
6380
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/generate-overall-feedback`
6818
+ * API endpoint: `GET /audit-logs`
6381
6819
  */
6382
- generateOverallFeedback(args: Args<"exams.sessions.generateOverallFeedback">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.generateOverallFeedback">>;
6820
+ list(args?: Args<"audit-logs.list">, options?: ExamplaryRequestOptions): Promise<Response<"audit-logs.list">>;
6383
6821
  /**
6384
- * Accept AI grading suggestions
6822
+ * Export audit logs
6385
6823
  *
6386
- * Accept all AI-generated grading suggestions for the exam session.
6824
+ * Export audit logs for a date range (optionally filtered by actor/object) as ND-JSON. Returns a temporary download URL.
6387
6825
  *
6388
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/accept-all`
6826
+ * API endpoint: `GET /audit-logs/export`
6389
6827
  */
6390
- acceptAllSuggestions(args: Args<"exams.sessions.acceptAllSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptAllSuggestions">>;
6828
+ export(args: Args<"audit-logs.export">, options?: ExamplaryRequestOptions): Promise<Response<"audit-logs.export">>;
6829
+ }
6830
+ declare class ApiKeys {
6831
+ private readonly ctx;
6832
+ constructor(ctx: ClientContext);
6391
6833
  /**
6392
- * Accept single AI grading suggestion
6834
+ * Get API key
6393
6835
  *
6394
- * Accept a single AI-generated grading suggestion for the exam session.
6836
+ * Get the API key for the current org/user combination. Creates one if none exists.
6395
6837
  *
6396
- * API endpoint: `POST /exams/{examId}/sessions/{sessionId}/suggestions/{questionId}/accept`
6838
+ * API endpoint: `GET /api-keys`
6397
6839
  */
6398
- acceptSuggestion(args: Args<"exams.sessions.acceptSuggestion">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.acceptSuggestion">>;
6840
+ get(args?: Args<"apiKeys.get">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.get">>;
6399
6841
  /**
6400
- * Edit answer
6842
+ * Reset API key
6401
6843
  *
6402
- * Edit a single answer in an exam session.
6844
+ * Invalidate old API keys for this org/user and create a new one.
6403
6845
  *
6404
- * API endpoint: `PATCH /exams/{examId}/sessions/{sessionId}/answers/{questionId}`
6846
+ * API endpoint: `POST /api-keys/reset`
6405
6847
  */
6406
- editAnswer(args: Args<"exams.sessions.editAnswer">, options?: ExamplaryRequestOptions): Promise<Response<"exams.sessions.editAnswer">>;
6848
+ reset(args?: Args<"apiKeys.reset">, options?: ExamplaryRequestOptions): Promise<Response<"apiKeys.reset">>;
6407
6849
  }
6408
- declare class ExamsQuestions {
6850
+ declare class Attributes {
6409
6851
  private readonly ctx;
6410
6852
  constructor(ctx: ClientContext);
6411
6853
  /**
6412
- * Import questions
6854
+ * List attributes
6413
6855
  *
6414
- * Import questions into an exam from a file. Support Word, PDF, Moodle quiz XML and plain text files.
6856
+ * Get all custom attributes configured for the current workspace.
6415
6857
  *
6416
- * API endpoint: `POST /exams/{examId}/questions/import`
6858
+ * API endpoint: `GET /attributes`
6417
6859
  */
6418
- import(args: Args<"exams.questions.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.import">>;
6860
+ list(args?: Args<"attributes.list">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.list">>;
6419
6861
  /**
6420
- * Generate question
6862
+ * Create attribute
6421
6863
  *
6422
- * Generate a new question for the exam using an AI prompt.
6864
+ * Create a new custom attribute in the current workspace.
6423
6865
  *
6424
- * API endpoint: `POST /exams/{examId}/questions/generate`
6866
+ * API endpoint: `POST /attributes`
6425
6867
  */
6426
- generate(args: Args<"exams.questions.generate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.generate">>;
6868
+ create(args?: Args<"attributes.create">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.create">>;
6427
6869
  /**
6428
- * Get question
6870
+ * Reorder attributes
6429
6871
  *
6430
- * Retrieve a question by its ID.
6872
+ * Update the position of multiple attributes at once.
6431
6873
  *
6432
- * API endpoint: `GET /exams/{examId}/questions/{questionId}`
6874
+ * API endpoint: `POST /attributes/reorder`
6433
6875
  */
6434
- get(args: Args<"exams.questions.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.get">>;
6876
+ reorder(args?: Args<"attributes.reorder">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.reorder">>;
6435
6877
  /**
6436
- * Regenerate question
6878
+ * Update attribute
6437
6879
  *
6438
- * Update a question using an AI prompt.
6880
+ * Update an existing attribute in the current workspace.
6439
6881
  *
6440
- * API endpoint: `POST /exams/{examId}/questions/{questionId}/generate`
6882
+ * API endpoint: `POST /attributes/{id}`
6441
6883
  */
6442
- regenerate(args: Args<"exams.questions.regenerate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.questions.regenerate">>;
6884
+ update(args: Args<"attributes.update">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.update">>;
6885
+ /**
6886
+ * Delete attribute
6887
+ *
6888
+ * Delete a custom attribute from the current workspace. Default attributes cannot be deleted.
6889
+ *
6890
+ * API endpoint: `DELETE /attributes/{id}`
6891
+ */
6892
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6893
+ delete(args: Args<"attributes.delete">, options?: ExamplaryRequestOptions): Promise<Response<"attributes.delete">>;
6443
6894
  }
6444
- declare class ExamsExport {
6895
+ declare class Taxonomies {
6445
6896
  private readonly ctx;
6446
6897
  constructor(ctx: ClientContext);
6447
6898
  /**
6448
- * Export QTI 3 package
6899
+ * Get taxonomies
6449
6900
  *
6450
- * Export an exam as a QTI 3 ZIP package.
6901
+ * Get a list available taxonomies, including defaults and taxonomies created in the current workspace.
6451
6902
  *
6452
- * API endpoint: `POST /exams/{examId}/export/qti3-zip`
6903
+ * API endpoint: `GET /taxonomies`
6453
6904
  */
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">>;
6905
+ list(args?: Args<"taxonomies.list">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.list">>;
6456
6906
  /**
6457
- * Export QTI 2.1 package
6907
+ * Create taxonomy
6458
6908
  *
6459
- * Export an exam as a QTI 2.1 ZIP package.
6909
+ * Save a new taxonomy in the current workspace.
6460
6910
  *
6461
- * API endpoint: `POST /exams/{examId}/export/qti21-zip`
6911
+ * API endpoint: `POST /taxonomies`
6462
6912
  */
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);
6913
+ create(args?: Args<"taxonomies.create">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.create">>;
6472
6914
  /**
6473
- * List exams
6915
+ * Update taxonomy
6474
6916
  *
6475
- * Get a list of all exams within your workspace.
6917
+ * Update an existing taxonomy in the current workspace.
6476
6918
  *
6477
- * API endpoint: `GET /exams`
6919
+ * API endpoint: `POST /taxonomies/{id}`
6478
6920
  */
6479
- list(args?: Args<"exams.list">, options?: ExamplaryRequestOptions): Promise<Response<"exams.list">>;
6921
+ update(args: Args<"taxonomies.update">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.update">>;
6480
6922
  /**
6481
- * Create exam
6923
+ * Delete taxonomy
6482
6924
  *
6483
- * Create a new exam within your workspace.
6925
+ * Delete a taxonomy from the current workspace. This fails if there are any exams associated with the taxonomy.
6484
6926
  *
6485
- * API endpoint: `POST /exams`
6927
+ * API endpoint: `DELETE /taxonomies/{id}`
6486
6928
  */
6487
- create(args?: Args<"exams.create">, options?: ExamplaryRequestOptions): Promise<Response<"exams.create">>;
6929
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6930
+ delete(args: Args<"taxonomies.delete">, options?: ExamplaryRequestOptions): Promise<Response<"taxonomies.delete">>;
6931
+ }
6932
+ declare class Permissions {
6933
+ private readonly ctx;
6934
+ constructor(ctx: ClientContext);
6488
6935
  /**
6489
- * Import exam
6936
+ * Autocomplete users and groups
6490
6937
  *
6491
- * Create an exam by importing one or more source materials (e.g. an existing exam).
6938
+ * Search for users and groups to share with. Returns matches by name or email. Respects restricted group visibility.
6492
6939
  *
6493
- * API endpoint: `POST /exams/import`
6940
+ * API endpoint: `GET /permissions/autocomplete`
6494
6941
  */
6495
- import(args?: Args<"exams.import">, options?: ExamplaryRequestOptions): Promise<Response<"exams.import">>;
6942
+ autocomplete(args: Args<"permissions.autocomplete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.autocomplete">>;
6496
6943
  /**
6497
- * Get exam
6944
+ * Get sharing permissions
6498
6945
  *
6499
- * Get a single exam by its ID.
6946
+ * Get a list of users, groups and orgs that have access to a specific resource.
6500
6947
  *
6501
- * API endpoint: `GET /exams/{id}`
6948
+ * API endpoint: `GET /permissions/{resource}`
6502
6949
  */
6503
- get(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6504
- get(args: Args<"exams.get">, options?: ExamplaryRequestOptions): Promise<Response<"exams.get">>;
6950
+ list(resource: string, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6951
+ list(args: Args<"permissions.list">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.list">>;
6505
6952
  /**
6506
- * Update exam
6953
+ * Create permission
6507
6954
  *
6508
- * Update an existing exam.
6955
+ * Create a new permission for a specific resource, or update the role of an existing actor.
6509
6956
  *
6510
- * API endpoint: `POST /exams/{id}`
6957
+ * API endpoint: `POST /permissions/{resource}`
6511
6958
  */
6512
- update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6513
- update(args: Args<"exams.update">, options?: ExamplaryRequestOptions): Promise<Response<"exams.update">>;
6959
+ assign(args: Args<"permissions.assign">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.assign">>;
6514
6960
  /**
6515
- * Delete exam
6961
+ * Get actor role
6516
6962
  *
6517
- * Delete the exam.
6963
+ * Get the role of a specific actor for a specific resource.
6518
6964
  *
6519
- * API endpoint: `DELETE /exams/{id}`
6965
+ * API endpoint: `GET /permissions/{resource}/{actor}`
6520
6966
  */
6521
- delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6522
- delete(args: Args<"exams.delete">, options?: ExamplaryRequestOptions): Promise<Response<"exams.delete">>;
6967
+ getActorRole(args: Args<"permissions.getActorRole">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.getActorRole">>;
6523
6968
  /**
6524
- * Duplicate exam
6969
+ * Remove permission
6525
6970
  *
6526
- * Duplicate the exam's questions and settings to a new exam.
6971
+ * Remove a permission for a specific actor on a specific resource.
6527
6972
  *
6528
- * API endpoint: `POST /exams/{examId}/duplicate`
6973
+ * API endpoint: `DELETE /permissions/{resource}/{actor}`
6529
6974
  */
6530
- duplicate(args: Args<"exams.duplicate">, options?: ExamplaryRequestOptions): Promise<Response<"exams.duplicate">>;
6975
+ delete(args: Args<"permissions.delete">, options?: ExamplaryRequestOptions): Promise<Response<"permissions.delete">>;
6976
+ }
6977
+ declare class StudentLevels {
6978
+ private readonly ctx;
6979
+ constructor(ctx: ClientContext);
6531
6980
  /**
6532
- * Print exam
6981
+ * List available student levels
6533
6982
  *
6534
- * Export an exam to a PDF file or Word document.
6983
+ * Get a list of available default student levels.
6535
6984
  *
6536
- * API endpoint: `POST /exams/{examId}/print`
6985
+ * API endpoint: `GET /student-levels`
6537
6986
  */
6538
- print(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6539
- print(args: Args<"exams.print">, options?: ExamplaryRequestOptions): Promise<Response<"exams.print">>;
6987
+ list(args?: Args<"studentLevels.list">, options?: ExamplaryRequestOptions): Promise<Response<"studentLevels.list">>;
6988
+ }
6989
+ declare class Users {
6990
+ private readonly ctx;
6991
+ constructor(ctx: ClientContext);
6540
6992
  /**
6541
- * Generate exam
6993
+ * List users
6542
6994
  *
6543
- * Initiate a job to generate new questions for the exam using AI, based on the source materials and metadata specified.
6995
+ * Get a list of all users in the workspace.
6544
6996
  *
6545
- * API endpoint: `POST /exams/{examId}/generate`
6997
+ * API endpoint: `GET /users`
6546
6998
  */
6547
- startGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6548
- startGeneration(args: Args<"exams.startGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.startGeneration">>;
6999
+ list(args?: Args<"users.list">, options?: ExamplaryRequestOptions): Promise<Response<"users.list">>;
6549
7000
  /**
6550
- * Cancel exam generation
7001
+ * Create user
6551
7002
  *
6552
- * Cancel an ongoing job to generate new questions for the exam using AI.
7003
+ * Create a new user in the workspace.
6553
7004
  *
6554
- * API endpoint: `POST /exams/{examId}/generate/cancel`
7005
+ * API endpoint: `POST /users`
6555
7006
  */
6556
- cancelGeneration(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
6557
- cancelGeneration(args: Args<"exams.cancelGeneration">, options?: ExamplaryRequestOptions): Promise<Response<"exams.cancelGeneration">>;
7007
+ create(args?: Args<"users.create">, options?: ExamplaryRequestOptions): Promise<Response<"users.create">>;
6558
7008
  /**
6559
- * Get exam context suggestions
7009
+ * Update user role
6560
7010
  *
6561
- * Get AI-generated suggestions for context/instructions to include in the exam generation prompt, based on the source materials linked to the exam.
7011
+ * Update a user's role within the workspace.
6562
7012
  *
6563
- * API endpoint: `GET /exams/{examId}/context-suggestions`
7013
+ * API endpoint: `PATCH /users/{id}`
6564
7014
  */
6565
- getContextSuggestions(examId: string, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
6566
- getContextSuggestions(args: Args<"exams.getContextSuggestions">, options?: ExamplaryRequestOptions): Promise<Response<"exams.getContextSuggestions">>;
7015
+ update(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
7016
+ update(args: Args<"users.update">, options?: ExamplaryRequestOptions): Promise<Response<"users.update">>;
7017
+ /**
7018
+ * Delete user
7019
+ *
7020
+ * Delete a user from the workspace.
7021
+ *
7022
+ * API endpoint: `DELETE /users/{id}`
7023
+ */
7024
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
7025
+ delete(args: Args<"users.delete">, options?: ExamplaryRequestOptions): Promise<Response<"users.delete">>;
6567
7026
  }
6568
7027
  declare class PracticeSpacesStudents {
6569
7028
  private readonly ctx;
@@ -6921,6 +7380,43 @@ declare class QuestionBank {
6921
7380
  delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"questionBank.delete">>;
6922
7381
  delete(args: Args<"questionBank.delete">, options?: ExamplaryRequestOptions): Promise<Response<"questionBank.delete">>;
6923
7382
  }
7383
+ declare class Prompts {
7384
+ private readonly ctx;
7385
+ constructor(ctx: ClientContext);
7386
+ /**
7387
+ * Get prompts
7388
+ *
7389
+ * Get a list of reusable prompts, merging the workspace's saved prompts with the defaults provided by Examplary. Optionally filter by type and language.
7390
+ *
7391
+ * API endpoint: `GET /prompts`
7392
+ */
7393
+ list(args?: Args<"prompts.list">, options?: ExamplaryRequestOptions): Promise<Response<"prompts.list">>;
7394
+ /**
7395
+ * Save prompt
7396
+ *
7397
+ * Save a reusable prompt in the current workspace.
7398
+ *
7399
+ * API endpoint: `POST /prompts`
7400
+ */
7401
+ create(args?: Args<"prompts.create">, options?: ExamplaryRequestOptions): Promise<Response<"prompts.create">>;
7402
+ /**
7403
+ * Update prompt
7404
+ *
7405
+ * Update an existing prompt in the current workspace.
7406
+ *
7407
+ * API endpoint: `PATCH /prompts/{id}`
7408
+ */
7409
+ update(args: Args<"prompts.update">, options?: ExamplaryRequestOptions): Promise<Response<"prompts.update">>;
7410
+ /**
7411
+ * Delete prompt
7412
+ *
7413
+ * Delete a prompt from the current workspace.
7414
+ *
7415
+ * API endpoint: `DELETE /prompts/{id}`
7416
+ */
7417
+ delete(id: string, options?: ExamplaryRequestOptions): Promise<Response<"prompts.delete">>;
7418
+ delete(args: Args<"prompts.delete">, options?: ExamplaryRequestOptions): Promise<Response<"prompts.delete">>;
7419
+ }
6924
7420
  declare class Jobs {
6925
7421
  private readonly ctx;
6926
7422
  constructor(ctx: ClientContext);
@@ -6949,22 +7445,24 @@ declare class Examplary {
6949
7445
  readonly library: Library;
6950
7446
  readonly oauth: Oauth;
6951
7447
  readonly embedSessions: EmbedSessions;
7448
+ readonly exams: Exams;
6952
7449
  readonly me: Me;
6953
7450
  readonly media: Media;
6954
7451
  readonly org: Org;
6955
7452
  readonly orgs: Orgs;
7453
+ readonly auditLogs: AuditLogs;
6956
7454
  readonly apiKeys: ApiKeys;
6957
7455
  readonly attributes: Attributes;
6958
7456
  readonly taxonomies: Taxonomies;
6959
7457
  readonly permissions: Permissions;
6960
7458
  readonly studentLevels: StudentLevels;
6961
7459
  readonly users: Users;
6962
- readonly exams: Exams;
6963
7460
  readonly practiceSpaces: PracticeSpaces;
6964
7461
  readonly sourceMaterials: SourceMaterials;
6965
7462
  readonly folders: Folders;
6966
7463
  readonly groups: Groups;
6967
7464
  readonly questionBank: QuestionBank;
7465
+ readonly prompts: Prompts;
6968
7466
  readonly jobs: Jobs;
6969
7467
  constructor(options: ExamplaryClientOptions);
6970
7468
  /**