@iblai/iblai-api 4.305.0-core → 4.306.0-core

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.
Files changed (71) hide show
  1. package/dist/index.cjs.js +1342 -207
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +1343 -208
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.umd.js +1342 -207
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/types/index.d.ts +25 -1
  8. package/dist/types/models/KindEnum.d.ts +8 -0
  9. package/dist/types/models/NotificationTemplateDetail.d.ts +3 -2
  10. package/dist/types/models/NotificationTemplateList.d.ts +3 -2
  11. package/dist/types/models/PatchedNotificationTemplateDetail.d.ts +3 -2
  12. package/dist/types/models/PatchedPlatformApplicationFormUpdate.d.ts +12 -0
  13. package/dist/types/models/PatchedPlatformApplicationNote.d.ts +8 -0
  14. package/dist/types/models/PatchedPlatformApplicationPlacementUpdate.d.ts +12 -0
  15. package/dist/types/models/PatchedPlatformApplicationUpdate.d.ts +6 -0
  16. package/dist/types/models/PlatformApplicationAdminSubmit.d.ts +6 -0
  17. package/dist/types/models/PlatformApplicationAttachmentUpload.d.ts +8 -0
  18. package/dist/types/models/PlatformApplicationCandidateLink.d.ts +8 -0
  19. package/dist/types/models/PlatformApplicationCourseAssignment.d.ts +7 -0
  20. package/dist/types/models/PlatformApplicationCourseAssignmentItem.d.ts +10 -0
  21. package/dist/types/models/PlatformApplicationCreate.d.ts +8 -0
  22. package/dist/types/models/PlatformApplicationDetail.d.ts +7 -0
  23. package/dist/types/models/PlatformApplicationFeeAction.d.ts +11 -0
  24. package/dist/types/models/PlatformApplicationFeeActionActionEnum.d.ts +12 -0
  25. package/dist/types/models/PlatformApplicationFormCreate.d.ts +12 -0
  26. package/dist/types/models/PlatformApplicationFormDetail.d.ts +9 -0
  27. package/dist/types/models/PlatformApplicationNote.d.ts +8 -0
  28. package/dist/types/models/PlatformApplicationPlacementCreate.d.ts +8 -0
  29. package/dist/types/models/PlatformApplicationPlacementItem.d.ts +11 -0
  30. package/dist/types/models/PlatformApplicationPlacementUpdateStatusEnum.d.ts +16 -0
  31. package/dist/types/models/PlatformApplicationSubmit.d.ts +6 -0
  32. package/dist/types/models/PlatformApplicationTransition.d.ts +11 -0
  33. package/dist/types/models/PlatformApplicationTransitionActionEnum.d.ts +16 -0
  34. package/dist/types/models/PlatformApplicationWaiver.d.ts +9 -0
  35. package/dist/types/models/{Type4b7Enum.d.ts → TypeB29Enum.d.ts} +3 -1
  36. package/dist/types/services/CatalogService.d.ts +648 -0
  37. package/dist/types/services/CoreService.d.ts +14 -0
  38. package/package.json +1 -1
  39. package/sdk_schema.yml +1893 -5
  40. package/src/core/OpenAPI.ts +1 -1
  41. package/src/index.ts +25 -1
  42. package/src/models/KindEnum.ts +12 -0
  43. package/src/models/NotificationTemplateDetail.ts +3 -2
  44. package/src/models/NotificationTemplateList.ts +3 -2
  45. package/src/models/PatchedNotificationTemplateDetail.ts +3 -2
  46. package/src/models/PatchedPlatformApplicationFormUpdate.ts +17 -0
  47. package/src/models/PatchedPlatformApplicationNote.ts +13 -0
  48. package/src/models/PatchedPlatformApplicationPlacementUpdate.ts +17 -0
  49. package/src/models/PatchedPlatformApplicationUpdate.ts +11 -0
  50. package/src/models/PlatformApplicationAdminSubmit.ts +11 -0
  51. package/src/models/PlatformApplicationAttachmentUpload.ts +13 -0
  52. package/src/models/PlatformApplicationCandidateLink.ts +13 -0
  53. package/src/models/PlatformApplicationCourseAssignment.ts +12 -0
  54. package/src/models/PlatformApplicationCourseAssignmentItem.ts +15 -0
  55. package/src/models/PlatformApplicationCreate.ts +13 -0
  56. package/src/models/PlatformApplicationDetail.ts +12 -0
  57. package/src/models/PlatformApplicationFeeAction.ts +16 -0
  58. package/src/models/PlatformApplicationFeeActionActionEnum.ts +16 -0
  59. package/src/models/PlatformApplicationFormCreate.ts +17 -0
  60. package/src/models/PlatformApplicationFormDetail.ts +14 -0
  61. package/src/models/PlatformApplicationNote.ts +13 -0
  62. package/src/models/PlatformApplicationPlacementCreate.ts +13 -0
  63. package/src/models/PlatformApplicationPlacementItem.ts +16 -0
  64. package/src/models/PlatformApplicationPlacementUpdateStatusEnum.ts +20 -0
  65. package/src/models/PlatformApplicationSubmit.ts +11 -0
  66. package/src/models/PlatformApplicationTransition.ts +16 -0
  67. package/src/models/PlatformApplicationTransitionActionEnum.ts +20 -0
  68. package/src/models/PlatformApplicationWaiver.ts +14 -0
  69. package/src/models/{Type4b7Enum.ts → TypeB29Enum.ts} +3 -1
  70. package/src/services/CatalogService.ts +1196 -0
  71. package/src/services/CoreService.ts +28 -0
package/sdk_schema.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ibl-data-manager
4
- version: 4.305.0-core
4
+ version: 4.306.0-core
5
5
  description: API for iblai
6
6
  paths:
7
7
  /api/analytics/content/:
@@ -4752,6 +4752,1549 @@ paths:
4752
4752
  description: Not found - platform or course doesn't exist
4753
4753
  '500':
4754
4754
  description: Internal server error
4755
+ /api/catalog/applications/platform/:
4756
+ get:
4757
+ operationId: catalog_applications_platform_retrieve
4758
+ description: |-
4759
+ Authenticated applicants, including learners on AXD student tokens.
4760
+
4761
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4762
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4763
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4764
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4765
+ parameters:
4766
+ - in: query
4767
+ name: form_id
4768
+ schema:
4769
+ type: integer
4770
+ - in: query
4771
+ name: platform_key
4772
+ schema:
4773
+ type: string
4774
+ minLength: 1
4775
+ - in: query
4776
+ name: platform_org
4777
+ schema:
4778
+ type: string
4779
+ minLength: 1
4780
+ tags:
4781
+ - catalog
4782
+ security:
4783
+ - PlatformApiKeyAuthentication: []
4784
+ responses:
4785
+ '200':
4786
+ description: Own submissions
4787
+ post:
4788
+ operationId: catalog_applications_platform_create
4789
+ description: |-
4790
+ Authenticated applicants, including learners on AXD student tokens.
4791
+
4792
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4793
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4794
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4795
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4796
+ tags:
4797
+ - catalog
4798
+ requestBody:
4799
+ content:
4800
+ application/json:
4801
+ schema:
4802
+ $ref: '#/components/schemas/PlatformApplicationCreate'
4803
+ application/scim+json:
4804
+ schema:
4805
+ $ref: '#/components/schemas/PlatformApplicationCreate'
4806
+ application/x-www-form-urlencoded:
4807
+ schema:
4808
+ $ref: '#/components/schemas/PlatformApplicationCreate'
4809
+ multipart/form-data:
4810
+ schema:
4811
+ $ref: '#/components/schemas/PlatformApplicationCreate'
4812
+ '*/*':
4813
+ schema:
4814
+ $ref: '#/components/schemas/PlatformApplicationCreate'
4815
+ required: true
4816
+ security:
4817
+ - PlatformApiKeyAuthentication: []
4818
+ responses:
4819
+ '201':
4820
+ content:
4821
+ application/json:
4822
+ schema:
4823
+ $ref: '#/components/schemas/PlatformApplicationDetail'
4824
+ description: ''
4825
+ /api/catalog/applications/platform/{submission_id}/:
4826
+ get:
4827
+ operationId: catalog_applications_platform_retrieve_2
4828
+ description: |-
4829
+ Authenticated applicants, including learners on AXD student tokens.
4830
+
4831
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4832
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4833
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4834
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4835
+ parameters:
4836
+ - in: path
4837
+ name: submission_id
4838
+ schema:
4839
+ type: string
4840
+ pattern: ^\d+$
4841
+ required: true
4842
+ tags:
4843
+ - catalog
4844
+ security:
4845
+ - PlatformApiKeyAuthentication: []
4846
+ responses:
4847
+ '200':
4848
+ content:
4849
+ application/json:
4850
+ schema:
4851
+ $ref: '#/components/schemas/PlatformApplicationDetail'
4852
+ description: ''
4853
+ patch:
4854
+ operationId: catalog_applications_platform_partial_update
4855
+ description: |-
4856
+ Authenticated applicants, including learners on AXD student tokens.
4857
+
4858
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4859
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4860
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4861
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4862
+ parameters:
4863
+ - in: path
4864
+ name: submission_id
4865
+ schema:
4866
+ type: string
4867
+ pattern: ^\d+$
4868
+ required: true
4869
+ tags:
4870
+ - catalog
4871
+ requestBody:
4872
+ content:
4873
+ application/json:
4874
+ schema:
4875
+ $ref: '#/components/schemas/PatchedPlatformApplicationUpdate'
4876
+ application/scim+json:
4877
+ schema:
4878
+ $ref: '#/components/schemas/PatchedPlatformApplicationUpdate'
4879
+ application/x-www-form-urlencoded:
4880
+ schema:
4881
+ $ref: '#/components/schemas/PatchedPlatformApplicationUpdate'
4882
+ multipart/form-data:
4883
+ schema:
4884
+ $ref: '#/components/schemas/PatchedPlatformApplicationUpdate'
4885
+ '*/*':
4886
+ schema:
4887
+ $ref: '#/components/schemas/PatchedPlatformApplicationUpdate'
4888
+ security:
4889
+ - PlatformApiKeyAuthentication: []
4890
+ responses:
4891
+ '200':
4892
+ content:
4893
+ application/json:
4894
+ schema:
4895
+ $ref: '#/components/schemas/PlatformApplicationDetail'
4896
+ description: ''
4897
+ /api/catalog/applications/platform/{submission_id}/attachments/:
4898
+ post:
4899
+ operationId: catalog_applications_platform_attachments_create
4900
+ description: |-
4901
+ Authenticated applicants, including learners on AXD student tokens.
4902
+
4903
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4904
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4905
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4906
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4907
+ parameters:
4908
+ - in: path
4909
+ name: submission_id
4910
+ schema:
4911
+ type: string
4912
+ pattern: ^\d+$
4913
+ required: true
4914
+ tags:
4915
+ - catalog
4916
+ requestBody:
4917
+ content:
4918
+ multipart/form-data:
4919
+ schema:
4920
+ $ref: '#/components/schemas/PlatformApplicationAttachmentUpload'
4921
+ application/x-www-form-urlencoded:
4922
+ schema:
4923
+ $ref: '#/components/schemas/PlatformApplicationAttachmentUpload'
4924
+ required: true
4925
+ security:
4926
+ - PlatformApiKeyAuthentication: []
4927
+ responses:
4928
+ '201':
4929
+ description: Attachment stored
4930
+ /api/catalog/applications/platform/{submission_id}/attachments/{attachment_id}/:
4931
+ delete:
4932
+ operationId: catalog_applications_platform_attachments_destroy
4933
+ description: |-
4934
+ Authenticated applicants, including learners on AXD student tokens.
4935
+
4936
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4937
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4938
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4939
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4940
+ parameters:
4941
+ - in: path
4942
+ name: attachment_id
4943
+ schema:
4944
+ type: string
4945
+ pattern: ^\d+$
4946
+ required: true
4947
+ - in: path
4948
+ name: submission_id
4949
+ schema:
4950
+ type: string
4951
+ pattern: ^\d+$
4952
+ required: true
4953
+ tags:
4954
+ - catalog
4955
+ security:
4956
+ - PlatformApiKeyAuthentication: []
4957
+ responses:
4958
+ '204':
4959
+ description: Attachment removed
4960
+ /api/catalog/applications/platform/{submission_id}/submit/:
4961
+ post:
4962
+ operationId: catalog_applications_platform_submit_create
4963
+ description: |-
4964
+ Authenticated applicants, including learners on AXD student tokens.
4965
+
4966
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
4967
+ not in the DRF defaults, but learners self-applying use it). An anonymous
4968
+ request returns 401, not 403: DRF's ``permission_denied`` raises
4969
+ ``NotAuthenticated`` whenever no authenticator succeeded.
4970
+ parameters:
4971
+ - in: path
4972
+ name: submission_id
4973
+ schema:
4974
+ type: string
4975
+ pattern: ^\d+$
4976
+ required: true
4977
+ tags:
4978
+ - catalog
4979
+ requestBody:
4980
+ content:
4981
+ application/json:
4982
+ schema:
4983
+ $ref: '#/components/schemas/PlatformApplicationSubmit'
4984
+ application/scim+json:
4985
+ schema:
4986
+ $ref: '#/components/schemas/PlatformApplicationSubmit'
4987
+ application/x-www-form-urlencoded:
4988
+ schema:
4989
+ $ref: '#/components/schemas/PlatformApplicationSubmit'
4990
+ multipart/form-data:
4991
+ schema:
4992
+ $ref: '#/components/schemas/PlatformApplicationSubmit'
4993
+ '*/*':
4994
+ schema:
4995
+ $ref: '#/components/schemas/PlatformApplicationSubmit'
4996
+ security:
4997
+ - PlatformApiKeyAuthentication: []
4998
+ responses:
4999
+ '200':
5000
+ content:
5001
+ application/json:
5002
+ schema:
5003
+ $ref: '#/components/schemas/PlatformApplicationDetail'
5004
+ description: ''
5005
+ /api/catalog/applications/platform/{submission_id}/withdraw/:
5006
+ post:
5007
+ operationId: catalog_applications_platform_withdraw_create
5008
+ description: |-
5009
+ Authenticated applicants, including learners on AXD student tokens.
5010
+
5011
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
5012
+ not in the DRF defaults, but learners self-applying use it). An anonymous
5013
+ request returns 401, not 403: DRF's ``permission_denied`` raises
5014
+ ``NotAuthenticated`` whenever no authenticator succeeded.
5015
+ parameters:
5016
+ - in: path
5017
+ name: submission_id
5018
+ schema:
5019
+ type: string
5020
+ pattern: ^\d+$
5021
+ required: true
5022
+ tags:
5023
+ - catalog
5024
+ security:
5025
+ - PlatformApiKeyAuthentication: []
5026
+ responses:
5027
+ '200':
5028
+ content:
5029
+ application/json:
5030
+ schema:
5031
+ $ref: '#/components/schemas/PlatformApplicationDetail'
5032
+ description: ''
5033
+ /api/catalog/applications/platform/form/:
5034
+ get:
5035
+ operationId: catalog_applications_platform_form_retrieve
5036
+ description: |-
5037
+ Authenticated applicants, including learners on AXD student tokens.
5038
+
5039
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
5040
+ not in the DRF defaults, but learners self-applying use it). An anonymous
5041
+ request returns 401, not 403: DRF's ``permission_denied`` raises
5042
+ ``NotAuthenticated`` whenever no authenticator succeeded.
5043
+ parameters:
5044
+ - in: query
5045
+ name: form_id
5046
+ schema:
5047
+ type: integer
5048
+ - in: query
5049
+ name: platform_key
5050
+ schema:
5051
+ type: string
5052
+ minLength: 1
5053
+ - in: query
5054
+ name: platform_org
5055
+ schema:
5056
+ type: string
5057
+ minLength: 1
5058
+ tags:
5059
+ - catalog
5060
+ security:
5061
+ - PlatformApiKeyAuthentication: []
5062
+ responses:
5063
+ '200':
5064
+ description: Active form
5065
+ /api/catalog/applications/platform/forms/manage/:
5066
+ get:
5067
+ operationId: catalog_applications_platform_forms_manage_retrieve
5068
+ description: |-
5069
+ Wires RBAC into a DRF view.
5070
+
5071
+ Two responsibilities:
5072
+
5073
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5074
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5075
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5076
+ views that set `token_policies_enabled = True`).
5077
+
5078
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5079
+ Server-to-server tokens authenticate as Django auth users with no
5080
+ relationship to a platform EdxUser. The convention is "we trust this
5081
+ caller — bypass RBAC and serve the request."
5082
+
5083
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5084
+ the early exit skips all RBAC prep work:
5085
+
5086
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5087
+ return
5088
+
5089
+ Use `is_service_account` at any other touch points where caller
5090
+ identity matters (queryset ownership filters, owner attribution on
5091
+ create, serializer context, etc.).
5092
+ parameters:
5093
+ - in: query
5094
+ name: platform_key
5095
+ schema:
5096
+ type: string
5097
+ minLength: 1
5098
+ - in: query
5099
+ name: platform_org
5100
+ schema:
5101
+ type: string
5102
+ minLength: 1
5103
+ - in: query
5104
+ name: sort
5105
+ schema:
5106
+ type: string
5107
+ minLength: 1
5108
+ tags:
5109
+ - catalog
5110
+ security:
5111
+ - PlatformApiKeyAuthentication: []
5112
+ responses:
5113
+ '200':
5114
+ description: Forms for the platform
5115
+ post:
5116
+ operationId: catalog_applications_platform_forms_manage_create
5117
+ description: |-
5118
+ Wires RBAC into a DRF view.
5119
+
5120
+ Two responsibilities:
5121
+
5122
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5123
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5124
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5125
+ views that set `token_policies_enabled = True`).
5126
+
5127
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5128
+ Server-to-server tokens authenticate as Django auth users with no
5129
+ relationship to a platform EdxUser. The convention is "we trust this
5130
+ caller — bypass RBAC and serve the request."
5131
+
5132
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5133
+ the early exit skips all RBAC prep work:
5134
+
5135
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5136
+ return
5137
+
5138
+ Use `is_service_account` at any other touch points where caller
5139
+ identity matters (queryset ownership filters, owner attribution on
5140
+ create, serializer context, etc.).
5141
+ parameters:
5142
+ - in: query
5143
+ name: platform_key
5144
+ schema:
5145
+ type: string
5146
+ minLength: 1
5147
+ - in: query
5148
+ name: platform_org
5149
+ schema:
5150
+ type: string
5151
+ minLength: 1
5152
+ - in: query
5153
+ name: sort
5154
+ schema:
5155
+ type: string
5156
+ minLength: 1
5157
+ tags:
5158
+ - catalog
5159
+ requestBody:
5160
+ content:
5161
+ application/json:
5162
+ schema:
5163
+ $ref: '#/components/schemas/PlatformApplicationFormCreate'
5164
+ application/scim+json:
5165
+ schema:
5166
+ $ref: '#/components/schemas/PlatformApplicationFormCreate'
5167
+ application/x-www-form-urlencoded:
5168
+ schema:
5169
+ $ref: '#/components/schemas/PlatformApplicationFormCreate'
5170
+ multipart/form-data:
5171
+ schema:
5172
+ $ref: '#/components/schemas/PlatformApplicationFormCreate'
5173
+ '*/*':
5174
+ schema:
5175
+ $ref: '#/components/schemas/PlatformApplicationFormCreate'
5176
+ required: true
5177
+ security:
5178
+ - PlatformApiKeyAuthentication: []
5179
+ responses:
5180
+ '201':
5181
+ content:
5182
+ application/json:
5183
+ schema:
5184
+ $ref: '#/components/schemas/PlatformApplicationFormDetail'
5185
+ description: ''
5186
+ /api/catalog/applications/platform/forms/manage/{form_id}/:
5187
+ get:
5188
+ operationId: catalog_applications_platform_forms_manage_retrieve_2
5189
+ description: |-
5190
+ Wires RBAC into a DRF view.
5191
+
5192
+ Two responsibilities:
5193
+
5194
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5195
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5196
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5197
+ views that set `token_policies_enabled = True`).
5198
+
5199
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5200
+ Server-to-server tokens authenticate as Django auth users with no
5201
+ relationship to a platform EdxUser. The convention is "we trust this
5202
+ caller — bypass RBAC and serve the request."
5203
+
5204
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5205
+ the early exit skips all RBAC prep work:
5206
+
5207
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5208
+ return
5209
+
5210
+ Use `is_service_account` at any other touch points where caller
5211
+ identity matters (queryset ownership filters, owner attribution on
5212
+ create, serializer context, etc.).
5213
+ parameters:
5214
+ - in: path
5215
+ name: form_id
5216
+ schema:
5217
+ type: string
5218
+ pattern: ^\d+$
5219
+ required: true
5220
+ - in: query
5221
+ name: platform_key
5222
+ schema:
5223
+ type: string
5224
+ minLength: 1
5225
+ - in: query
5226
+ name: platform_org
5227
+ schema:
5228
+ type: string
5229
+ minLength: 1
5230
+ - in: query
5231
+ name: sort
5232
+ schema:
5233
+ type: string
5234
+ minLength: 1
5235
+ tags:
5236
+ - catalog
5237
+ security:
5238
+ - PlatformApiKeyAuthentication: []
5239
+ responses:
5240
+ '200':
5241
+ content:
5242
+ application/json:
5243
+ schema:
5244
+ $ref: '#/components/schemas/PlatformApplicationFormDetail'
5245
+ description: ''
5246
+ patch:
5247
+ operationId: catalog_applications_platform_forms_manage_partial_update
5248
+ description: |-
5249
+ Wires RBAC into a DRF view.
5250
+
5251
+ Two responsibilities:
5252
+
5253
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5254
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5255
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5256
+ views that set `token_policies_enabled = True`).
5257
+
5258
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5259
+ Server-to-server tokens authenticate as Django auth users with no
5260
+ relationship to a platform EdxUser. The convention is "we trust this
5261
+ caller — bypass RBAC and serve the request."
5262
+
5263
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5264
+ the early exit skips all RBAC prep work:
5265
+
5266
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5267
+ return
5268
+
5269
+ Use `is_service_account` at any other touch points where caller
5270
+ identity matters (queryset ownership filters, owner attribution on
5271
+ create, serializer context, etc.).
5272
+ parameters:
5273
+ - in: path
5274
+ name: form_id
5275
+ schema:
5276
+ type: string
5277
+ pattern: ^\d+$
5278
+ required: true
5279
+ - in: query
5280
+ name: platform_key
5281
+ schema:
5282
+ type: string
5283
+ minLength: 1
5284
+ - in: query
5285
+ name: platform_org
5286
+ schema:
5287
+ type: string
5288
+ minLength: 1
5289
+ - in: query
5290
+ name: sort
5291
+ schema:
5292
+ type: string
5293
+ minLength: 1
5294
+ tags:
5295
+ - catalog
5296
+ requestBody:
5297
+ content:
5298
+ application/json:
5299
+ schema:
5300
+ $ref: '#/components/schemas/PatchedPlatformApplicationFormUpdate'
5301
+ application/scim+json:
5302
+ schema:
5303
+ $ref: '#/components/schemas/PatchedPlatformApplicationFormUpdate'
5304
+ application/x-www-form-urlencoded:
5305
+ schema:
5306
+ $ref: '#/components/schemas/PatchedPlatformApplicationFormUpdate'
5307
+ multipart/form-data:
5308
+ schema:
5309
+ $ref: '#/components/schemas/PatchedPlatformApplicationFormUpdate'
5310
+ '*/*':
5311
+ schema:
5312
+ $ref: '#/components/schemas/PatchedPlatformApplicationFormUpdate'
5313
+ security:
5314
+ - PlatformApiKeyAuthentication: []
5315
+ responses:
5316
+ '200':
5317
+ content:
5318
+ application/json:
5319
+ schema:
5320
+ $ref: '#/components/schemas/PlatformApplicationFormDetail'
5321
+ description: ''
5322
+ /api/catalog/applications/platform/manage/:
5323
+ get:
5324
+ operationId: catalog_applications_platform_manage_retrieve
5325
+ description: |-
5326
+ Wires RBAC into a DRF view.
5327
+
5328
+ Two responsibilities:
5329
+
5330
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5331
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5332
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5333
+ views that set `token_policies_enabled = True`).
5334
+
5335
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5336
+ Server-to-server tokens authenticate as Django auth users with no
5337
+ relationship to a platform EdxUser. The convention is "we trust this
5338
+ caller — bypass RBAC and serve the request."
5339
+
5340
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5341
+ the early exit skips all RBAC prep work:
5342
+
5343
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5344
+ return
5345
+
5346
+ Use `is_service_account` at any other touch points where caller
5347
+ identity matters (queryset ownership filters, owner attribution on
5348
+ create, serializer context, etc.).
5349
+ parameters:
5350
+ - in: query
5351
+ name: platform_key
5352
+ schema:
5353
+ type: string
5354
+ minLength: 1
5355
+ - in: query
5356
+ name: platform_org
5357
+ schema:
5358
+ type: string
5359
+ minLength: 1
5360
+ - in: query
5361
+ name: search
5362
+ schema:
5363
+ type: string
5364
+ minLength: 1
5365
+ - in: query
5366
+ name: sort
5367
+ schema:
5368
+ type: string
5369
+ minLength: 1
5370
+ - in: query
5371
+ name: status
5372
+ schema:
5373
+ type: string
5374
+ minLength: 1
5375
+ tags:
5376
+ - catalog
5377
+ security:
5378
+ - PlatformApiKeyAuthentication: []
5379
+ responses:
5380
+ '200':
5381
+ description: Submissions for the platform
5382
+ /api/catalog/applications/platform/manage/{submission_id}/:
5383
+ get:
5384
+ operationId: catalog_applications_platform_manage_retrieve_2
5385
+ description: |-
5386
+ Wires RBAC into a DRF view.
5387
+
5388
+ Two responsibilities:
5389
+
5390
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
5391
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
5392
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
5393
+ views that set `token_policies_enabled = True`).
5394
+
5395
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
5396
+ Server-to-server tokens authenticate as Django auth users with no
5397
+ relationship to a platform EdxUser. The convention is "we trust this
5398
+ caller — bypass RBAC and serve the request."
5399
+
5400
+ Combine it with the RBAC-disabled check at the top of `initial()` so
5401
+ the early exit skips all RBAC prep work:
5402
+
5403
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
5404
+ return
5405
+
5406
+ Use `is_service_account` at any other touch points where caller
5407
+ identity matters (queryset ownership filters, owner attribution on
5408
+ create, serializer context, etc.).
5409
+ parameters:
5410
+ - in: query
5411
+ name: platform_key
5412
+ schema:
5413
+ type: string
5414
+ minLength: 1
5415
+ - in: query
5416
+ name: platform_org
5417
+ schema:
5418
+ type: string
5419
+ minLength: 1
5420
+ - in: query
5421
+ name: search
5422
+ schema:
5423
+ type: string
5424
+ minLength: 1
5425
+ - in: query
5426
+ name: sort
5427
+ schema:
5428
+ type: string
5429
+ minLength: 1
5430
+ - in: query
5431
+ name: status
5432
+ schema:
5433
+ type: string
5434
+ minLength: 1
5435
+ - in: path
5436
+ name: submission_id
5437
+ schema:
5438
+ type: string
5439
+ pattern: ^\d+$
5440
+ required: true
5441
+ tags:
5442
+ - catalog
5443
+ security:
5444
+ - PlatformApiKeyAuthentication: []
5445
+ responses:
5446
+ '200':
5447
+ description: Full submission detail
5448
+ /api/catalog/applications/platform/manage/{submission_id}/attachments/{attachment_id}/download/:
5449
+ get:
5450
+ operationId: catalog_applications_platform_manage_attachments_download_retrieve
5451
+ description: |-
5452
+ Reviewer download: redirect to the storage's (signed, on S3) file URL.
5453
+
5454
+ Gated by ``IsDMAdmin | IsPlatformAdmin`` plus the RBAC verb check on the
5455
+ attachment's own platform when RBAC is enabled.
5456
+ parameters:
5457
+ - in: path
5458
+ name: attachment_id
5459
+ schema:
5460
+ type: string
5461
+ pattern: ^\d+$
5462
+ required: true
5463
+ - in: path
5464
+ name: submission_id
5465
+ schema:
5466
+ type: string
5467
+ pattern: ^\d+$
5468
+ required: true
5469
+ tags:
5470
+ - catalog
5471
+ security:
5472
+ - PlatformApiKeyAuthentication: []
5473
+ responses:
5474
+ '302':
5475
+ description: Redirect to the file URL
5476
+ /api/catalog/applications/platform/manage/{submission_id}/candidates/{candidate_id}/invite/:
5477
+ post:
5478
+ operationId: catalog_applications_platform_manage_candidates_invite_create
5479
+ description: |-
5480
+ Re-run settlement provisioning for one accepted candidate: links them
5481
+ if an account with their designated email now exists, or re-issues the
5482
+ platform invitation if none is active. Covers the invite-missing state.
5483
+ parameters:
5484
+ - in: path
5485
+ name: candidate_id
5486
+ schema:
5487
+ type: string
5488
+ pattern: ^\d+$
5489
+ required: true
5490
+ - in: path
5491
+ name: submission_id
5492
+ schema:
5493
+ type: string
5494
+ pattern: ^\d+$
5495
+ required: true
5496
+ tags:
5497
+ - catalog
5498
+ security:
5499
+ - PlatformApiKeyAuthentication: []
5500
+ responses:
5501
+ '200':
5502
+ description: Candidate after provisioning
5503
+ /api/catalog/applications/platform/manage/{submission_id}/candidates/{candidate_id}/link/:
5504
+ post:
5505
+ operationId: catalog_applications_platform_manage_candidates_link_create
5506
+ description: |-
5507
+ Manually link an accepted candidate to an existing account (the
5508
+ account-unlinked state: the family signed up outside invitation
5509
+ redemption, or under a different email than designated).
5510
+ parameters:
5511
+ - in: path
5512
+ name: candidate_id
5513
+ schema:
5514
+ type: string
5515
+ pattern: ^\d+$
5516
+ required: true
5517
+ - in: path
5518
+ name: submission_id
5519
+ schema:
5520
+ type: string
5521
+ pattern: ^\d+$
5522
+ required: true
5523
+ tags:
5524
+ - catalog
5525
+ requestBody:
5526
+ content:
5527
+ application/json:
5528
+ schema:
5529
+ $ref: '#/components/schemas/PlatformApplicationCandidateLink'
5530
+ application/scim+json:
5531
+ schema:
5532
+ $ref: '#/components/schemas/PlatformApplicationCandidateLink'
5533
+ application/x-www-form-urlencoded:
5534
+ schema:
5535
+ $ref: '#/components/schemas/PlatformApplicationCandidateLink'
5536
+ multipart/form-data:
5537
+ schema:
5538
+ $ref: '#/components/schemas/PlatformApplicationCandidateLink'
5539
+ '*/*':
5540
+ schema:
5541
+ $ref: '#/components/schemas/PlatformApplicationCandidateLink'
5542
+ security:
5543
+ - PlatformApiKeyAuthentication: []
5544
+ responses:
5545
+ '200':
5546
+ description: Candidate linked
5547
+ /api/catalog/applications/platform/manage/{submission_id}/course-assignments/:
5548
+ get:
5549
+ operationId: catalog_applications_platform_manage_course_assignments_retrieve
5550
+ description: |-
5551
+ Course assignments for a submission (#2134): list, and assign courses to
5552
+ accepted candidates individually or in bulk. Each successful item issues a
5553
+ CourseInvitation that the existing pipeline enrolls.
5554
+ parameters:
5555
+ - in: path
5556
+ name: submission_id
5557
+ schema:
5558
+ type: string
5559
+ pattern: ^\d+$
5560
+ required: true
5561
+ tags:
5562
+ - catalog
5563
+ security:
5564
+ - PlatformApiKeyAuthentication: []
5565
+ responses:
5566
+ '200':
5567
+ description: Assignments for the submission
5568
+ post:
5569
+ operationId: catalog_applications_platform_manage_course_assignments_create
5570
+ description: |-
5571
+ Course assignments for a submission (#2134): list, and assign courses to
5572
+ accepted candidates individually or in bulk. Each successful item issues a
5573
+ CourseInvitation that the existing pipeline enrolls.
5574
+ parameters:
5575
+ - in: path
5576
+ name: submission_id
5577
+ schema:
5578
+ type: string
5579
+ pattern: ^\d+$
5580
+ required: true
5581
+ tags:
5582
+ - catalog
5583
+ requestBody:
5584
+ content:
5585
+ application/json:
5586
+ schema:
5587
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignment'
5588
+ application/scim+json:
5589
+ schema:
5590
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignment'
5591
+ application/x-www-form-urlencoded:
5592
+ schema:
5593
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignment'
5594
+ multipart/form-data:
5595
+ schema:
5596
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignment'
5597
+ '*/*':
5598
+ schema:
5599
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignment'
5600
+ required: true
5601
+ security:
5602
+ - PlatformApiKeyAuthentication: []
5603
+ responses:
5604
+ '200':
5605
+ description: Per-item assignment results
5606
+ /api/catalog/applications/platform/manage/{submission_id}/course-assignments/{assignment_id}/:
5607
+ delete:
5608
+ operationId: catalog_applications_platform_manage_course_assignments_destroy
5609
+ description: |-
5610
+ Remove one course assignment (§9.2 "enrollment changes after the school
5611
+ year begins" — the record side).
5612
+
5613
+ Deactivates the assignment and cancels its invitation when the student has
5614
+ not yet been enrolled through it. It never unenrolls an already-enrolled
5615
+ student: platform admins un-enroll deliberately through the catalog
5616
+ enrollment endpoints, not from an admissions record.
5617
+ parameters:
5618
+ - in: path
5619
+ name: assignment_id
5620
+ schema:
5621
+ type: string
5622
+ pattern: ^\d+$
5623
+ required: true
5624
+ - in: path
5625
+ name: submission_id
5626
+ schema:
5627
+ type: string
5628
+ pattern: ^\d+$
5629
+ required: true
5630
+ tags:
5631
+ - catalog
5632
+ security:
5633
+ - PlatformApiKeyAuthentication: []
5634
+ responses:
5635
+ '204':
5636
+ description: Assignment removed
5637
+ /api/catalog/applications/platform/manage/{submission_id}/fee/:
5638
+ get:
5639
+ operationId: catalog_applications_platform_manage_fee_retrieve
5640
+ description: |-
5641
+ Reviewer/admin view of a submission's application fee (#2132, §5).
5642
+
5643
+ GET returns the charge and its event history; POST records an out-of-band
5644
+ payment or a waiver/refund/credit. Money collection through Stripe is a
5645
+ later segment; this is the domain side.
5646
+ parameters:
5647
+ - in: path
5648
+ name: submission_id
5649
+ schema:
5650
+ type: string
5651
+ pattern: ^\d+$
5652
+ required: true
5653
+ tags:
5654
+ - catalog
5655
+ security:
5656
+ - PlatformApiKeyAuthentication: []
5657
+ responses:
5658
+ '200':
5659
+ description: Charge + events
5660
+ post:
5661
+ operationId: catalog_applications_platform_manage_fee_create
5662
+ description: |-
5663
+ Reviewer/admin view of a submission's application fee (#2132, §5).
5664
+
5665
+ GET returns the charge and its event history; POST records an out-of-band
5666
+ payment or a waiver/refund/credit. Money collection through Stripe is a
5667
+ later segment; this is the domain side.
5668
+ parameters:
5669
+ - in: path
5670
+ name: submission_id
5671
+ schema:
5672
+ type: string
5673
+ pattern: ^\d+$
5674
+ required: true
5675
+ tags:
5676
+ - catalog
5677
+ requestBody:
5678
+ content:
5679
+ application/json:
5680
+ schema:
5681
+ $ref: '#/components/schemas/PlatformApplicationFeeAction'
5682
+ application/scim+json:
5683
+ schema:
5684
+ $ref: '#/components/schemas/PlatformApplicationFeeAction'
5685
+ application/x-www-form-urlencoded:
5686
+ schema:
5687
+ $ref: '#/components/schemas/PlatformApplicationFeeAction'
5688
+ multipart/form-data:
5689
+ schema:
5690
+ $ref: '#/components/schemas/PlatformApplicationFeeAction'
5691
+ '*/*':
5692
+ schema:
5693
+ $ref: '#/components/schemas/PlatformApplicationFeeAction'
5694
+ required: true
5695
+ security:
5696
+ - PlatformApiKeyAuthentication: []
5697
+ responses:
5698
+ '200':
5699
+ description: Charge updated
5700
+ /api/catalog/applications/platform/manage/{submission_id}/notes/:
5701
+ get:
5702
+ operationId: catalog_applications_platform_manage_notes_retrieve
5703
+ description: |-
5704
+ Internal reviewer notes on a submission (#2089, §6). Never surfaced on
5705
+ applicant endpoints. GET lists (optional ``kind`` filter); POST adds one.
5706
+ parameters:
5707
+ - in: query
5708
+ name: platform_key
5709
+ schema:
5710
+ type: string
5711
+ minLength: 1
5712
+ - in: query
5713
+ name: platform_org
5714
+ schema:
5715
+ type: string
5716
+ minLength: 1
5717
+ - in: query
5718
+ name: search
5719
+ schema:
5720
+ type: string
5721
+ minLength: 1
5722
+ - in: query
5723
+ name: sort
5724
+ schema:
5725
+ type: string
5726
+ minLength: 1
5727
+ - in: query
5728
+ name: status
5729
+ schema:
5730
+ type: string
5731
+ minLength: 1
5732
+ - in: path
5733
+ name: submission_id
5734
+ schema:
5735
+ type: string
5736
+ pattern: ^\d+$
5737
+ required: true
5738
+ tags:
5739
+ - catalog
5740
+ security:
5741
+ - PlatformApiKeyAuthentication: []
5742
+ responses:
5743
+ '200':
5744
+ description: Notes for the submission
5745
+ post:
5746
+ operationId: catalog_applications_platform_manage_notes_create
5747
+ description: |-
5748
+ Internal reviewer notes on a submission (#2089, §6). Never surfaced on
5749
+ applicant endpoints. GET lists (optional ``kind`` filter); POST adds one.
5750
+ parameters:
5751
+ - in: path
5752
+ name: submission_id
5753
+ schema:
5754
+ type: string
5755
+ pattern: ^\d+$
5756
+ required: true
5757
+ tags:
5758
+ - catalog
5759
+ requestBody:
5760
+ content:
5761
+ application/json:
5762
+ schema:
5763
+ $ref: '#/components/schemas/PlatformApplicationNote'
5764
+ application/scim+json:
5765
+ schema:
5766
+ $ref: '#/components/schemas/PlatformApplicationNote'
5767
+ application/x-www-form-urlencoded:
5768
+ schema:
5769
+ $ref: '#/components/schemas/PlatformApplicationNote'
5770
+ multipart/form-data:
5771
+ schema:
5772
+ $ref: '#/components/schemas/PlatformApplicationNote'
5773
+ '*/*':
5774
+ schema:
5775
+ $ref: '#/components/schemas/PlatformApplicationNote'
5776
+ required: true
5777
+ security:
5778
+ - PlatformApiKeyAuthentication: []
5779
+ responses:
5780
+ '201':
5781
+ description: Note created
5782
+ /api/catalog/applications/platform/manage/{submission_id}/notes/{note_id}/:
5783
+ patch:
5784
+ operationId: catalog_applications_platform_manage_notes_partial_update
5785
+ description: Edit or remove a single internal reviewer note.
5786
+ parameters:
5787
+ - in: path
5788
+ name: note_id
5789
+ schema:
5790
+ type: string
5791
+ pattern: ^\d+$
5792
+ required: true
5793
+ - in: path
5794
+ name: submission_id
5795
+ schema:
5796
+ type: string
5797
+ pattern: ^\d+$
5798
+ required: true
5799
+ tags:
5800
+ - catalog
5801
+ requestBody:
5802
+ content:
5803
+ application/json:
5804
+ schema:
5805
+ $ref: '#/components/schemas/PatchedPlatformApplicationNote'
5806
+ application/scim+json:
5807
+ schema:
5808
+ $ref: '#/components/schemas/PatchedPlatformApplicationNote'
5809
+ application/x-www-form-urlencoded:
5810
+ schema:
5811
+ $ref: '#/components/schemas/PatchedPlatformApplicationNote'
5812
+ multipart/form-data:
5813
+ schema:
5814
+ $ref: '#/components/schemas/PatchedPlatformApplicationNote'
5815
+ '*/*':
5816
+ schema:
5817
+ $ref: '#/components/schemas/PatchedPlatformApplicationNote'
5818
+ security:
5819
+ - PlatformApiKeyAuthentication: []
5820
+ responses:
5821
+ '200':
5822
+ description: Note updated
5823
+ delete:
5824
+ operationId: catalog_applications_platform_manage_notes_destroy
5825
+ description: Edit or remove a single internal reviewer note.
5826
+ parameters:
5827
+ - in: path
5828
+ name: note_id
5829
+ schema:
5830
+ type: string
5831
+ pattern: ^\d+$
5832
+ required: true
5833
+ - in: path
5834
+ name: submission_id
5835
+ schema:
5836
+ type: string
5837
+ pattern: ^\d+$
5838
+ required: true
5839
+ tags:
5840
+ - catalog
5841
+ security:
5842
+ - PlatformApiKeyAuthentication: []
5843
+ responses:
5844
+ '204':
5845
+ description: Note removed
5846
+ /api/catalog/applications/platform/manage/{submission_id}/placements/:
5847
+ get:
5848
+ operationId: catalog_applications_platform_manage_placements_retrieve
5849
+ description: |-
5850
+ Placements for a submission (#2133): list, and assign a new placement
5851
+ linking an accepted candidate to the placement mentor.
5852
+ parameters:
5853
+ - in: path
5854
+ name: submission_id
5855
+ schema:
5856
+ type: string
5857
+ pattern: ^\d+$
5858
+ required: true
5859
+ tags:
5860
+ - catalog
5861
+ security:
5862
+ - PlatformApiKeyAuthentication: []
5863
+ responses:
5864
+ '200':
5865
+ description: Placements for the submission
5866
+ post:
5867
+ operationId: catalog_applications_platform_manage_placements_create
5868
+ description: |-
5869
+ Placements for a submission (#2133): list, and assign a new placement
5870
+ linking an accepted candidate to the placement mentor.
5871
+ parameters:
5872
+ - in: path
5873
+ name: submission_id
5874
+ schema:
5875
+ type: string
5876
+ pattern: ^\d+$
5877
+ required: true
5878
+ tags:
5879
+ - catalog
5880
+ requestBody:
5881
+ content:
5882
+ application/json:
5883
+ schema:
5884
+ $ref: '#/components/schemas/PlatformApplicationPlacementCreate'
5885
+ application/scim+json:
5886
+ schema:
5887
+ $ref: '#/components/schemas/PlatformApplicationPlacementCreate'
5888
+ application/x-www-form-urlencoded:
5889
+ schema:
5890
+ $ref: '#/components/schemas/PlatformApplicationPlacementCreate'
5891
+ multipart/form-data:
5892
+ schema:
5893
+ $ref: '#/components/schemas/PlatformApplicationPlacementCreate'
5894
+ '*/*':
5895
+ schema:
5896
+ $ref: '#/components/schemas/PlatformApplicationPlacementCreate'
5897
+ required: true
5898
+ security:
5899
+ - PlatformApiKeyAuthentication: []
5900
+ responses:
5901
+ '200':
5902
+ description: Per-item placement results
5903
+ /api/catalog/applications/platform/manage/{submission_id}/placements/{placement_id}/:
5904
+ patch:
5905
+ operationId: catalog_applications_platform_manage_placements_partial_update
5906
+ description: 'Advance a single placement: status, the agent''s result, admin
5907
+ override.'
5908
+ parameters:
5909
+ - in: path
5910
+ name: placement_id
5911
+ schema:
5912
+ type: string
5913
+ pattern: ^\d+$
5914
+ required: true
5915
+ - in: path
5916
+ name: submission_id
5917
+ schema:
5918
+ type: string
5919
+ pattern: ^\d+$
5920
+ required: true
5921
+ tags:
5922
+ - catalog
5923
+ requestBody:
5924
+ content:
5925
+ application/json:
5926
+ schema:
5927
+ $ref: '#/components/schemas/PatchedPlatformApplicationPlacementUpdate'
5928
+ application/scim+json:
5929
+ schema:
5930
+ $ref: '#/components/schemas/PatchedPlatformApplicationPlacementUpdate'
5931
+ application/x-www-form-urlencoded:
5932
+ schema:
5933
+ $ref: '#/components/schemas/PatchedPlatformApplicationPlacementUpdate'
5934
+ multipart/form-data:
5935
+ schema:
5936
+ $ref: '#/components/schemas/PatchedPlatformApplicationPlacementUpdate'
5937
+ '*/*':
5938
+ schema:
5939
+ $ref: '#/components/schemas/PatchedPlatformApplicationPlacementUpdate'
5940
+ security:
5941
+ - PlatformApiKeyAuthentication: []
5942
+ responses:
5943
+ '200':
5944
+ description: Placement updated
5945
+ /api/catalog/applications/platform/manage/{submission_id}/submit/:
5946
+ post:
5947
+ operationId: catalog_applications_platform_manage_submit_create
5948
+ description: |-
5949
+ Admin submit-with-exceptions (§2.1 "administratively waived"): push a
5950
+ family's editable application to Submitted, recording a waiver for every
5951
+ required item still missing and bypassing an unpaid fee gate (the charge
5952
+ stays payable/waivable). Present-but-invalid answers still block (400).
5953
+ parameters:
5954
+ - in: path
5955
+ name: submission_id
5956
+ schema:
5957
+ type: string
5958
+ pattern: ^\d+$
5959
+ required: true
5960
+ tags:
5961
+ - catalog
5962
+ requestBody:
5963
+ content:
5964
+ application/json:
5965
+ schema:
5966
+ $ref: '#/components/schemas/PlatformApplicationAdminSubmit'
5967
+ application/scim+json:
5968
+ schema:
5969
+ $ref: '#/components/schemas/PlatformApplicationAdminSubmit'
5970
+ application/x-www-form-urlencoded:
5971
+ schema:
5972
+ $ref: '#/components/schemas/PlatformApplicationAdminSubmit'
5973
+ multipart/form-data:
5974
+ schema:
5975
+ $ref: '#/components/schemas/PlatformApplicationAdminSubmit'
5976
+ '*/*':
5977
+ schema:
5978
+ $ref: '#/components/schemas/PlatformApplicationAdminSubmit'
5979
+ security:
5980
+ - PlatformApiKeyAuthentication: []
5981
+ responses:
5982
+ '200':
5983
+ description: Application submitted
5984
+ /api/catalog/applications/platform/manage/{submission_id}/transition/:
5985
+ post:
5986
+ operationId: catalog_applications_platform_manage_transition_create
5987
+ description: |-
5988
+ Advance a submission or a single candidate through the review pipeline
5989
+ (#2089, §5-6). A ``candidate_id`` scopes the action to one person; without
5990
+ it the action applies to every candidate that can legally accept it. When
5991
+ ``action`` is ``decline`` and ``block`` is set, the applicant is also added
5992
+ to the platform ban-list (deny-with-block).
5993
+ parameters:
5994
+ - in: path
5995
+ name: submission_id
5996
+ schema:
5997
+ type: string
5998
+ pattern: ^\d+$
5999
+ required: true
6000
+ tags:
6001
+ - catalog
6002
+ requestBody:
6003
+ content:
6004
+ application/json:
6005
+ schema:
6006
+ $ref: '#/components/schemas/PlatformApplicationTransition'
6007
+ application/scim+json:
6008
+ schema:
6009
+ $ref: '#/components/schemas/PlatformApplicationTransition'
6010
+ application/x-www-form-urlencoded:
6011
+ schema:
6012
+ $ref: '#/components/schemas/PlatformApplicationTransition'
6013
+ multipart/form-data:
6014
+ schema:
6015
+ $ref: '#/components/schemas/PlatformApplicationTransition'
6016
+ '*/*':
6017
+ schema:
6018
+ $ref: '#/components/schemas/PlatformApplicationTransition'
6019
+ required: true
6020
+ security:
6021
+ - PlatformApiKeyAuthentication: []
6022
+ responses:
6023
+ '200':
6024
+ description: Updated submission detail
6025
+ /api/catalog/applications/platform/manage/{submission_id}/waivers/:
6026
+ post:
6027
+ operationId: catalog_applications_platform_manage_waivers_create
6028
+ description: |-
6029
+ Waive a required item on one application (§2.1 "administratively
6030
+ waived"): POST excuses a missing required field so it no longer blocks
6031
+ submission; DELETE reinstates it. Waivers excuse absence only — a
6032
+ present-but-invalid answer still blocks. The fee is waived through its own
6033
+ fee endpoint action, which also settles the money record.
6034
+ parameters:
6035
+ - in: path
6036
+ name: submission_id
6037
+ schema:
6038
+ type: string
6039
+ pattern: ^\d+$
6040
+ required: true
6041
+ tags:
6042
+ - catalog
6043
+ requestBody:
6044
+ content:
6045
+ application/json:
6046
+ schema:
6047
+ $ref: '#/components/schemas/PlatformApplicationWaiver'
6048
+ application/scim+json:
6049
+ schema:
6050
+ $ref: '#/components/schemas/PlatformApplicationWaiver'
6051
+ application/x-www-form-urlencoded:
6052
+ schema:
6053
+ $ref: '#/components/schemas/PlatformApplicationWaiver'
6054
+ multipart/form-data:
6055
+ schema:
6056
+ $ref: '#/components/schemas/PlatformApplicationWaiver'
6057
+ '*/*':
6058
+ schema:
6059
+ $ref: '#/components/schemas/PlatformApplicationWaiver'
6060
+ required: true
6061
+ security:
6062
+ - PlatformApiKeyAuthentication: []
6063
+ responses:
6064
+ '200':
6065
+ description: Waiver recorded
6066
+ delete:
6067
+ operationId: catalog_applications_platform_manage_waivers_destroy
6068
+ description: |-
6069
+ Waive a required item on one application (§2.1 "administratively
6070
+ waived"): POST excuses a missing required field so it no longer blocks
6071
+ submission; DELETE reinstates it. Waivers excuse absence only — a
6072
+ present-but-invalid answer still blocks. The fee is waived through its own
6073
+ fee endpoint action, which also settles the money record.
6074
+ parameters:
6075
+ - in: path
6076
+ name: submission_id
6077
+ schema:
6078
+ type: string
6079
+ pattern: ^\d+$
6080
+ required: true
6081
+ tags:
6082
+ - catalog
6083
+ security:
6084
+ - PlatformApiKeyAuthentication: []
6085
+ responses:
6086
+ '204':
6087
+ description: Waiver removed
6088
+ /api/catalog/applications/platform/manage/blocks/:
6089
+ get:
6090
+ operationId: catalog_applications_platform_manage_blocks_retrieve
6091
+ description: List the active application blocks (ban-list) for a platform.
6092
+ parameters:
6093
+ - in: query
6094
+ name: platform_key
6095
+ schema:
6096
+ type: string
6097
+ minLength: 1
6098
+ - in: query
6099
+ name: platform_org
6100
+ schema:
6101
+ type: string
6102
+ minLength: 1
6103
+ - in: query
6104
+ name: search
6105
+ schema:
6106
+ type: string
6107
+ minLength: 1
6108
+ - in: query
6109
+ name: sort
6110
+ schema:
6111
+ type: string
6112
+ minLength: 1
6113
+ - in: query
6114
+ name: status
6115
+ schema:
6116
+ type: string
6117
+ minLength: 1
6118
+ tags:
6119
+ - catalog
6120
+ security:
6121
+ - PlatformApiKeyAuthentication: []
6122
+ responses:
6123
+ '200':
6124
+ description: Active blocks
6125
+ /api/catalog/applications/platform/manage/blocks/{block_id}/:
6126
+ delete:
6127
+ operationId: catalog_applications_platform_manage_blocks_destroy
6128
+ description: Lift a single active application block (unblock).
6129
+ parameters:
6130
+ - in: path
6131
+ name: block_id
6132
+ schema:
6133
+ type: string
6134
+ pattern: ^\d+$
6135
+ required: true
6136
+ - in: query
6137
+ name: platform_key
6138
+ schema:
6139
+ type: string
6140
+ minLength: 1
6141
+ - in: query
6142
+ name: platform_org
6143
+ schema:
6144
+ type: string
6145
+ minLength: 1
6146
+ - in: query
6147
+ name: search
6148
+ schema:
6149
+ type: string
6150
+ minLength: 1
6151
+ - in: query
6152
+ name: sort
6153
+ schema:
6154
+ type: string
6155
+ minLength: 1
6156
+ - in: query
6157
+ name: status
6158
+ schema:
6159
+ type: string
6160
+ minLength: 1
6161
+ tags:
6162
+ - catalog
6163
+ security:
6164
+ - PlatformApiKeyAuthentication: []
6165
+ responses:
6166
+ '204':
6167
+ description: Block lifted
6168
+ /api/catalog/applications/platform/manage/stats/:
6169
+ get:
6170
+ operationId: catalog_applications_platform_manage_stats_retrieve
6171
+ description: |-
6172
+ Wires RBAC into a DRF view.
6173
+
6174
+ Two responsibilities:
6175
+
6176
+ 1. When RBAC is enabled, replace the view's `permission_classes` with
6177
+ `RbacAuthGate` (the gate the RBAC layer assumes — `IsEdxAuthenticated`
6178
+ semantics, plus opt-in acceptance of token-policies PlatformApiKeys for
6179
+ views that set `token_policies_enabled = True`).
6180
+
6181
+ 2. Detect server-to-server (Django auth) callers via `is_service_account`.
6182
+ Server-to-server tokens authenticate as Django auth users with no
6183
+ relationship to a platform EdxUser. The convention is "we trust this
6184
+ caller — bypass RBAC and serve the request."
6185
+
6186
+ Combine it with the RBAC-disabled check at the top of `initial()` so
6187
+ the early exit skips all RBAC prep work:
6188
+
6189
+ if not ConfigFlags.rbac_enabled() or self.is_service_account:
6190
+ return
6191
+
6192
+ Use `is_service_account` at any other touch points where caller
6193
+ identity matters (queryset ownership filters, owner attribution on
6194
+ create, serializer context, etc.).
6195
+ parameters:
6196
+ - in: query
6197
+ name: platform_key
6198
+ schema:
6199
+ type: string
6200
+ minLength: 1
6201
+ - in: query
6202
+ name: platform_org
6203
+ schema:
6204
+ type: string
6205
+ minLength: 1
6206
+ - in: query
6207
+ name: search
6208
+ schema:
6209
+ type: string
6210
+ minLength: 1
6211
+ - in: query
6212
+ name: sort
6213
+ schema:
6214
+ type: string
6215
+ minLength: 1
6216
+ - in: query
6217
+ name: status
6218
+ schema:
6219
+ type: string
6220
+ minLength: 1
6221
+ tags:
6222
+ - catalog
6223
+ security:
6224
+ - PlatformApiKeyAuthentication: []
6225
+ responses:
6226
+ '200':
6227
+ description: Per-status counts
6228
+ /api/catalog/applications/platform/renew/:
6229
+ post:
6230
+ operationId: catalog_applications_platform_renew_create
6231
+ description: |-
6232
+ Start an annual re-enrollment (#2135): a normal draft create whose
6233
+ responses are pre-filled from the caller's most recent approved submission
6234
+ (current-schema fields only; signatures, consents, files, and fields the
6235
+ form flags fresh are re-asked), linked to that prior submission. With no
6236
+ prior approved submission this behaves as a plain create.
6237
+ tags:
6238
+ - catalog
6239
+ requestBody:
6240
+ content:
6241
+ application/json:
6242
+ schema:
6243
+ $ref: '#/components/schemas/PlatformApplicationCreate'
6244
+ application/scim+json:
6245
+ schema:
6246
+ $ref: '#/components/schemas/PlatformApplicationCreate'
6247
+ application/x-www-form-urlencoded:
6248
+ schema:
6249
+ $ref: '#/components/schemas/PlatformApplicationCreate'
6250
+ multipart/form-data:
6251
+ schema:
6252
+ $ref: '#/components/schemas/PlatformApplicationCreate'
6253
+ '*/*':
6254
+ schema:
6255
+ $ref: '#/components/schemas/PlatformApplicationCreate'
6256
+ required: true
6257
+ security:
6258
+ - PlatformApiKeyAuthentication: []
6259
+ responses:
6260
+ '201':
6261
+ content:
6262
+ application/json:
6263
+ schema:
6264
+ $ref: '#/components/schemas/PlatformApplicationDetail'
6265
+ description: ''
6266
+ /api/catalog/applications/platform/status/:
6267
+ get:
6268
+ operationId: catalog_applications_platform_status_retrieve
6269
+ description: |-
6270
+ Authenticated applicants, including learners on AXD student tokens.
6271
+
6272
+ Prepends StudentTokenAuthentication like core UserPlatformSelfLinkView (it is
6273
+ not in the DRF defaults, but learners self-applying use it). An anonymous
6274
+ request returns 401, not 403: DRF's ``permission_denied`` raises
6275
+ ``NotAuthenticated`` whenever no authenticator succeeded.
6276
+ parameters:
6277
+ - in: query
6278
+ name: form_id
6279
+ schema:
6280
+ type: integer
6281
+ - in: query
6282
+ name: platform_key
6283
+ schema:
6284
+ type: string
6285
+ minLength: 1
6286
+ - in: query
6287
+ name: platform_org
6288
+ schema:
6289
+ type: string
6290
+ minLength: 1
6291
+ tags:
6292
+ - catalog
6293
+ security:
6294
+ - PlatformApiKeyAuthentication: []
6295
+ responses:
6296
+ '200':
6297
+ description: Gate state
4755
6298
  /api/catalog/conditionals/course/eligibility/:
4756
6299
  get:
4757
6300
  operationId: catalog_conditionals_course_eligibility_retrieve
@@ -20160,6 +21703,34 @@ paths:
20160
21703
  description: Permission denied - insufficient RBAC permissions
20161
21704
  '404':
20162
21705
  description: Policy not found
21706
+ /api/core/rbac/resources/:
21707
+ get:
21708
+ operationId: core_rbac_resources_retrieve
21709
+ description: |-
21710
+ GET the resource tree node at `path`.
21711
+
21712
+ Platform comes from the request token (service accounts pass platform_key).
21713
+ summary: Discover resources for policy building
21714
+ parameters:
21715
+ - in: query
21716
+ name: path
21717
+ schema:
21718
+ type: string
21719
+ default: /
21720
+ minLength: 1
21721
+ description: Discovery path, e.g. '/', '/mentors/', '/mentors/5/'.
21722
+ tags:
21723
+ - core
21724
+ security:
21725
+ - PlatformApiKeyAuthentication: []
21726
+ responses:
21727
+ '200':
21728
+ description: An entity node (child collections) or a collection node (list_url
21729
+ + search_qps + result_fields).
21730
+ '400':
21731
+ description: Invalid path or unknown platform
21732
+ '403':
21733
+ description: Missing resource-discovery access
20163
21734
  /api/core/rbac/roles/:
20164
21735
  get:
20165
21736
  operationId: core_rbac_roles_list
@@ -45920,6 +47491,14 @@ components:
45920
47491
  * `course_resource` - Course and Resource
45921
47492
  * `unit_resource` - Unit and Resource
45922
47493
  * `all` - Course, Unit, and Resource
47494
+ KindEnum:
47495
+ enum:
47496
+ - general
47497
+ - interview
47498
+ type: string
47499
+ description: |-
47500
+ * `general` - general
47501
+ * `interview` - interview
45923
47502
  LauncherViewPostRequest:
45924
47503
  type: object
45925
47504
  properties:
@@ -47065,6 +48644,7 @@ components:
47065
48644
  * `DEFAULT_TEMPLATE` - Default Template
47066
48645
  * `HUMAN_SUPPORT_NOTIFICATION` - Human Support Notification
47067
48646
  * `PATHWAY_ENROLLMENT_CONFIRMATION` - Pathway Enrollment Confirmation
48647
+ * `PLATFORM_APPLICATION_DECISION` - Platform Application Decision
47068
48648
  * `PLATFORM_INVITATION` - Platform Invitation
47069
48649
  * `POLICY_ASSIGNMENT` - Policy Assignment
47070
48650
  * `PROACTIVE_LEARNER_NOTIFICATION` - Proactive Learner Notification
@@ -47085,7 +48665,7 @@ components:
47085
48665
  * `USER_NOTIF_USER_INACTIVITY` - User Notif User Inactivity
47086
48666
  * `USER_NOTIF_USER_REGISTRATION` - User Notif User Registration
47087
48667
  oneOf:
47088
- - $ref: '#/components/schemas/Type4b7Enum'
48668
+ - $ref: '#/components/schemas/TypeB29Enum'
47089
48669
  - $ref: '#/components/schemas/NullEnum'
47090
48670
  name:
47091
48671
  type: string
@@ -47474,6 +49054,7 @@ components:
47474
49054
  * `DEFAULT_TEMPLATE` - Default Template
47475
49055
  * `HUMAN_SUPPORT_NOTIFICATION` - Human Support Notification
47476
49056
  * `PATHWAY_ENROLLMENT_CONFIRMATION` - Pathway Enrollment Confirmation
49057
+ * `PLATFORM_APPLICATION_DECISION` - Platform Application Decision
47477
49058
  * `PLATFORM_INVITATION` - Platform Invitation
47478
49059
  * `POLICY_ASSIGNMENT` - Policy Assignment
47479
49060
  * `PROACTIVE_LEARNER_NOTIFICATION` - Proactive Learner Notification
@@ -47494,7 +49075,7 @@ components:
47494
49075
  * `USER_NOTIF_USER_INACTIVITY` - User Notif User Inactivity
47495
49076
  * `USER_NOTIF_USER_REGISTRATION` - User Notif User Registration
47496
49077
  oneOf:
47497
- - $ref: '#/components/schemas/Type4b7Enum'
49078
+ - $ref: '#/components/schemas/TypeB29Enum'
47498
49079
  - $ref: '#/components/schemas/BlankEnum'
47499
49080
  - $ref: '#/components/schemas/NullEnum'
47500
49081
  name:
@@ -49497,6 +51078,7 @@ components:
49497
51078
  * `DEFAULT_TEMPLATE` - Default Template
49498
51079
  * `HUMAN_SUPPORT_NOTIFICATION` - Human Support Notification
49499
51080
  * `PATHWAY_ENROLLMENT_CONFIRMATION` - Pathway Enrollment Confirmation
51081
+ * `PLATFORM_APPLICATION_DECISION` - Platform Application Decision
49500
51082
  * `PLATFORM_INVITATION` - Platform Invitation
49501
51083
  * `POLICY_ASSIGNMENT` - Policy Assignment
49502
51084
  * `PROACTIVE_LEARNER_NOTIFICATION` - Proactive Learner Notification
@@ -49517,7 +51099,7 @@ components:
49517
51099
  * `USER_NOTIF_USER_INACTIVITY` - User Notif User Inactivity
49518
51100
  * `USER_NOTIF_USER_REGISTRATION` - User Notif User Registration
49519
51101
  oneOf:
49520
- - $ref: '#/components/schemas/Type4b7Enum'
51102
+ - $ref: '#/components/schemas/TypeB29Enum'
49521
51103
  - $ref: '#/components/schemas/NullEnum'
49522
51104
  name:
49523
51105
  type: string
@@ -50200,6 +51782,49 @@ components:
50200
51782
  type: integer
50201
51783
  writeOnly: true
50202
51784
  description: RbacGroup IDs to disassociate from this token (mode=token_policies)
51785
+ PatchedPlatformApplicationFormUpdate:
51786
+ type: object
51787
+ description: Body for updating a platform's application form.
51788
+ properties:
51789
+ platform_key:
51790
+ type: string
51791
+ platform_org:
51792
+ type: string
51793
+ name:
51794
+ type: string
51795
+ schema: {}
51796
+ config: {}
51797
+ enabled:
51798
+ type: boolean
51799
+ is_default:
51800
+ type: boolean
51801
+ PatchedPlatformApplicationNote:
51802
+ type: object
51803
+ description: Body for adding/updating an internal reviewer note.
51804
+ properties:
51805
+ body:
51806
+ type: string
51807
+ kind:
51808
+ $ref: '#/components/schemas/KindEnum'
51809
+ PatchedPlatformApplicationPlacementUpdate:
51810
+ type: object
51811
+ description: |-
51812
+ Body for advancing a placement: status, the agent's result, an admin
51813
+ override, or a note. All optional; at least one must be present.
51814
+ properties:
51815
+ status:
51816
+ $ref: '#/components/schemas/PlatformApplicationPlacementUpdateStatusEnum'
51817
+ result: {}
51818
+ override: {}
51819
+ session_id:
51820
+ type: string
51821
+ note:
51822
+ type: string
51823
+ PatchedPlatformApplicationUpdate:
51824
+ type: object
51825
+ description: Body for updating a draft's responses.
51826
+ properties:
51827
+ responses: {}
50203
51828
  PatchedPlatformPublicImageAsset:
50204
51829
  type: object
50205
51830
  properties:
@@ -52634,6 +54259,267 @@ components:
52634
54259
  type: boolean
52635
54260
  required:
52636
54261
  - write
54262
+ PlatformApplicationAdminSubmit:
54263
+ type: object
54264
+ description: Body for the admin submit-with-exceptions action.
54265
+ properties:
54266
+ note:
54267
+ type: string
54268
+ PlatformApplicationAttachmentUpload:
54269
+ type: object
54270
+ description: Multipart body for uploading an attachment against a file field.
54271
+ properties:
54272
+ field:
54273
+ type: string
54274
+ item_id:
54275
+ type: string
54276
+ file:
54277
+ type: string
54278
+ format: uri
54279
+ required:
54280
+ - field
54281
+ - file
54282
+ PlatformApplicationCandidateLink:
54283
+ type: object
54284
+ description: |-
54285
+ Manually link an accepted candidate to an existing account; provide
54286
+ one of user_id or email.
54287
+ properties:
54288
+ user_id:
54289
+ type: integer
54290
+ email:
54291
+ type: string
54292
+ format: email
54293
+ PlatformApplicationCourseAssignment:
54294
+ type: object
54295
+ description: 'Body for assigning courses (#2134): one or many items in a single
54296
+ call.'
54297
+ properties:
54298
+ assignments:
54299
+ type: array
54300
+ items:
54301
+ $ref: '#/components/schemas/PlatformApplicationCourseAssignmentItem'
54302
+ required:
54303
+ - assignments
54304
+ PlatformApplicationCourseAssignmentItem:
54305
+ type: object
54306
+ description: 'One course assignment: which candidate, which course, and the
54307
+ dates.'
54308
+ properties:
54309
+ candidate_id:
54310
+ type: integer
54311
+ course_id:
54312
+ type: string
54313
+ started:
54314
+ type: string
54315
+ format: date-time
54316
+ expired:
54317
+ type: string
54318
+ format: date-time
54319
+ placement_id:
54320
+ type: integer
54321
+ required:
54322
+ - candidate_id
54323
+ - course_id
54324
+ PlatformApplicationCreate:
54325
+ type: object
54326
+ description: Body for creating an application draft.
54327
+ properties:
54328
+ platform_key:
54329
+ type: string
54330
+ responses: {}
54331
+ form_id:
54332
+ type: integer
54333
+ required:
54334
+ - platform_key
54335
+ PlatformApplicationDetail:
54336
+ type: object
54337
+ description: Minimal schema for a submission response object.
54338
+ properties:
54339
+ id:
54340
+ type: integer
54341
+ status:
54342
+ type: string
54343
+ required:
54344
+ - id
54345
+ - status
54346
+ PlatformApplicationFeeAction:
54347
+ type: object
54348
+ description: Admin action on a submission's application fee.
54349
+ properties:
54350
+ action:
54351
+ $ref: '#/components/schemas/PlatformApplicationFeeActionActionEnum'
54352
+ amount:
54353
+ type: string
54354
+ format: decimal
54355
+ pattern: ^-?\d{0,8}(?:\.\d{0,2})?$
54356
+ method:
54357
+ type: string
54358
+ funding_source:
54359
+ type: string
54360
+ note:
54361
+ type: string
54362
+ required:
54363
+ - action
54364
+ PlatformApplicationFeeActionActionEnum:
54365
+ enum:
54366
+ - record_payment
54367
+ - waive
54368
+ - refund
54369
+ - credit
54370
+ type: string
54371
+ description: |-
54372
+ * `record_payment` - record_payment
54373
+ * `waive` - waive
54374
+ * `refund` - refund
54375
+ * `credit` - credit
54376
+ PlatformApplicationFormCreate:
54377
+ type: object
54378
+ description: Body for creating a platform's application form.
54379
+ properties:
54380
+ platform_key:
54381
+ type: string
54382
+ platform_org:
54383
+ type: string
54384
+ name:
54385
+ type: string
54386
+ schema: {}
54387
+ config: {}
54388
+ enabled:
54389
+ type: boolean
54390
+ default: false
54391
+ is_default:
54392
+ type: boolean
54393
+ required:
54394
+ - platform_key
54395
+ - schema
54396
+ PlatformApplicationFormDetail:
54397
+ type: object
54398
+ description: Minimal schema for a form response object.
54399
+ properties:
54400
+ id:
54401
+ type: integer
54402
+ name:
54403
+ type: string
54404
+ version:
54405
+ type: integer
54406
+ enabled:
54407
+ type: boolean
54408
+ required:
54409
+ - enabled
54410
+ - id
54411
+ - name
54412
+ - version
54413
+ PlatformApplicationNote:
54414
+ type: object
54415
+ description: Body for adding/updating an internal reviewer note.
54416
+ properties:
54417
+ body:
54418
+ type: string
54419
+ kind:
54420
+ $ref: '#/components/schemas/KindEnum'
54421
+ required:
54422
+ - body
54423
+ PlatformApplicationPlacementCreate:
54424
+ type: object
54425
+ description: |-
54426
+ Body for assigning placements (#2133): one or many in a single call
54427
+ ("individually or in bulk", PDF §9.1).
54428
+ properties:
54429
+ placements:
54430
+ type: array
54431
+ items:
54432
+ $ref: '#/components/schemas/PlatformApplicationPlacementItem'
54433
+ required:
54434
+ - placements
54435
+ PlatformApplicationPlacementItem:
54436
+ type: object
54437
+ description: 'One placement assignment: which candidate, which mentor.'
54438
+ properties:
54439
+ candidate_id:
54440
+ type: integer
54441
+ mentor_unique_id:
54442
+ type: string
54443
+ mentor_label:
54444
+ type: string
54445
+ label:
54446
+ type: string
54447
+ session_id:
54448
+ type: string
54449
+ note:
54450
+ type: string
54451
+ required:
54452
+ - candidate_id
54453
+ - mentor_unique_id
54454
+ PlatformApplicationPlacementUpdateStatusEnum:
54455
+ enum:
54456
+ - not_assigned
54457
+ - assigned
54458
+ - started
54459
+ - completed
54460
+ - reviewed
54461
+ - confirmed
54462
+ type: string
54463
+ description: |-
54464
+ * `not_assigned` - not_assigned
54465
+ * `assigned` - assigned
54466
+ * `started` - started
54467
+ * `completed` - completed
54468
+ * `reviewed` - reviewed
54469
+ * `confirmed` - confirmed
54470
+ PlatformApplicationSubmit:
54471
+ type: object
54472
+ description: Body for submitting an application.
54473
+ properties:
54474
+ responses: {}
54475
+ PlatformApplicationTransition:
54476
+ type: object
54477
+ description: Body for a reviewer status transition (per-candidate or application-wide).
54478
+ properties:
54479
+ action:
54480
+ $ref: '#/components/schemas/PlatformApplicationTransitionActionEnum'
54481
+ candidate_id:
54482
+ type: integer
54483
+ message:
54484
+ type: string
54485
+ note:
54486
+ type: string
54487
+ block:
54488
+ type: boolean
54489
+ default: false
54490
+ required:
54491
+ - action
54492
+ PlatformApplicationTransitionActionEnum:
54493
+ enum:
54494
+ - start_review
54495
+ - request_info
54496
+ - require_interview
54497
+ - waitlist
54498
+ - accept
54499
+ - decline
54500
+ type: string
54501
+ description: |-
54502
+ * `start_review` - start_review
54503
+ * `request_info` - request_info
54504
+ * `require_interview` - require_interview
54505
+ * `waitlist` - waitlist
54506
+ * `accept` - accept
54507
+ * `decline` - decline
54508
+ PlatformApplicationWaiver:
54509
+ type: object
54510
+ description: |-
54511
+ Waive (POST) or reinstate (DELETE) one required field on an application
54512
+ (§2.1 required items "complete or administratively waived").
54513
+ properties:
54514
+ section:
54515
+ type: string
54516
+ field:
54517
+ type: string
54518
+ reason:
54519
+ type: string
54520
+ required:
54521
+ - field
54522
+ - section
52637
54523
  PlatformConfigurationList:
52638
54524
  type: object
52639
54525
  description: Serializer for listing platform configurations
@@ -58697,7 +60583,7 @@ components:
58697
60583
  * `release` - Release Reserved Credits
58698
60584
  * `rollover` - Rollover Credits
58699
60585
  * `refund` - Refund Credits
58700
- Type4b7Enum:
60586
+ TypeB29Enum:
58701
60587
  enum:
58702
60588
  - ACTIVITY_COURSE_MILESTONE
58703
60589
  - ACTIVITY_NEW_CONTENT
@@ -58715,6 +60601,7 @@ components:
58715
60601
  - DEFAULT_TEMPLATE
58716
60602
  - HUMAN_SUPPORT_NOTIFICATION
58717
60603
  - PATHWAY_ENROLLMENT_CONFIRMATION
60604
+ - PLATFORM_APPLICATION_DECISION
58718
60605
  - PLATFORM_INVITATION
58719
60606
  - POLICY_ASSIGNMENT
58720
60607
  - PROACTIVE_LEARNER_NOTIFICATION
@@ -58752,6 +60639,7 @@ components:
58752
60639
  * `DEFAULT_TEMPLATE` - Default Template
58753
60640
  * `HUMAN_SUPPORT_NOTIFICATION` - Human Support Notification
58754
60641
  * `PATHWAY_ENROLLMENT_CONFIRMATION` - Pathway Enrollment Confirmation
60642
+ * `PLATFORM_APPLICATION_DECISION` - Platform Application Decision
58755
60643
  * `PLATFORM_INVITATION` - Platform Invitation
58756
60644
  * `POLICY_ASSIGNMENT` - Policy Assignment
58757
60645
  * `PROACTIVE_LEARNER_NOTIFICATION` - Proactive Learner Notification