openapi: 3.1.0
info:
  title: OneRoster API
  version: 1.0.0
  description: >
    # Authentication


    All endpoints require authentication using the `Authorization: Bearer
    <token>` header.


    The token can be obtained with:


    ```

    curl -X POST
    https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token
    \

    -H "Content-Type: application/x-www-form-urlencoded" \

    -d
    "grant_type=client_credentials&client_id=<your-client-id>&client_secret=<your-client-secret>"

    ```


    Use the correct IDP server depending on the environment you're using:


    IDP Server for this environment:

    ```

    https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com

    ```


    Reach out to the platform team to get a client/secret pair for your
    application.


    # Pagination


    Our API uses offset pagination for list endpoints. Paginated responses
    include the following fields:


    - `offset`: Offset for the next page of results

    - `limit`: Number of items per page (default: 100, maximum: 3000)


    **Note:** While the OneRoster specification does not define a maximum limit,
    this implementation enforces a maximum of 3000 items per page to prevent
    abuse and ensure optimal performance.


    Example request:


    ```

    GET /ims/oneroster/rostering/v1p2/users?offset=20&limit=20

    ```


    All listing endpoints support offset pagination.


    # Filtering


    All listing endpoints support filtering using the `filter` query parameter,
    following 1EdTech's filtering specification.


    The filter should be a string with the following format:


    ```

    ?filter=[field][operator][value]

    ```


    Example request:


    ```

    GET /ims/oneroster/rostering/v1p2/users?filter=status='active'

    ```


    Example request with multiple filters:


    ```

    GET /ims/oneroster/rostering/v1p2/users?filter=status='active' AND
    name='John'

    ```


    **Filtering by nested relations is not supported**.


    # Sorting


    All listing endpoints support sorting using the `sort` and `orderBy` query
    parameters, following 1EdTech's sorting specification


    Example request:


    ```

    GET /ims/oneroster/rostering/v1p2/users?sort=lastName&orderBy=asc

    ```


    # Proprietary Extensions


    This implementation includes proprietary extensions that extend beyond the
    official OneRoster 1.2 specification to provide additional functionality.


    ## Search Parameter


    In addition to the standard `filter` parameter, this implementation provides
    a `search` query parameter for simplified free-text searching:


    ```

    GET /ims/oneroster/rostering/v1p2/users?search=john

    ```


    **Purpose**: The `search` parameter enables convenient text-based queries
    across multiple fields simultaneously, whereas the standard `filter`
    parameter requires specifying exact field names and operators:


    ```

    # Search parameter - searches across multiple fields automatically

    GET /ims/oneroster/rostering/v1p2/users?search=john


    # Equivalent using standard filter parameter

    GET /ims/oneroster/rostering/v1p2/users?filter=givenName~'john' OR
    familyName~'john'

    ```


    The `search` parameter performs case-insensitive partial matching across
    predefined fields for each endpoint, providing a more user-friendly querying
    experience.


    ## OneRoster 1.2 Standard Parameters


    The official OneRoster 1.2 specification defines these standard parameters:


    - `limit` - pagination limit

    - `offset` - pagination offset

    - `sort` - field to sort by

    - `orderBy` - sort direction (asc/desc)

    - `filter` - filtering expression

    - `fields` - field selection


    ## Affected Endpoints


    The proprietary `search` parameter is available on the following endpoints:


    **Rostering API**:


    - `GET /ims/oneroster/rostering/v1p2/academicSessions/`

    - `GET /ims/oneroster/rostering/v1p2/classes/`

    - `GET /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/students`

    - `GET /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/teachers`

    - `GET /ims/oneroster/rostering/v1p2/courses/`

    - `GET /ims/oneroster/rostering/v1p2/courses/{courseSourcedId}/classes`

    - `GET /ims/oneroster/rostering/v1p2/demographics/`

    - `GET /ims/oneroster/rostering/v1p2/enrollments/`

    - `GET
    /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/classes/{classSourcedId}/students`

    - `GET /ims/oneroster/rostering/v1p2/users/`


    **Gradebook API**:


    - `GET /ims/oneroster/gradebook/v1p2/assessmentLineItems/`

    - `GET /ims/oneroster/gradebook/v1p2/assessmentResults/`

    - `GET
    /ims/oneroster/gradebook/v1p2/classes/{classSourcedId}/students/{studentSourcedId}/results`

    - `GET /ims/oneroster/gradebook/v1p2/results/`


    **Resources API**:


    - `GET /ims/oneroster/resources/v1p2/resources/`


    ## Parameter Usage Guide


    ### Filter Parameter


    The standard `filter` parameter provides precise control over queries using
    these operators:


    - `=` - Exact match

    - `!=` - Not equal

    - `~` - Contains (case-insensitive)

    - `>`, `>=`, `<`, `<=` - Comparison operators

    - `@` - In list (comma-separated values)


    ### Logical Operators


    Combine multiple conditions in filter expressions:


    - `AND` - Both conditions must be true

    - `OR` - Either condition must be true


    ### Usage Examples


    ```bash

    # Simple text search across multiple fields

    GET /users?search=john


    # Equivalent precise filtering

    GET /users?filter=givenName~'john' OR familyName~'john'


    # Complex filtering with multiple conditions

    GET /users?filter=status='active' AND givenName~'john'


    # Advanced filtering with different operators

    GET /users?filter=dateLastModified>'2023-01-01' AND status='active'

    ```


    ## Search Fields by Endpoint


    Different endpoints search across these predefined fields:


    - **Users**: `givenName`, `familyName`, `email`

    - **Courses**: `title`, `courseCode`

    - **Classes**: `title`

    - **Organizations**: `name`


    ## Interoperability Notes


    The `search` parameter is a proprietary extension specific to this
    implementation. Other OneRoster-compliant systems may only support the
    standard `filter` parameter. When building applications that need to work
    with multiple OneRoster providers, consider using the standard filtering
    approach.


    ## Additional Schema Fields


    ### AssessmentLineItem Extensions


    The AssessmentLineItem schema includes two proprietary fields that extend
    curriculum mapping capabilities:


    #### Component Field


    - **Field**: `component`

    - **Type**: Object reference (`{ sourcedId: string }`)

    - **Purpose**: Direct association between assessment line items and course
    components, enabling enhanced curriculum mapping and learning pathway
    tracking.


    #### ComponentResource Field


    - **Field**: `componentResource`

    - **Type**: Object reference (`{ sourcedId: string }`)

    - **Purpose**: Direct association between assessment line items and specific
    learning resources, supporting detailed content-to-assessment relationships
    and adaptive learning features.


    **Example Usage**:


    ```json

    {
      "sourcedId": "assessment-123",
      "title": "Chapter 5 Quiz",
      "component": { "sourcedId": "component-456" },
      "componentResource": { "sourcedId": "resource-789" }
    }

    ```


    ## Affected Endpoints


    ### Schema Extensions Availability


    The proprietary schema fields are available in:


    **Gradebook API**:


    - `GET /ims/oneroster/gradebook/v1p2/assessmentLineItems/` - Returns
    assessmentLineItems with `component` and `componentResource` fields

    - `GET /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}` -
    Returns individual assessmentLineItem with extended fields

    - `POST /ims/oneroster/gradebook/v1p2/assessmentLineItems/` - Accepts
    `component` and `componentResource` in request body

    - `PUT /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}` -
    Accepts extended fields for updates
servers:
  - url: https://api.alpha-1edtech.ai
    description: OneRoster API
tags:
  - name: Academic Sessions Management
    description: >-
      This enables the management of academic sessions i.e. periods of academic
      activity such as terms, semesters, grading periods, and school years.
      Academic sessions can have hierarchical relationships (e.g., a school year
      containing terms, terms containing grading periods).
  - name: Assessment Line Items Management
    description: >-
      This enables the management of the assessment line items i.e. line items
      that are used to store results about tests/assessments and where these
      test/assessments are not aligned to a class.
  - name: Assessment Results Management
    description: >-
      This enables the management of the assessment results i.e. results that
      are used to store scores for tests/assessments and where these
      test/assessments are not aligned to a class.
  - name: Categories Management
    description: This enables the management of Categories i.e. collections of LineItems.
  - name: Classes Management
    description: >-
      This enables the management of classes i.e. scheduled learning of courses,
      with respect to academic sessions.
  - name: Classes Management
    description: >-
      This enables the management of Classes i.e. scheduled learning of courses,
      with respect to scoreScales. For this service this is the collection of
      operations that provide gradebook data in the context of a class
      identifier.
  - name: Course Component Resources Management
    description: >-
      This enables the management of Course Component Resources i.e. resources
      for a course component.
  - name: Course Components Management
    description: >-
      This enables the management of Course Components i.e. components of a
      course.
  - name: Courses Management
    description: This enables the management of Courses i.e. programme of study.
  - name: Demographics Management
    description: >-
      This enables the management of demographics information (each assigned to
      a specific user). The sourcedIds for the user and the demographics records
      should be the same.
  - name: Enrollments Management
    description: >-
      This enables the management of the enrollments of users (teachers,
      students, etc.) on classes supplied by schools.
  - name: Grading Periods Management
    description: >-
      This enables the management of grading periods i.e. specific academic
      sessions.
  - name: Line Items Management
    description: >-
      This enables the management of lineItems i.e. the set of results for the
      assessment of some activity.
  - name: Organizations Management
    description: >-
      This enables the management of orgs i.e. an organization involved in the
      learning in some form or other.
  - name: Resources Management
    description: This enables the management of resources
  - name: Results Management
    description: >-
      This enables the management of results i.e. the score allocated to a
      learner from the assessent of a learning activity. Results are collected
      as a set of 'lineItems'.
  - name: Schools Management
    description: >-
      This enables the management of information about schools. A school is a
      type of 'org'.
  - name: Schools Management
    description: >-
      This enables the management of information about schools with respect to
      scoreScales. A school is a type of 'org'. For this service this is the
      collection of operations that provide gradebook data in the context of a
      school identifier.
  - name: Score Scales Management
    description: >-
      This enables the management of scoreScales i.e. the set of scales for the
      results and lineItems.
  - name: Students Management
    description: >-
      This enables the management of information about students (a student is a
      type of 'user').
  - name: Teachers Management
    description: >-
      This enables the management of information about teachers (a teacher is a
      type of 'user').
  - name: Terms Management
    description: >-
      This enables the management of information about terms (a term is a type
      of 'academicSession').
  - name: Users Management
    description: >-
      This enables the management of information about users (including students
      and teachers).
security:
  - OAuth2: []
paths:
  /ims/oneroster/gradebook/v1p2/scoreScales/:
    get:
      operationId: getAllScoreScales
      summary: Get all Score Scales
      description: Get all of the ScoreScales on the service provider.
      tags: &ref_0
        - Score Scales Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: &ref_1
              - asc
              - desc
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of score scales
          content:
            application/json:
              schema:
                type: object
                properties:
                  scoreScales:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: &ref_2
                            - active
                            - tobedeleted
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        type:
                          type: string
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScaleValue:
                          type: array
                          items:
                            type: object
                            properties:
                              itemValueLHS:
                                type: string
                              itemValueRHS:
                                type: string
                              value:
                                type: string
                              description:
                                type: string
                            required:
                              - itemValueLHS
                              - itemValueRHS
                      required:
                        - status
                        - title
                        - type
                        - class
                        - scoreScaleValue
                      description: Represents a score scale.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - scoreScales
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createScoreScale
      summary: Create a Score Scale
      description: >-
        To create a new scoreScale. The responding system must return the set of
        sourcedIds that have been allocated to the newly created scoreScale
        records.
      tags: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                scoreScale:
                  $ref: '#/components/schemas/ScoreScale'
              required:
                - scoreScale
      responses:
        '201':
          description: Score scale successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/scoreScales/{sourcedId}:
    get:
      operationId: getScoreScale
      summary: Get a Score Scale
      description: Get a specific scoreScale on the service provider.
      tags: *ref_0
      parameters:
        - name: sourcedId
          description: The sourcedId of the score scale
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the score scale
          content:
            application/json:
              schema:
                type: object
                properties:
                  scoreScale:
                    $ref: '#/components/schemas/ScoreScale'
                required:
                  - scoreScale
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putScoreScale
      summary: Update or Create a Score Scale
      description: >-
        To update an existing scoreScale or create a new one if it doesn't
        exist. The sourcedId for the record is supplied by the requesting
        system.
      tags: *ref_0
      parameters:
        - name: sourcedId
          description: The sourcedId of the score scale
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                scoreScale:
                  $ref: '#/components/schemas/ScoreScale'
              required:
                - scoreScale
      responses:
        '201':
          description: Score scale successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  scoreScale:
                    $ref: '#/components/schemas/ScoreScale'
                required:
                  - scoreScale
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteScoreScale
      summary: Delete a Score Scale
      description: >-
        Perform a soft delete on a specific Score Scale on the service provider.
        This operation changes the status of the Score Scale to 'tobedeleted'.
      tags: *ref_0
      parameters:
        - name: sourcedId
          description: The sourcedId of the score scale to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Score scale successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/schools/{sourcedId}/scoreScales:
    get:
      operationId: getScoreScalesForSchool
      summary: Get Score Scales for a School
      description: >-
        Get the set of scoreScales on the service provider for a specific
        school. If the corresponding record cannot be located, the api will
        return a 404 error code and message 'School not found.'
      tags:
        - Schools Management
        - Score Scales Management
      parameters:
        - name: sourcedId
          description: The sourcedId of the school
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of score scales
          content:
            application/json:
              schema:
                type: object
                properties:
                  scoreScales:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        type:
                          type: string
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScaleValue:
                          type: array
                          items:
                            type: object
                            properties:
                              itemValueLHS:
                                type: string
                              itemValueRHS:
                                type: string
                              value:
                                type: string
                              description:
                                type: string
                            required:
                              - itemValueLHS
                              - itemValueRHS
                      required:
                        - status
                        - title
                        - type
                        - class
                        - scoreScaleValue
                      description: Represents a score scale.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - scoreScales
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/:
    get:
      operationId: getAllSchools
      summary: Get all Schools
      description: To get all Schools on the service provider.
      tags: &ref_3
        - Schools Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of schools successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  orgs:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type:
                            - object
                            - 'null'
                          additionalProperties: {}
                        name:
                          type: string
                        type:
                          type: string
                          enum: &ref_42
                            - department
                            - school
                            - district
                            - local
                            - state
                            - national
                        identifier:
                          type: string
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                          default: &ref_43 []
                      required:
                        - sourcedId
                        - status
                        - name
                        - type
                        - identifier
                        - children
                      description: Represents an organization.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - orgs
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createSchool
      summary: Create a new School
      description: >-
        To create a new School. The responding system must return the set of
        sourcedIds that have been allocated to the newly created school record.
      tags: *ref_3
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                org:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: &ref_4
                        - active
                        - tobedeleted
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    name:
                      type: string
                    type:
                      type: string
                      const: school
                    identifier:
                      type:
                        - string
                        - 'null'
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - name
                    - type
              required:
                - org
      responses:
        '201':
          description: School successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{sourcedId}:
    get:
      operationId: getSchool
      summary: Get a specific School
      description: >-
        Get a specific School on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'School not found.'
      tags: *ref_3
      parameters:
        - name: sourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: School successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  org:
                    $ref: '#/components/schemas/Org'
                required:
                  - org
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateSchool
      summary: Update a School
      description: >-
        To update an existing School. The sourcedId for the record to be updated
        is supplied by the requesting system.
      tags: *ref_3
      parameters:
        - name: sourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                org:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_4
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    name:
                      type: string
                    type:
                      type: string
                      const: school
                    identifier:
                      type:
                        - string
                        - 'null'
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - name
                    - type
              required:
                - org
      responses:
        '200':
          description: School successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Org'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteSchool
      summary: Delete a School
      description: >-
        Perform a soft delete on a specific School on the service provider. This
        operation changes the status of the School to 'tobedeleted'.
      tags: *ref_3
      parameters:
        - name: sourcedId
          description: The sourcedId of the school to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: School successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/results/:
    get:
      operationId: getAllResults
      summary: Get all Results
      description: Get all of the results on the service provider.
      tags: &ref_5
        - Results Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of results
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        lineItem:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        student:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        class:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreStatus:
                          type: string
                          enum: &ref_9
                            - exempt
                            - fully graded
                            - not submitted
                            - partially graded
                            - submitted
                        score:
                          type:
                            - number
                            - 'null'
                        textScore:
                          type:
                            - string
                            - 'null'
                        scoreDate:
                          type: string
                          format: date-time
                        comment:
                          type:
                            - string
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveResults:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    learningObjectiveId:
                                      type: string
                                    score:
                                      type: number
                                    textScore:
                                      type: string
                                  required:
                                    - learningObjectiveId
                            required:
                              - source
                              - learningObjectiveResults
                        inProgress:
                          type: string
                        incomplete:
                          type: string
                        late:
                          type: string
                        missing:
                          type: string
                      required:
                        - status
                        - lineItem
                        - student
                        - scoreStatus
                        - scoreDate
                      description: Represents a result.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - results
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createResult
      summary: Create a Result
      description: >-
        To create a new result. The request body must include a `result` object
        with the following required fields: `lineItem` (with sourcedId),
        `student` (with sourcedId), `scoreStatus`, and `scoreDate`. The
        responding system must return the set of sourcedIds that have been
        allocated to the newly created result records.
      tags: *ref_5
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                result:
                  $ref: '#/components/schemas/Result'
              required:
                - result
      responses:
        '201':
          description: Result successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/results/{sourcedId}:
    get:
      operationId: getResult
      summary: Get a Result
      description: >-
        Get a specific result on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Result not found.'
      tags: *ref_5
      parameters:
        - name: sourcedId
          description: The sourcedId of the result
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the result
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: '#/components/schemas/Result'
                required:
                  - result
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Result not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putResult
      summary: Update or Create a Result
      description: >-
        To update an existing result or create a new one if it doesn't exist.
        The sourcedId for the record is supplied by the requesting system.
      tags: *ref_5
      parameters:
        - name: sourcedId
          description: The sourcedId of the result
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                result:
                  $ref: '#/components/schemas/Result'
              required:
                - result
      responses:
        '201':
          description: Result successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: '#/components/schemas/Result'
                required:
                  - result
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteResult
      summary: Delete a Result
      description: >-
        Perform a soft delete on a specific Result on the service provider. This
        operation changes the status of the Result to 'tobedeleted'.
      tags: *ref_5
      parameters:
        - name: sourcedId
          description: The sourcedId of the result to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Result successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Result not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/lineItems/:
    get:
      operationId: getAllLineItems
      summary: Get all Line Items
      description: Get all of the Line Items on the service provider.
      tags: &ref_6
        - Line Items Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of line items
          content:
            application/json:
              schema:
                type: object
                properties:
                  lineItems:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: &ref_7
                            - active
                            - tobedeleted
                          default: active
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        description:
                          type:
                            - string
                            - 'null'
                        assignDate:
                          type: string
                          format: date-time
                        dueDate:
                          type: string
                          format: date-time
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        school:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        category:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        gradingPeriod:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        academicSession:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        resultValueMin:
                          type:
                            - number
                            - 'null'
                        resultValueMax:
                          type:
                            - number
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveIds:
                                type: array
                                items:
                                  type: string
                            required:
                              - source
                              - learningObjectiveIds
                      required:
                        - title
                        - assignDate
                        - dueDate
                        - class
                        - school
                        - category
                      description: Represents a line item.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - lineItems
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createLineItem
      summary: Create a Line Item
      description: >-
        To create a new Line Item. The responding system must return the set of
        sourcedIds that have been allocated to the newly created Line Item
        records.
      tags: *ref_6
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                lineItem:
                  $ref: '#/components/schemas/LineItem'
              required:
                - lineItem
      responses:
        '201':
          description: Line item successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/lineItems/{sourcedId}:
    get:
      operationId: getLineItem
      summary: Get a Line Item
      description: >-
        Get a specific Line Item on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Line item not found.'
      tags: *ref_6
      parameters:
        - name: sourcedId
          description: The sourcedId of the line item
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the line item
          content:
            application/json:
              schema:
                type: object
                properties:
                  lineItem:
                    $ref: '#/components/schemas/LineItem'
                required:
                  - lineItem
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putLineItem
      summary: Update or Create a Line Item
      description: >-
        To update an existing Line Item or create a new one if it doesn't exist.
        The sourcedId for the record is supplied by the requesting system.
      tags: *ref_6
      parameters:
        - name: sourcedId
          description: The sourcedId of the line item
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                lineItem:
                  $ref: '#/components/schemas/LineItem'
              required:
                - lineItem
      responses:
        '201':
          description: Line item successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  lineItem:
                    $ref: '#/components/schemas/LineItem'
                required:
                  - lineItem
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteLineItem
      summary: Delete a Line Item
      description: >-
        Perform a soft delete on a specific Line Item on the service provider.
        This operation changes the status of the Line Item to 'tobedeleted'.
      tags: *ref_6
      parameters:
        - name: sourcedId
          description: The sourcedId of the line item to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Line item successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/lineItems/{sourcedId}/results:
    post:
      operationId: createResultForLineItem
      summary: Create a Result for a Line Item
      description: >-
        To create a new result for a specific Line Item. The responding system
        must return the set of sourcedIds that have been allocated to the newly
        created result records. If the corresponding record cannot be located,
        the api will return a 404 error code and message 'Line item not found.'
      tags: *ref_6
      parameters:
        - name: sourcedId
          description: The sourcedId of the line item
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                results:
                  type: array
                  items:
                    $ref: '#/components/schemas/Result'
              required:
                - results
      responses:
        '201':
          description: Result successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/schools/{sourcedId}/lineItems:
    get:
      operationId: getLineItemsForSchool
      summary: Get Line Items for a School
      description: >-
        Get the set of lineItems on the service provider for a specific school.
        If the corresponding record cannot be located, the api will return a 404
        error code and message 'School not found.'
      tags:
        - Schools Management
        - Line Items Management
      parameters:
        - name: sourcedId
          description: The sourcedId of the school
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of line items
          content:
            application/json:
              schema:
                type: object
                properties:
                  lineItems:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_7
                          default: active
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        description:
                          type:
                            - string
                            - 'null'
                        assignDate:
                          type: string
                          format: date-time
                        dueDate:
                          type: string
                          format: date-time
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        school:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        category:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        gradingPeriod:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        academicSession:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        resultValueMin:
                          type:
                            - number
                            - 'null'
                        resultValueMax:
                          type:
                            - number
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveIds:
                                type: array
                                items:
                                  type: string
                            required:
                              - source
                              - learningObjectiveIds
                      required:
                        - title
                        - assignDate
                        - dueDate
                        - class
                        - school
                        - category
                      description: Represents a line item.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - lineItems
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createLineItemsForSchool
      summary: Create Line Items for a School
      description: >-
        To create a set of lineItems for a specific school. The responding
        system must return the set of sourcedIds that have been allocated to the
        newly created lineItem records. If the corresponding record cannot be
        located, the api will return a 404 error code and message 'School not
        found.'
      tags:
        - Schools Management
        - Line Items Management
      parameters:
        - name: sourcedId
          description: The sourcedId of the school
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                lineItems:
                  type: array
                  items:
                    $ref: '#/components/schemas/LineItem'
              required:
                - lineItems
      responses:
        '201':
          description: Line items successfully created for school
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{classSourcedId}/academicSessions/{academicSessionSourcedId}/results:
    post:
      operationId: postResultsForAcademicSessionForClass
      summary: Create Results for an Academic Session for a Class
      description: >-
        To create a set of results for a specific academic session and specific
        class. The responding system must return the set of sourcedIds that have
        been allocated to the newly created result records. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Class or academic session not found.'
      tags: &ref_8
        - Classes Management
      parameters:
        - name: classSourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - name: academicSessionSourcedId
          description: The sourcedId of the academic session
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                results:
                  type: array
                  items:
                    $ref: '#/components/schemas/Result'
              required:
                - results
      responses:
        '201':
          description: Results successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class or academic session not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{classSourcedId}/lineItems:
    post:
      operationId: postLineItemsForClass
      summary: Create Line Items for a Class
      description: >-
        To create a set of lineItems for a specific class. The responding system
        must return the set of sourcedIds that have been allocated to the newly
        created lineItem records. If the corresponding record cannot be located,
        the api will return a 404 error code and message 'Class not found.'
      tags: *ref_8
      parameters:
        - name: classSourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                lineItems:
                  type: array
                  items:
                    $ref: '#/components/schemas/LineItem'
              required:
                - lineItems
      responses:
        '201':
          description: Line item successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{classSourcedId}/lineItems/{lineItemSourcedId}/results:
    get:
      operationId: getResultsForLineItemForClass
      summary: Get Results for a Line Item for a Class
      description: >-
        Get the set of results on the service provider for a specific lineItem
        and for a specific class. If the corresponding record cannot be located,
        the api will return a 404 error code and message 'Class or line item not
        found.'
      tags: *ref_8
      parameters:
        - name: classSourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - name: lineItemSourcedId
          description: The sourcedId of the line item
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of results for the
            specified line item in the class
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        lineItem:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        student:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        class:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreStatus:
                          type: string
                          enum: *ref_9
                        score:
                          type:
                            - number
                            - 'null'
                        textScore:
                          type:
                            - string
                            - 'null'
                        scoreDate:
                          type: string
                          format: date-time
                        comment:
                          type:
                            - string
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveResults:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    learningObjectiveId:
                                      type: string
                                    score:
                                      type: number
                                    textScore:
                                      type: string
                                  required:
                                    - learningObjectiveId
                            required:
                              - source
                              - learningObjectiveResults
                        inProgress:
                          type: string
                        incomplete:
                          type: string
                        late:
                          type: string
                        missing:
                          type: string
                      required:
                        - status
                        - lineItem
                        - student
                        - scoreStatus
                        - scoreDate
                      description: Represents a result.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - results
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class or line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{classSourcedId}/students/{studentSourcedId}/results:
    get:
      operationId: getResultsForStudentForClass
      summary: Get Results for a Student for a Class
      description: >-
        Get the set of results on the service provider for a specific student
        and for a specific class. If the corresponding record cannot be located,
        the api will return a 404 error code and message 'Class or student not
        found.'
      tags: *ref_8
      parameters:
        - name: classSourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - name: studentSourcedId
          description: The sourcedId of the student
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of results for the
            specified student in the class
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        lineItem:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        student:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        class:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreStatus:
                          type: string
                          enum: *ref_9
                        score:
                          type:
                            - number
                            - 'null'
                        textScore:
                          type:
                            - string
                            - 'null'
                        scoreDate:
                          type: string
                          format: date-time
                        comment:
                          type:
                            - string
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveResults:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    learningObjectiveId:
                                      type: string
                                    score:
                                      type: number
                                    textScore:
                                      type: string
                                  required:
                                    - learningObjectiveId
                            required:
                              - source
                              - learningObjectiveResults
                        inProgress:
                          type: string
                        incomplete:
                          type: string
                        late:
                          type: string
                        missing:
                          type: string
                      required:
                        - status
                        - lineItem
                        - student
                        - scoreStatus
                        - scoreDate
                      description: Represents a result.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - results
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class or student not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{sourcedId}/categories:
    get:
      operationId: getCategoriesForClass
      summary: Get Categories for a Class
      description: >-
        Get the set of categories on the service provider for a specific class.
        If the corresponding record cannot be located, the api will return a 404
        error code and message 'Class not found.'
      tags: *ref_8
      parameters:
        - name: sourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of categories for the
            class
          content:
            application/json:
              schema:
                type: object
                properties:
                  categories:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        weight:
                          type:
                            - number
                            - 'null'
                      required:
                        - status
                        - title
                      description: Represents a category.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - categories
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{sourcedId}/lineItems:
    get:
      operationId: getLineItemsForClass
      summary: Get Line Items for a Class
      description: >-
        Get the set of lineItems on the service provider for a specific class.
        If the corresponding record cannot be located, the api will return a 404
        error code and message 'Class not found.'
      tags: *ref_8
      parameters:
        - name: sourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of line items for the
            class
          content:
            application/json:
              schema:
                type: object
                properties:
                  lineItems:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_7
                          default: active
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        description:
                          type:
                            - string
                            - 'null'
                        assignDate:
                          type: string
                          format: date-time
                        dueDate:
                          type: string
                          format: date-time
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        school:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        category:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        gradingPeriod:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        academicSession:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        resultValueMin:
                          type:
                            - number
                            - 'null'
                        resultValueMax:
                          type:
                            - number
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveIds:
                                type: array
                                items:
                                  type: string
                            required:
                              - source
                              - learningObjectiveIds
                      required:
                        - title
                        - assignDate
                        - dueDate
                        - class
                        - school
                        - category
                      description: Represents a line item.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - lineItems
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{sourcedId}/results:
    get:
      operationId: getResultsForClass
      summary: Get Results for a Class
      description: >-
        Get the set of results on the service provider for a specific class. If
        the corresponding record cannot be located, the api will return a 404
        error code and message 'Class not found.'
      tags: *ref_8
      parameters:
        - name: sourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of results for the class
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        lineItem:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        student:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        class:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreStatus:
                          type: string
                          enum: *ref_9
                        score:
                          type:
                            - number
                            - 'null'
                        textScore:
                          type:
                            - string
                            - 'null'
                        scoreDate:
                          type: string
                          format: date-time
                        comment:
                          type:
                            - string
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveResults:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    learningObjectiveId:
                                      type: string
                                    score:
                                      type: number
                                    textScore:
                                      type: string
                                  required:
                                    - learningObjectiveId
                            required:
                              - source
                              - learningObjectiveResults
                        inProgress:
                          type: string
                        incomplete:
                          type: string
                        late:
                          type: string
                        missing:
                          type: string
                      required:
                        - status
                        - lineItem
                        - student
                        - scoreStatus
                        - scoreDate
                      description: Represents a result.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - results
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/classes/{sourcedId}/scoreScales:
    get:
      operationId: getScoreScalesForClass
      summary: Get Score Scales for a Class
      description: >-
        Get the set of scoreScales on the service provider for a specific class.
        If the corresponding record cannot be located, the api will return a 404
        error code and message 'Class not found.'
      tags: *ref_8
      parameters:
        - name: sourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of score scales for the
            class
          content:
            application/json:
              schema:
                type: object
                properties:
                  scoreScales:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        type:
                          type: string
                        class:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scoreScaleValue:
                          type: array
                          items:
                            type: object
                            properties:
                              itemValueLHS:
                                type: string
                              itemValueRHS:
                                type: string
                              value:
                                type: string
                              description:
                                type: string
                            required:
                              - itemValueLHS
                              - itemValueRHS
                      required:
                        - status
                        - title
                        - type
                        - class
                        - scoreScaleValue
                      description: Represents a score scale.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - scoreScales
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/classes/:
    get:
      operationId: getAllClasses
      summary: Get all Classes
      description: To get all Classes on the service provider.
      tags: &ref_10
        - Classes Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response with a list of classes
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: &ref_11
                            - homeroom
                            - scheduled
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: &ref_12
                              - '-1'
                              - '0'
                              - '1'
                              - '2'
                              - '3'
                              - '4'
                              - '5'
                              - '6'
                              - '7'
                              - '8'
                              - '9'
                              - '10'
                              - '11'
                              - '12'
                              - '13'
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: &ref_13
                              - Reading
                              - Language
                              - Vocabulary
                              - Social Studies
                              - Writing
                              - Science
                              - FastMath
                              - Math
                              - None
                              - Other
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createClass
      summary: Create a new Class
      description: >-
        To create a new Class. The responding system must return the set of
        sourcedIds that have been allocated to the newly created class record.
      tags: *ref_10
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                class:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    title:
                      type: string
                    classCode:
                      type:
                        - string
                        - 'null'
                    classType:
                      type: string
                      enum: *ref_11
                    location:
                      type:
                        - string
                        - 'null'
                    grades:
                      type: array
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    subjects:
                      type: array
                      items:
                        type: string
                        description: The subjects of the course
                        enum: *ref_13
                    course:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    subjectCodes:
                      type: array
                      items:
                        type: string
                    periods:
                      type: array
                      items:
                        type: string
                    resources:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                    terms:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                  required:
                    - title
                    - course
                    - org
                    - terms
              required:
                - class
      responses:
        '201':
          description: Class successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/classes/{sourcedId}:
    get:
      operationId: getClass
      summary: Get a specific class
      description: >-
        Get a specific Class on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Class not found.'
      tags: *ref_10
      parameters:
        - name: sourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the requested class
          content:
            application/json:
              schema:
                type: object
                properties:
                  class:
                    $ref: '#/components/schemas/Class'
                required:
                  - class
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateClass
      summary: Update a Class
      description: >-
        To update an existing Class. The sourcedId for the record to be updated
        is supplied by the requesting system.
      tags: *ref_10
      parameters:
        - name: sourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                class:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    title:
                      type: string
                    classCode:
                      type:
                        - string
                        - 'null'
                    classType:
                      type: string
                      enum: *ref_11
                    location:
                      type:
                        - string
                        - 'null'
                    grades:
                      type: array
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    subjects:
                      type: array
                      items:
                        type: string
                        description: The subjects of the course
                        enum: *ref_13
                    subjectCodes:
                      type: array
                      items:
                        type: string
                    periods:
                      type: array
                      items:
                        type: string
                    resources:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                    terms:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
              required:
                - class
      responses:
        '200':
          description: Class successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Class'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteClass
      summary: Delete a Class
      description: >-
        Perform a soft delete on a specific Class on the service provider. This
        operation changes the status of the Class to 'tobedeleted'.
      tags: *ref_10
      parameters:
        - name: sourcedId
          description: The sourcedId of the class to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Class successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/classes:
    get:
      operationId: getClassesForSchool
      summary: Get all Classes for a School
      description: >-
        To get all Classes for a School on the service provider. If the
        specified school cannot be identified within the service provider, the
        api will return a 404 error code and message 'School not found.'
      tags:
        - Schools Management
        - Classes Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of classes successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/categories/:
    get:
      operationId: getAllCategories
      summary: Get all Categories
      description: Get all of the Line Item Categories on the service provider.
      tags: &ref_14
        - Categories Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of categories
          content:
            application/json:
              schema:
                type: object
                properties:
                  categories:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        weight:
                          type:
                            - number
                            - 'null'
                      required:
                        - status
                        - title
                      description: Represents a category.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - categories
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createCategory
      summary: Create a Category
      description: >-
        To create a new Category. The responding system must return the set of
        sourcedIds that have been allocated to the newly created category
        record. A 'title' MUST be provided when creating a category.
      tags: *ref_14
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                category:
                  $ref: '#/components/schemas/Category'
              required:
                - category
      responses:
        '201':
          description: Category successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/categories/{sourcedId}:
    get:
      operationId: getCategory
      summary: Get a Category
      description: >-
        Get a specific category on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Category not found.'
      tags: *ref_14
      parameters:
        - name: sourcedId
          description: The sourcedId of the category
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the category
          content:
            application/json:
              schema:
                type: object
                properties:
                  category:
                    $ref: '#/components/schemas/Category'
                required:
                  - category
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Category not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putCategory
      summary: Update or Create a Category
      description: >-
        To update an existing Category or create a new one if it doesn't exist.
        The sourcedId for the record is supplied by the requesting system.
      tags: *ref_14
      parameters:
        - name: sourcedId
          description: The sourcedId of the category
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                category:
                  $ref: '#/components/schemas/Category'
              required:
                - category
      responses:
        '201':
          description: Category successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  category:
                    $ref: '#/components/schemas/Category'
                required:
                  - category
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteCategory
      summary: Delete a Category
      description: >-
        Perform a soft delete on a specific Category on the service provider.
        This operation changes the status of the Category to 'tobedeleted'.
      tags: *ref_14
      parameters:
        - name: sourcedId
          description: The sourcedId of the category to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Category successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Category not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/assessmentResults/:
    get:
      operationId: getAllAssessmentResults
      summary: Get all Assessment Results
      description: Get all of the Assessment Results on the service provider.
      tags: &ref_15
        - Assessment Results Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of assessment results
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentResults:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        assessmentLineItem:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        student:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        score:
                          type:
                            - number
                            - 'null'
                        textScore:
                          type:
                            - string
                            - 'null'
                        scoreDate:
                          type: string
                          format: date-time
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        scorePercentile:
                          type:
                            - number
                            - 'null'
                        scoreStatus:
                          type: string
                          enum: *ref_9
                        comment:
                          type:
                            - string
                            - 'null'
                        learningObjectiveSet:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              source:
                                type: string
                              learningObjectiveResults:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    learningObjectiveId:
                                      type: string
                                    score:
                                      type: number
                                    textScore:
                                      type: string
                                  required:
                                    - learningObjectiveId
                            required:
                              - source
                              - learningObjectiveResults
                        inProgress:
                          type:
                            - string
                            - 'null'
                        incomplete:
                          type:
                            - string
                            - 'null'
                        late:
                          type:
                            - string
                            - 'null'
                        missing:
                          type:
                            - string
                            - 'null'
                      required:
                        - status
                        - assessmentLineItem
                        - student
                        - scoreDate
                        - scoreStatus
                      description: Represents an assessment result.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - assessmentResults
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createAssessmentResult
      summary: Create an Assessment Result
      description: >-
        To create an Assessment Result. The responding system must return the
        set of sourcedIds that have been allocated to the newly created
        assessmentResult record. An Assessment Line Item sourcedId and Student
        sourcedId MUST be provided when creating an assessmentResult.
      tags: *ref_15
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentResult:
                  $ref: '#/components/schemas/AssessmentResult'
              required:
                - assessmentResult
      responses:
        '201':
          description: Assessment result successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/assessmentResults/{sourcedId}:
    get:
      operationId: getAssessmentResult
      summary: Get an Assessment Result
      description: >-
        Get a specific Assessment Result on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Assessment result not found.'
      tags: *ref_15
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment result
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the assessment result
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentResult:
                    $ref: '#/components/schemas/AssessmentResult'
                required:
                  - assessmentResult
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment result not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putAssessmentResult
      summary: Update or Create an Assessment Result
      description: >-
        To update an existing Assessment Result or create a new one if it
        doesn't exist. The sourcedId for the record is supplied by the
        requesting system.
      tags: *ref_15
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment result
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentResult:
                  $ref: '#/components/schemas/AssessmentResult'
              required:
                - assessmentResult
      responses:
        '201':
          description: Assessment result successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentResult:
                    $ref: '#/components/schemas/AssessmentResult'
                required:
                  - assessmentResult
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    patch:
      operationId: patchAssessmentResult
      summary: Partially Update an Assessment Result
      description: >-
        To partially update an existing Assessment Result with metadata merging
        support.
      tags: *ref_15
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment result to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentResult:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                    metadata:
                      type: object
                      additionalProperties: {}
                    assessmentLineItem:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    student:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    score:
                      type:
                        - number
                        - 'null'
                    textScore:
                      type:
                        - string
                        - 'null'
                    scoreDate:
                      type: string
                      format: date-time
                    scoreScale:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    scorePercentile:
                      type:
                        - number
                        - 'null'
                    scoreStatus:
                      type: string
                      enum: *ref_9
                    comment:
                      type:
                        - string
                        - 'null'
                    learningObjectiveSet:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          source:
                            type: string
                          learningObjectiveResults:
                            type: array
                            items:
                              type: object
                              properties:
                                learningObjectiveId:
                                  type: string
                                score:
                                  type: number
                                textScore:
                                  type: string
                              required:
                                - learningObjectiveId
                        required:
                          - source
                          - learningObjectiveResults
                    inProgress:
                      type:
                        - string
                        - 'null'
                    incomplete:
                      type:
                        - string
                        - 'null'
                    late:
                      type:
                        - string
                        - 'null'
                    missing:
                      type:
                        - string
                        - 'null'
              required:
                - assessmentResult
      responses:
        '200':
          description: Successfully updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment result not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteAssessmentResult
      summary: Delete an Assessment Result
      description: >-
        Perform a soft delete on a specific Assessment Result on the service
        provider. This operation changes the status of the Assessment Result to
        'tobedeleted'.
      tags: *ref_15
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment result to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Assessment result successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment result not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/assessmentLineItems/:
    get:
      operationId: getAllAssessmentLineItems
      summary: Get all Assessment Line Items
      description: Get all of the Assessment Line Items on the service provider.
      tags: &ref_16
        - Assessment Line Items Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of assessment line items
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentLineItems:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        description:
                          type:
                            - string
                            - 'null'
                        class:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        parentAssessmentLineItem:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                          description: Represents a parent assessment line item.
                        scoreScale:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                          description: Represents a score scale.
                        resultValueMin:
                          type:
                            - number
                            - 'null'
                        resultValueMax:
                          type:
                            - number
                            - 'null'
                        component:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                          description: >-
                            PROPRIETARY EXTENSION: Reference to the Component
                            that this assessment line item is associated with.
                            Enables enhanced curriculum mapping.
                        componentResource:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                          description: >-
                            PROPRIETARY EXTENSION: Reference to the Component
                            Resource that this assessment line item is
                            associated with. Supports detailed
                            content-to-assessment relationships.
                        learningObjectiveSet:
                          $ref: '#/components/schemas/LearningObjectiveSet'
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                          description: >-
                            PROPRIETARY EXTENSION: Reference to the Course that
                            this assessment line item is associated with.
                      required:
                        - status
                        - title
                      description: Represents an assessment line item.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - assessmentLineItems
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createAssessmentLineItem
      summary: Create an Assessment Line Item
      description: >-
        To create an Assessment Line Item. The responding system must return the
        set of sourcedIds that have been allocated to the newly created
        assessmentLineItem record. A 'title' MUST be provided when creating an
        assessmentLineItem.
      tags: *ref_16
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentLineItem:
                  $ref: '#/components/schemas/AssessmentLineItem'
              required:
                - assessmentLineItem
      responses:
        '201':
          description: Assessment line item successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/gradebook/v1p2/assessmentLineItems/{sourcedId}:
    get:
      operationId: getAssessmentLineItem
      summary: Get an Assessment Line Item
      description: >-
        Get a specific Assessment Line Item on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Assessment line item not found.'
      tags: *ref_16
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment line item
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the assessment line item
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentLineItem:
                    $ref: '#/components/schemas/AssessmentLineItem'
                required:
                  - assessmentLineItem
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putAssessmentLineItem
      summary: Update or Create an Assessment Line Item
      description: >-
        To update an existing Assessment Line Item or create a new one if it
        doesn't exist. The sourcedId for the record is supplied by the
        requesting system.
      tags: *ref_16
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment line item
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentLineItem:
                  $ref: '#/components/schemas/AssessmentLineItem'
              required:
                - assessmentLineItem
      responses:
        '201':
          description: Assessment line item successfully created or updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  assessmentLineItem:
                    $ref: '#/components/schemas/AssessmentLineItem'
                required:
                  - assessmentLineItem
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    patch:
      operationId: patchAssessmentLineItem
      summary: Partially Update an Assessment Line Item
      description: >-
        To partially update an existing Assessment Line Item with metadata
        merging support.
      tags: *ref_16
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment line item to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                assessmentLineItem:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                    metadata:
                      type: object
                      additionalProperties: {}
                    title:
                      type: string
                    description:
                      type:
                        - string
                        - 'null'
                    class:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    parentAssessmentLineItem:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    scoreScale:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    resultValueMin:
                      type:
                        - number
                        - 'null'
                    resultValueMax:
                      type:
                        - number
                        - 'null'
                    component:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    componentResource:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    learningObjectiveSet:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          source:
                            type: string
                          learningObjectiveIds:
                            type: array
                            items:
                              type: string
                        required:
                          - source
                          - learningObjectiveIds
                    course:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
              required:
                - assessmentLineItem
      responses:
        '200':
          description: Successfully updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteAssessmentLineItem
      summary: Delete an Assessment Line Item
      description: >-
        Perform a soft delete on a specific Assessment Line Item on the service
        provider. This operation changes the status of the Assessment Line Item
        to 'tobedeleted'.
      tags: *ref_16
      parameters:
        - name: sourcedId
          description: The sourcedId of the assessment line item to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Assessment line item successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Assessment line item not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/:
    get:
      operationId: getAllResources
      summary: Get all Resources
      description: To get a collection of resources that exist on the service provider.
      tags: &ref_17
        - Resources Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of resources
          content:
            application/json:
              schema:
                type: object
                properties:
                  resources:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        roles:
                          type: array
                          items:
                            type: string
                            enum: &ref_18
                              - primary
                              - secondary
                        importance:
                          type: string
                          enum: &ref_19
                            - primary
                            - secondary
                        vendorResourceId:
                          type: string
                        vendorId:
                          type:
                            - string
                            - 'null'
                        applicationId:
                          type:
                            - string
                            - 'null'
                      required:
                        - sourcedId
                        - status
                        - title
                        - vendorResourceId
                      description: Represents a digital resource of some kind.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - resources
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createResource
      summary: Create a new Resource
      description: >-
        To create a new resource. The responding system must return the set of
        sourcedIds that have been allocated to the newly created resource
        record.
      tags: *ref_17
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                resource:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_7
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type:
                        - object
                        - 'null'
                      properties:
                        fail_fast:
                          $ref: '#/components/schemas/FastFailConfig'
                      additionalProperties: true
                      description: >-
                        Resource metadata as JSONB. Supports typed fields like
                        `fail_fast` plus additional arbitrary fields.
                    title:
                      type: string
                    roles:
                      type: array
                      items:
                        type: string
                        enum:
                          - primary
                          - secondary
                    importance:
                      type: string
                      enum:
                        - primary
                        - secondary
                    vendorResourceId:
                      type: string
                    vendorId:
                      type:
                        - string
                        - 'null'
                    applicationId:
                      type:
                        - string
                        - 'null'
                  required:
                    - title
                    - vendorResourceId
              required:
                - resource
      responses:
        '201':
          description: Resource successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/{sourcedId}:
    get:
      operationId: getResource
      summary: Get a specific Resource
      description: >-
        To get a specific resource by sourcedId. If the corresponding record
        cannot be located, the api will return a 404 error code and message
        'Resource not found.'
      tags: *ref_17
      parameters:
        - name: sourcedId
          description: The sourcedId of the resource
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the resource
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource:
                    $ref: '#/components/schemas/Resource'
                required:
                  - resource
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateResource
      summary: Update an existing Resource
      description: >-
        To update an existing resource. The sourcedId for the record to be
        updated is supplied by the requesting system.
      tags: *ref_17
      parameters:
        - name: sourcedId
          description: The sourcedId of the resource to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                resource:
                  type: object
                  properties:
                    metadata:
                      type:
                        - object
                        - 'null'
                      properties:
                        fail_fast:
                          $ref: '#/components/schemas/FastFailConfig'
                      additionalProperties: true
                      description: >-
                        Resource metadata as JSONB. Supports typed fields like
                        `fail_fast` plus additional arbitrary fields.
                    title:
                      type: string
                    roles:
                      type: array
                      items:
                        type: string
                        enum:
                          - primary
                          - secondary
                    importance:
                      type: string
                      enum:
                        - primary
                        - secondary
                    vendorResourceId:
                      type: string
                    vendorId:
                      type:
                        - string
                        - 'null'
                    applicationId:
                      type:
                        - string
                        - 'null'
              required:
                - resource
      responses:
        '200':
          description: Resource successfully updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteResource
      summary: Delete a resource
      description: >-
        Perform a soft delete on a specific resource. This operation changes the
        status of the resource to 'tobedeleted'.
      tags: *ref_17
      parameters:
        - name: sourcedId
          description: The sourcedId of the resource to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Resource successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/classes/{classSourcedId}/resources:
    get:
      operationId: getResourcesForClass
      summary: Get resources for a class
      description: >-
        To get the collection of resources available to a specific class. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Class not found.'
      tags: *ref_17
      parameters:
        - name: classSourcedId
          description: The sourcedId of the class
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of resources for the
            class
          content:
            application/json:
              schema:
                type: object
                properties:
                  resources:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        roles:
                          type: array
                          items:
                            type: string
                            enum: *ref_18
                        importance:
                          type: string
                          enum: *ref_19
                        vendorResourceId:
                          type: string
                        vendorId:
                          type:
                            - string
                            - 'null'
                        applicationId:
                          type:
                            - string
                            - 'null'
                      required:
                        - sourcedId
                        - status
                        - title
                        - vendorResourceId
                      description: Represents a digital resource of some kind.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - resources
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/courses/{courseSourcedId}/resources:
    get:
      operationId: getResourcesForCourse
      summary: Get resources for a course
      description: >-
        To get the collection of resources assigned to a specific course. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Course not found.'
      tags: *ref_17
      parameters:
        - name: courseSourcedId
          description: The sourcedId of the course
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of resources for the
            course
          content:
            application/json:
              schema:
                type: object
                properties:
                  resources:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        roles:
                          type: array
                          items:
                            type: string
                            enum: *ref_18
                        importance:
                          type: string
                          enum: *ref_19
                        vendorResourceId:
                          type: string
                        vendorId:
                          type:
                            - string
                            - 'null'
                        applicationId:
                          type:
                            - string
                            - 'null'
                      required:
                        - sourcedId
                        - status
                        - title
                        - vendorResourceId
                      description: Represents a digital resource of some kind.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - resources
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/export/{sourceId}:
    post:
      operationId: exportResourceToCommonCartridge
      summary: Export Resource to Common Cartridge
      description: >-
        Export a resource to Common Cartridge (.imscc) format for import into
        LMS systems.
      tags: *ref_17
      parameters:
        - name: sourceId
          description: The sourcedId of the resource to export
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Common Cartridge file successfully generated
          headers:
            Content-Disposition:
              description: Attachment filename
              schema:
                type: string
                example: attachment; filename="assessment.imscc"
          content:
            application/zip:
              schema:
                type: string
                format: binary
        '400':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/resources/v1p2/resources/users/{userSourcedId}/resources:
    get:
      operationId: getResourcesForUser
      summary: Get resources for a user
      description: >-
        To get the collection of resources available to a specific user. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'User not found.'
      tags: *ref_17
      parameters:
        - name: userSourcedId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of resources for the
            user
          content:
            application/json:
              schema:
                type: object
                properties:
                  resources:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        roles:
                          type: array
                          items:
                            type: string
                            enum: *ref_18
                        importance:
                          type: string
                          enum: *ref_19
                        vendorResourceId:
                          type: string
                        vendorId:
                          type:
                            - string
                            - 'null'
                        applicationId:
                          type:
                            - string
                            - 'null'
                      required:
                        - sourcedId
                        - status
                        - title
                        - vendorResourceId
                      description: Represents a digital resource of some kind.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - resources
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/:
    get:
      operationId: getAllUsers
      summary: Get all Users
      description: To get all Users on the service provider.
      tags: &ref_20
        - Users Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of users
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: &ref_30
                            - 'true'
                            - 'false'
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: &ref_21
                                  - primary
                                  - secondary
                              role:
                                type: string
                                enum: &ref_22
                                  - administrator
                                  - aide
                                  - guardian
                                  - parent
                                  - proctor
                                  - relative
                                  - student
                                  - teacher
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: &ref_31 []
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: &ref_27
                                  - academicSession
                                  - assessmentLineItem
                                  - category
                                  - class
                                  - course
                                  - demographics
                                  - enrollment
                                  - gradingPeriod
                                  - lineItem
                                  - org
                                  - resource
                                  - result
                                  - scoreScale
                                  - student
                                  - teacher
                                  - term
                                  - user
                                  - componentResource
                                  - courseComponent
                            required:
                              - href
                              - sourcedId
                              - type
                          default: &ref_32 []
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: &ref_33 []
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: &ref_34 []
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createUser
      summary: Create a new User
      description: >-
        To create a new User on the service provider. The responding system must
        return the set of sourcedIds that have been allocated to the newly
        created user record.
      tags: *ref_20
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    metadata:
                      type:
                        - object
                        - 'null'
                      properties:
                        onboarding:
                          type: object
                          additionalProperties:
                            oneOf:
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: not_started
                                required:
                                  - state
                                additionalProperties: false
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: in_progress
                                required:
                                  - state
                                additionalProperties: false
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: completed
                                  completedAt:
                                    type: string
                                  courseId:
                                    type:
                                      - string
                                      - 'null'
                                required:
                                  - state
                                additionalProperties: false
                        isTestUser:
                          type: boolean
                      additionalProperties: true
                    status:
                      type: string
                      enum: &ref_23
                        - active
                        - tobedeleted
                      default: active
                    userMasterIdentifier:
                      type:
                        - string
                        - 'null'
                    username:
                      type:
                        - string
                        - 'null'
                    userIds:
                      type: array
                      items:
                        type: object
                        properties:
                          type:
                            type: string
                          identifier:
                            type: string
                        required:
                          - type
                          - identifier
                    enabledUser:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: &ref_24
                            - 'true'
                            - 'false'
                    givenName:
                      type: string
                    familyName:
                      type: string
                    middleName:
                      type:
                        - string
                        - 'null'
                    roles:
                      type: array
                      items:
                        type: object
                        properties:
                          roleType:
                            type: string
                            enum: *ref_21
                          role:
                            type: string
                            enum: *ref_22
                          org:
                            type: object
                            properties:
                              sourcedId:
                                type: string
                            required:
                              - sourcedId
                          userProfile:
                            type: string
                          metadata:
                            type:
                              - object
                              - 'null'
                            properties:
                              timebackRole:
                                type: string
                                enum: &ref_25
                                  - head_of_school
                                  - dean_of_parents
                                  - campus_coordinator
                                  - head_guide
                                  - lead_guide
                                  - guide
                                  - guide_assistant
                                  - reading_specialist
                                  - parent
                                  - student
                              alphaLevelAccess:
                                type: array
                                items:
                                  type: string
                            additionalProperties: true
                          beginDate:
                            type:
                              - string
                              - 'null'
                          endDate:
                            type:
                              - string
                              - 'null'
                        required:
                          - roleType
                          - role
                          - org
                      minItems: 1
                    primaryOrg:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    email:
                      type: string
                      format: email
                      description: Must be unique across all users.
                    preferredFirstName:
                      type:
                        - string
                        - 'null'
                    preferredMiddleName:
                      type:
                        - string
                        - 'null'
                    preferredLastName:
                      type:
                        - string
                        - 'null'
                    pronouns:
                      type:
                        - string
                        - 'null'
                    grades:
                      type: array
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    password:
                      type:
                        - string
                        - 'null'
                    sms:
                      type:
                        - string
                        - 'null'
                    phone:
                      type:
                        - string
                        - 'null'
                    agents:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      default: &ref_26 []
                  required:
                    - enabledUser
                    - givenName
                    - familyName
                    - roles
                    - email
              required:
                - user
      responses:
        '201':
          description: User successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{sourcedId}:
    get:
      operationId: getUser
      summary: Get a specific User
      description: To get a specific User on the service provider.
      tags: *ref_20
      parameters:
        - name: sourcedId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the user
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
                required:
                  - user
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateUser
      summary: Update an existing User
      description: >-
        To update an existing User on the service provider. The sourcedId for
        the record to be updated is supplied by the requesting system.
      tags: *ref_20
      parameters:
        - name: sourcedId
          description: The sourcedId of the user to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    metadata:
                      type:
                        - object
                        - 'null'
                      properties:
                        onboarding:
                          type: object
                          additionalProperties:
                            oneOf:
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: not_started
                                required:
                                  - state
                                additionalProperties: false
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: in_progress
                                required:
                                  - state
                                additionalProperties: false
                              - type: object
                                properties:
                                  state:
                                    type: string
                                    const: completed
                                  completedAt:
                                    type: string
                                  courseId:
                                    type:
                                      - string
                                      - 'null'
                                required:
                                  - state
                                additionalProperties: false
                        isTestUser:
                          type: boolean
                      additionalProperties: true
                    status:
                      type: string
                      enum: *ref_23
                      default: active
                    userMasterIdentifier:
                      type:
                        - string
                        - 'null'
                    username:
                      type:
                        - string
                        - 'null'
                    userIds:
                      type: array
                      items:
                        type: object
                        properties:
                          type:
                            type: string
                          identifier:
                            type: string
                        required:
                          - type
                          - identifier
                    enabledUser:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: *ref_24
                    givenName:
                      type: string
                    familyName:
                      type: string
                    middleName:
                      type:
                        - string
                        - 'null'
                    roles:
                      type: array
                      items:
                        type: object
                        properties:
                          roleType:
                            type: string
                            enum: *ref_21
                          role:
                            type: string
                            enum: *ref_22
                          org:
                            type: object
                            properties:
                              sourcedId:
                                type: string
                            required:
                              - sourcedId
                          userProfile:
                            type: string
                          metadata:
                            type:
                              - object
                              - 'null'
                            properties:
                              timebackRole:
                                type: string
                                enum: *ref_25
                              alphaLevelAccess:
                                type: array
                                items:
                                  type: string
                            additionalProperties: true
                          beginDate:
                            type:
                              - string
                              - 'null'
                          endDate:
                            type:
                              - string
                              - 'null'
                        required:
                          - roleType
                          - role
                          - org
                      minItems: 1
                    primaryOrg:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    email:
                      type: string
                      format: email
                      description: Must be unique across all users.
                    preferredFirstName:
                      type:
                        - string
                        - 'null'
                    preferredMiddleName:
                      type:
                        - string
                        - 'null'
                    preferredLastName:
                      type:
                        - string
                        - 'null'
                    pronouns:
                      type:
                        - string
                        - 'null'
                    grades:
                      type: array
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    password:
                      type:
                        - string
                        - 'null'
                    sms:
                      type:
                        - string
                        - 'null'
                    phone:
                      type:
                        - string
                        - 'null'
                    agents:
                      type: array
                      items:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      default: *ref_26
                  required:
                    - enabledUser
                    - givenName
                    - familyName
                    - roles
                    - email
              required:
                - user
      responses:
        '200':
          description: User successfully updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
                required:
                  - user
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteUser
      summary: Delete a User
      description: >-
        Perform a soft delete on a specific User on the service provider. This
        operation changes the status of the User to 'tobedeleted'.
      tags: *ref_20
      parameters:
        - name: sourcedId
          description: The sourcedId of the user to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: User successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{sourcedId}/demographics:
    get:
      operationId: getUserWithDemographics
      summary: Get a specific User with demographics
      description: >-
        To get a specific User with demographics on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'User not found.'
      tags: *ref_20
      parameters:
        - name: sourcedId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the user with demographics
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
                required:
                  - user
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userId}/agentFor:
    get:
      operationId: getAgentFor
      summary: Get users this user is an agent for
      description: >-
        Get users this user is an agent for (eg. parents getting the children
        list)
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved users this user is an agent for
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                required:
                  - users
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userId}/agents:
    get:
      operationId: getAgents
      summary: Get agents for a user
      description: Get agents for a user
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved agents for user
          content:
            application/json:
              schema:
                type: object
                properties:
                  agents:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                required:
                  - agents
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: addAgent
      summary: Add an agent for a user
      description: Add an agent for a user
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                agentSourcedId:
                  type: string
              required:
                - agentSourcedId
      responses:
        '200':
          description: Successfully added agent for user
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userId}/agents/{agentSourcedId}:
    delete:
      operationId: deleteAgent
      summary: Delete an agent for a user
      description: Delete an agent for a user
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - name: agentSourcedId
          description: The sourcedId of the agent to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully deleted agent for user
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userId}/credentials:
    post:
      operationId: registerStudentCredentials
      summary: Register student credentials for third-party applications
      description: Register student credentials for third-party applications
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                applicationName:
                  type: string
                  minLength: 1
                credentials:
                  type: object
                  properties:
                    username:
                      type: string
                    password:
                      type: string
                  required:
                    - username
                    - password
              required:
                - applicationName
                - credentials
      responses:
        '200':
          description: Student credentials updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  userProfileId:
                    type: string
                  credentialId:
                    type: string
                  message:
                    type: string
                required:
                  - userProfileId
                  - credentialId
                  - message
        '201':
          description: Student credentials created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  userProfileId:
                    type: string
                  credentialId:
                    type: string
                  message:
                    type: string
                required:
                  - userProfileId
                  - credentialId
                  - message
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userId}/credentials/{credentialId}/decrypt:
    post:
      operationId: decryptCredential
      summary: Decrypt a user credential
      description: Decrypt and return the password for a specific user credential.
      tags: *ref_20
      parameters:
        - name: userId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - name: credentialId
          description: The sourcedId of the credential to decrypt
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully decrypted credential
          content:
            application/json:
              schema:
                type: object
                properties:
                  password:
                    type: string
                required:
                  - password
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Credential not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/users/{userSourcedId}/classes:
    get:
      operationId: getClassesForUser
      summary: Get Classes for a User
      description: To get the set of Classes a User is enrolled in.
      tags:
        - Users Management
        - Classes Management
      parameters:
        - name: userSourcedId
          description: The sourcedId of the user
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of classes for the user
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/terms:
    get:
      operationId: getTermsForSchool
      summary: Get all Terms for a School
      description: >-
        To get all Terms for a School on the service provider. If the specified
        school cannot be identified within the service provider, the api will
        return a 404 error code and message 'School not found.'
      tags:
        - Schools Management
        - Terms Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of terms successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  terms:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        startDate:
                          type: string
                        endDate:
                          type: string
                        type:
                          type: string
                          enum: &ref_28
                            - gradingPeriod
                            - semester
                            - schoolYear
                            - term
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        schoolYear:
                          type: number
                        org:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - startDate
                        - endDate
                        - type
                        - schoolYear
                        - org
                      description: Represents an academic session.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - terms
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/terms/:
    get:
      operationId: getAllTerms
      summary: Get all Terms
      description: To get all Terms on the service provider.
      tags: &ref_29
        - Terms Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of terms
          content:
            application/json:
              schema:
                type: object
                properties:
                  terms:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        startDate:
                          type: string
                        endDate:
                          type: string
                        type:
                          type: string
                          enum: *ref_28
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        schoolYear:
                          type: number
                        org:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - startDate
                        - endDate
                        - type
                        - schoolYear
                        - org
                      description: Represents an academic session.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - terms
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/terms/{sourcedId}:
    get:
      operationId: getTerm
      summary: Get a specific Term
      description: To get a specific Term on the service provider.
      tags: *ref_29
      parameters:
        - name: sourcedId
          description: The sourcedId of the term
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the term
          content:
            application/json:
              schema:
                type: object
                properties:
                  term:
                    $ref: '#/components/schemas/AcademicSession'
                required:
                  - term
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/terms/{termSourcedId}/classes:
    get:
      operationId: getClassesForTerm
      summary: Get Classes for a Term
      description: >-
        To get the set of Classes related to a specific Term. If the specified
        term cannot be identified within the service provider, the api will
        return a 404 error code and message 'Term not found.'
      tags:
        - Terms Management
        - Classes Management
      parameters:
        - name: termSourcedId
          description: The sourcedId of the term
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of classes for the term
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/teachers:
    get:
      operationId: getTeachersForClass
      summary: Get teachers for a Class
      description: >-
        To get all teachers assigned to a specific Class. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Class not found.'
      tags: &ref_35
        - Classes Management
        - Teachers Management
      parameters:
        - name: classSourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response with the list of teachers
          content:
            application/json:
              schema:
                type: object
                properties:
                  teachers:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - teachers
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: addTeacherToClass
      summary: Add a teacher to a Class
      description: >-
        Enrolls a teacher to a specific Class. The responding system must return
        the set of sourcedIds that have been allocated to the newly created
        enrollment record.
      tags: *ref_35
      parameters:
        - name: classSourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enrollment:
                  type: object
                  properties:
                    user:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    primary:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: &ref_39
                            - 'true'
                            - 'false'
                      default: 'false'
                    beginDate:
                      type: string
                      example: '2024-01-01'
                    endDate:
                      type: string
                      example: '2024-01-01'
                  required:
                    - user
              required:
                - enrollment
      responses:
        '201':
          description: Teacher successfully assigned to class
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class or teacher not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/classes/{classSourcedId}/teachers:
    get:
      operationId: getTeachersForClassInSchool
      summary: Get Teachers for a specific Class in a School
      description: >-
        To get all Teachers for a Class in a School on the service provider. If
        the specified school and/or class cannot be identified within the
        service provider, the api will return a 404 error code and message
        'School or class not found.'
      tags: &ref_36
        - Schools Management
        - Teachers Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - name: classSourcedId
          description: Class sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of teachers successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School or class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/teachers:
    get:
      operationId: getTeachersForSchool
      summary: Get all teachers for a school
      description: >-
        To get all Teachers for a School on the service provider. If the
        specified school cannot be identified within the service provider, the
        api will return a 404 error code and message 'School not found.'
      tags: *ref_36
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of teachers successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/teachers/:
    get:
      operationId: getAllTeachers
      summary: Get all Teachers
      description: To get all Teachers on the service provider.
      tags: &ref_37
        - Teachers Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of teachers
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/teachers/{sourcedId}:
    get:
      operationId: getTeacher
      summary: Get a specific Teacher
      description: >-
        To get a specific Teacher on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Teacher not found.'
      tags: *ref_37
      parameters:
        - name: sourcedId
          description: The sourcedId of the teacher
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the teacher
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
                required:
                  - user
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Teacher not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/teachers/{teacherSourcedId}/classes:
    get:
      operationId: getClassesForTeacher
      summary: Get Classes for a Teacher
      description: >-
        To get the set of Classes a Teacher is enrolled in. If the specified
        teacher cannot be identified within the service provider, the api will
        return a 404 error code and message 'Teacher not found.'
      tags:
        - Teachers Management
        - Classes Management
      parameters:
        - name: teacherSourcedId
          description: The sourcedId of the teacher
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of classes for the
            teacher
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Teacher not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/students:
    get:
      operationId: getStudentsForClass
      summary: Get students for a Class
      description: >-
        To get all students enrolled in a specific Class. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Class not found.'
      tags: &ref_38
        - Classes Management
        - Students Management
      parameters:
        - name: classSourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response with the list of students
          content:
            application/json:
              schema:
                type: object
                properties:
                  students:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - students
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: addStudentToClass
      summary: Add a student to a Class
      description: >-
        Enrolls a student in a specific Class. The responding system must return
        the set of sourcedIds that have been allocated to the newly created
        enrollment record.
      tags: *ref_38
      parameters:
        - name: classSourcedId
          description: Class sourcedId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enrollment:
                  type: object
                  properties:
                    user:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    primary:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: *ref_39
                      default: 'false'
                    beginDate:
                      type: string
                      example: '2024-01-01'
                    endDate:
                      type: string
                      example: '2024-01-01'
                  required:
                    - user
              required:
                - enrollment
      responses:
        '201':
          description: Student successfully enrolled in class
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Class or student not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/classes/{classSourcedId}/students:
    get:
      operationId: getStudentsForClassInSchool
      summary: Get Students for a specific Class in a School
      description: >-
        To get all Students for a Class in a School on the service provider. If
        the specified school and/or class cannot be identified within the
        service provider, the api will return a 404 error code and message
        'School or class not found.'
      tags: &ref_40
        - Schools Management
        - Students Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - name: classSourcedId
          description: Class sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of students successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School or class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/students:
    get:
      operationId: getStudentsForSchool
      summary: Get all Students for a School
      description: To get all Students for a School on the service provider.
      tags: *ref_40
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of students successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/students/:
    get:
      operationId: getAllStudents
      summary: Get all Students
      description: To get all Students on the service provider.
      tags: &ref_41
        - Students Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response containing a collection of students
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        userMasterIdentifier:
                          type:
                            - string
                            - 'null'
                        username:
                          type:
                            - string
                            - 'null'
                        userIds:
                          type: array
                          items:
                            type: object
                            properties:
                              type:
                                type: string
                              identifier:
                                type: string
                            required:
                              - type
                              - identifier
                        enabledUser:
                          type: string
                          enum: *ref_30
                        givenName:
                          type: string
                        familyName:
                          type: string
                        middleName:
                          type:
                            - string
                            - 'null'
                        roles:
                          type: array
                          items:
                            type: object
                            properties:
                              roleType:
                                type: string
                                enum: *ref_21
                              role:
                                type: string
                                enum: *ref_22
                              org:
                                type: object
                                properties:
                                  href:
                                    type: string
                                    format: uri
                                  sourcedId:
                                    type: string
                                  type:
                                    type: string
                                required:
                                  - href
                                  - sourcedId
                                  - type
                              userProfile:
                                type: string
                              metadata:
                                type:
                                  - object
                                  - 'null'
                                additionalProperties: {}
                              beginDate:
                                type:
                                  - string
                                  - 'null'
                              endDate:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - roleType
                              - role
                              - org
                          default: *ref_31
                        agents:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_32
                        userProfiles:
                          type: array
                          items:
                            type: object
                            properties:
                              profileId:
                                type: string
                              profileType:
                                type: string
                              vendorId:
                                type: string
                              applicationId:
                                type: string
                              description:
                                type:
                                  - string
                                  - 'null'
                              app:
                                type: object
                                properties:
                                  sourcedId:
                                    type: string
                                  name:
                                    type: string
                                  description:
                                    type:
                                      - string
                                      - 'null'
                                  domain:
                                    type: array
                                    items:
                                      type: string
                                  metadata:
                                    type:
                                      - object
                                      - 'null'
                                    additionalProperties: {}
                                required:
                                  - sourcedId
                                  - name
                                  - domain
                              credentials:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                    username:
                                      type: string
                                    password:
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - id
                                    - type
                                    - username
                                default: *ref_33
                            required:
                              - profileId
                              - profileType
                              - vendorId
                              - applicationId
                              - app
                              - credentials
                          default: *ref_34
                        primaryOrg:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type:
                                - string
                                - 'null'
                          required:
                            - href
                            - sourcedId
                            - type
                        identifier:
                          type:
                            - string
                            - 'null'
                        email:
                          type: string
                          format: email
                          description: Must be unique across all users.
                        preferredFirstName:
                          type:
                            - string
                            - 'null'
                        preferredMiddleName:
                          type:
                            - string
                            - 'null'
                        preferredLastName:
                          type:
                            - string
                            - 'null'
                        pronouns:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        password:
                          type:
                            - string
                            - 'null'
                        sms:
                          type:
                            - string
                            - 'null'
                        phone:
                          type:
                            - string
                            - 'null'
                        demographics:
                          oneOf:
                            - $ref: '#/components/schemas/Demographics'
                            - type: 'null'
                      required:
                        - sourcedId
                        - status
                        - enabledUser
                        - givenName
                        - familyName
                        - roles
                        - agents
                        - userProfiles
                        - email
                      description: >-
                        Represents a user of the system. Can be a student,
                        teacher, guide, parent etc.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - users
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/students/{sourcedId}:
    get:
      operationId: getStudent
      summary: Get a specific Student
      description: >-
        To get a specific Student on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Student not found.'
      tags: *ref_41
      parameters:
        - name: sourcedId
          description: The sourcedId of the student
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response with the student
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
                required:
                  - user
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Student not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/students/{studentSourcedId}/classes:
    get:
      operationId: getClassesForStudent
      summary: Get Classes for a Student
      description: >-
        To get the set of Classes related to a specific Student. If the
        specified student cannot be identified within the service provider, the
        api will return a 404 error code and message 'Student not found.'
      tags:
        - Students Management
        - Classes Management
      parameters:
        - name: studentSourcedId
          description: The sourcedId of the student
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of classes for the
            student
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Student not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/orgs/:
    get:
      operationId: getAllOrgs
      summary: Get all Organizations
      description: To get all Organizations on the service provider.
      tags: &ref_44
        - Organizations Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of organizations retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  orgs:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type:
                            - object
                            - 'null'
                          additionalProperties: {}
                        name:
                          type: string
                        type:
                          type: string
                          enum: *ref_42
                        identifier:
                          type: string
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                          default: *ref_43
                      required:
                        - sourcedId
                        - status
                        - name
                        - type
                        - identifier
                        - children
                      description: Represents an organization.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - orgs
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createOrg
      summary: Create an Organization
      description: >-
        To create a new Organization. The responding system must return the set
        of sourcedIds that have been allocated to the newly created org record.
      tags: *ref_44
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                org:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_4
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    name:
                      type: string
                    type:
                      type: string
                      enum: *ref_42
                    identifier:
                      type:
                        - string
                        - 'null'
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - name
                    - type
              required:
                - org
      responses:
        '201':
          description: Organization created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/orgs/{sourcedId}:
    get:
      operationId: getOrg
      summary: Get a specific Organization
      description: >-
        Get a specific Organization on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Organization not found.'
      tags: *ref_44
      parameters:
        - name: sourcedId
          description: The sourcedId of the organization to retrieve
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Organization retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  org:
                    $ref: '#/components/schemas/Org'
                required:
                  - org
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateOrg
      summary: Update an Organization
      description: >-
        To update an existing Organization. The sourcedId for the record to be
        updated is supplied by the requesting system.
      tags: *ref_44
      parameters:
        - name: sourcedId
          description: The sourcedId of the organization to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                org:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_4
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    name:
                      type: string
                    type:
                      type: string
                      enum: *ref_42
                    identifier:
                      type:
                        - string
                        - 'null'
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - name
                    - type
              required:
                - org
      responses:
        '201':
          description: Organization updated successfully
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Invalid organization data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteOrg
      summary: Delete an Organization
      description: >-
        Perform a soft delete on a specific Organization on the service
        provider. This operation changes the status of the Organization to
        'tobedeleted'.
      tags: *ref_44
      parameters:
        - name: sourcedId
          description: The sourcedId of the organization to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Organization successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/gradingPeriods/:
    get:
      operationId: getAllGradingPeriods
      summary: Get all Grading Periods
      description: To get all Grading Periods on the service provider.
      tags: &ref_45
        - Grading Periods Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  gradingPeriods:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        startDate:
                          type: string
                        endDate:
                          type: string
                        type:
                          type: string
                          enum: *ref_28
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        schoolYear:
                          type: number
                        org:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - startDate
                        - endDate
                        - type
                        - schoolYear
                        - org
                      description: Represents an academic session.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - gradingPeriods
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createGradingPeriod
      summary: Create a new Grading Period
      description: >-
        To create a new Grading Period. The responding system must return the
        set of sourcedIds that have been allocated to the newly created
        gradingPeriod record.
      tags: *ref_45
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                academicSession:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    startDate:
                      type: string
                    endDate:
                      type: string
                    type:
                      type: string
                      const: gradingPeriod
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    children:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - sourcedId
                    - status
                    - title
                    - startDate
                    - endDate
                    - type
                    - schoolYear
                    - org
              required:
                - academicSession
      responses:
        '201':
          description: Grading period created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/gradingPeriods/{sourcedId}:
    get:
      operationId: getGradingPeriod
      summary: Get a specific Grading Period
      description: >-
        Get a specific Grading Period on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Grading period not found.'
      tags: *ref_45
      parameters:
        - name: sourcedId
          description: The sourcedId of the grading period to retrieve
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  gradingPeriod:
                    $ref: '#/components/schemas/AcademicSession'
                required:
                  - gradingPeriod
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Grading period not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateGradingPeriod
      summary: Update a Grading Period
      description: >-
        To update an existing Grading Period. The sourcedId for the record to be
        updated is supplied by the requesting system.
      tags: *ref_45
      parameters:
        - name: sourcedId
          description: The sourcedId of the grading period to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                academicSession:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    startDate:
                      type: string
                    endDate:
                      type: string
                    type:
                      type: string
                      const: gradingPeriod
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    children:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - sourcedId
                    - status
                    - title
                    - startDate
                    - endDate
                    - type
                    - schoolYear
                    - org
              required:
                - academicSession
      responses:
        '201':
          description: Grading period updated successfully
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Grading period not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteGradingPeriod
      summary: Delete a Grading Period
      description: >-
        Perform a soft delete on a specific Grading Period on the service
        provider. This operation changes the status of the Grading Period to
        'tobedeleted'.
      tags: *ref_45
      parameters:
        - name: sourcedId
          description: The sourcedId of the grading period to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Grading period successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Grading period not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/terms/{termSourcedId}/gradingPeriods:
    get:
      operationId: getGradingPeriodsForTerm
      summary: Get Grading Periods for a Term
      description: >-
        To get the set of Grading Periods related to a specific Term. If the
        specified Term cannot be identified within the service provider, the api
        will return a 404 error code and message 'Term not found.'
      tags: &ref_46
        - Terms Management
        - Grading Periods Management
      parameters:
        - name: termSourcedId
          description: The sourcedId of the term
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: >-
            Successful response containing a collection of grading periods for
            the term
          content:
            application/json:
              schema:
                type: object
                properties:
                  gradingPeriods:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        startDate:
                          type: string
                        endDate:
                          type: string
                        type:
                          type: string
                          enum: *ref_28
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        schoolYear:
                          type: number
                        org:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - startDate
                        - endDate
                        - type
                        - schoolYear
                        - org
                      description: Represents an academic session.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - gradingPeriods
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createGradingPeriodForTerm
      summary: Create a new Grading Period for a Term
      description: >-
        To create a new Grading Period for a Term. A Grading Period is a type of
        Academic Session. The responding system must return the set of
        sourcedIds that have been allocated to the newly created academicSession
        record.
      tags: *ref_46
      parameters:
        - name: termSourcedId
          description: The sourcedId of the term
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                academicSession:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    startDate:
                      type: string
                    endDate:
                      type: string
                    type:
                      type: string
                      const: gradingPeriod
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    children:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                    tenantId:
                      type:
                        - string
                        - 'null'
                    clientAppId:
                      type:
                        - string
                        - 'null'
                  required:
                    - sourcedId
                    - status
                    - title
                    - startDate
                    - endDate
                    - type
                    - schoolYear
                    - org
                    - tenantId
                    - clientAppId
              required:
                - academicSession
      responses:
        '201':
          description: Grading period successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  academicSession:
                    $ref: '#/components/schemas/AcademicSession'
                required:
                  - academicSession
        '400':
          description: Invalid request format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Term not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/enrollments/:
    get:
      operationId: getAllEnrollments
      summary: Get all Enrollments
      description: To get all Enrollments on the service provider.
      tags: &ref_47
        - Enrollments Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  enrollments:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        role:
                          type: string
                          enum: &ref_48
                            - administrator
                            - proctor
                            - student
                            - teacher
                        primary:
                          type:
                            - string
                            - 'null'
                          enum:
                            - 'true'
                            - 'false'
                            - null
                          default: 'false'
                        beginDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        endDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        user:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        class:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        course:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                      required:
                        - sourcedId
                        - status
                        - role
                        - primary
                        - beginDate
                        - endDate
                        - user
                        - class
                        - school
                        - course
                      description: Represents an enrollment.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - enrollments
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createEnrollment
      summary: Create a new Enrollment
      description: >-
        To create a new Enrollment. The responding system must return the set of
        sourcedIds that have been allocated to the newly created enrollment
        record.
      tags: *ref_47
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enrollment:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                      default: active
                    metadata:
                      type: object
                      properties:
                        goals:
                          type: object
                          properties:
                            dailyXp:
                              type: number
                            dailyLessons:
                              type: number
                            dailyActiveMinutes:
                              type: number
                            dailyAccuracy:
                              type: number
                            dailyMasteredUnits:
                              type: number
                          additionalProperties: false
                        metrics:
                          type: object
                          properties:
                            totalXp:
                              type: number
                            totalLessons:
                              type: number
                            totalGrades:
                              type: number
                              description: >-
                                Total number of grade levels covered by this
                                course
                            courseType:
                              type: string
                              description: >-
                                The type of course (e.g. 'optional',
                                'hole-filling', 'base')
                            isSupplemental:
                              type: boolean
                              description: >-
                                Indicates whether the course is supplemental
                                content
                          additionalProperties: false
                      additionalProperties: true
                    role:
                      type: string
                      enum: *ref_48
                    primary:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: *ref_39
                      default: 'false'
                    beginDate:
                      type: string
                      example: '2024-01-01'
                    endDate:
                      type: string
                      example: '2024-01-01'
                    user:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    class:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    school:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - role
                    - user
                    - class
              required:
                - enrollment
      responses:
        '201':
          description: Successfully created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/enrollments/{sourcedId}:
    get:
      operationId: getEnrollment
      summary: Get a specific Enrollment
      description: >-
        Get a specific Enrollment on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Enrollment not found.'
      tags: *ref_47
      parameters:
        - name: sourcedId
          description: The unique identifier for the enrollment
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  enrollment:
                    $ref: '#/components/schemas/Enrollment'
                required:
                  - enrollment
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Enrollment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: updateEnrollment
      summary: Update an Enrollment
      description: >-
        To update an existing Enrollment. The sourcedId for the record to be
        updated is supplied by the requesting system.
      tags: *ref_47
      parameters:
        - name: sourcedId
          description: The unique identifier for the enrollment to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enrollment:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                    metadata:
                      type: object
                      properties:
                        goals:
                          type: object
                          properties:
                            dailyXp:
                              type: number
                            dailyLessons:
                              type: number
                            dailyActiveMinutes:
                              type: number
                            dailyAccuracy:
                              type: number
                            dailyMasteredUnits:
                              type: number
                          additionalProperties: false
                        metrics:
                          type: object
                          properties:
                            totalXp:
                              type: number
                            totalLessons:
                              type: number
                            totalGrades:
                              type: number
                              description: >-
                                Total number of grade levels covered by this
                                course
                            courseType:
                              type: string
                              description: >-
                                The type of course (e.g. 'optional',
                                'hole-filling', 'base')
                            isSupplemental:
                              type: boolean
                              description: >-
                                Indicates whether the course is supplemental
                                content
                          additionalProperties: false
                      additionalProperties: true
                    role:
                      type: string
                      enum: *ref_48
                    primary:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: *ref_39
                      default: 'false'
                    beginDate:
                      type: string
                      example: '2024-01-01'
                    endDate:
                      type: string
                      example: '2024-01-01'
                    user:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    class:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    school:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                  required:
                    - role
                    - user
                    - class
              required:
                - enrollment
      responses:
        '201':
          description: Successfully updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Enrollment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    patch:
      operationId: partiallyUpdateEnrollment
      summary: Partially Update an Enrollment
      description: >-
        To partially update an existing Enrollment with metadata merging
        support. The sourcedId for the record to be updated is supplied by the
        requesting system. Metadata will be merged with existing values.
      tags: *ref_47
      parameters:
        - name: sourcedId
          description: The unique identifier for the enrollment to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enrollment:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - active
                        - tobedeleted
                    metadata:
                      type: object
                      properties:
                        goals:
                          type: object
                          properties:
                            dailyXp:
                              type: number
                            dailyLessons:
                              type: number
                            dailyActiveMinutes:
                              type: number
                            dailyAccuracy:
                              type: number
                            dailyMasteredUnits:
                              type: number
                          additionalProperties: false
                        metrics:
                          type: object
                          properties:
                            totalXp:
                              type: number
                            totalLessons:
                              type: number
                            totalGrades:
                              type: number
                              description: >-
                                Total number of grade levels covered by this
                                course
                            courseType:
                              type: string
                              description: >-
                                The type of course (e.g. 'optional',
                                'hole-filling', 'base')
                            isSupplemental:
                              type: boolean
                              description: >-
                                Indicates whether the course is supplemental
                                content
                          additionalProperties: false
                      additionalProperties: true
                    role:
                      type: string
                      enum: *ref_48
                    primary:
                      anyOf:
                        - type: boolean
                        - type: string
                          enum: *ref_39
                      default: 'false'
                    beginDate:
                      type: string
                      example: '2024-01-01'
                    endDate:
                      type: string
                      example: '2024-01-01'
                    user:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    class:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    school:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
              required:
                - enrollment
      responses:
        '200':
          description: Successfully updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Enrollment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteEnrollment
      summary: Delete an Enrollment
      description: >-
        Perform a soft delete on a specific Enrollment on the service provider.
        This operation changes the status of the Enrollment to 'tobedeleted'.
      tags: *ref_47
      parameters:
        - name: sourcedId
          description: The unique identifier for the enrollment
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Enrollment successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Enrollment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/classes/{classSourcedId}/enrollments:
    get:
      operationId: getEnrollmentsForClassInSchool
      summary: Get Enrollments for a specific Class in a School
      description: >-
        To get all Enrollments for a Class in a School on the service provider.
        If the specified school and/or class cannot be identified within the
        service provider, the api will return a 404 error code and message
        'School or class not found.'
      tags: &ref_49
        - Schools Management
        - Enrollments Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - name: classSourcedId
          description: Class sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of enrollments successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  enrollments:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        role:
                          type: string
                          enum: *ref_48
                        primary:
                          type:
                            - string
                            - 'null'
                          enum:
                            - 'true'
                            - 'false'
                            - null
                          default: 'false'
                        beginDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        endDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        user:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        class:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        course:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                      required:
                        - sourcedId
                        - status
                        - role
                        - primary
                        - beginDate
                        - endDate
                        - user
                        - class
                        - school
                        - course
                      description: Represents an enrollment.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - enrollments
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School or class not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/enrollments:
    get:
      operationId: getEnrollmentsForSchool
      summary: Get all Enrollments for a School
      description: >-
        To get all Enrollments for a School on the service provider. If the
        specified school cannot be identified within the service provider, the
        api will return a 404 error code and message 'School not found.'
      tags: *ref_49
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of enrollments successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  enrollments:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        role:
                          type: string
                          enum: *ref_48
                        primary:
                          type:
                            - string
                            - 'null'
                          enum:
                            - 'true'
                            - 'false'
                            - null
                          default: 'false'
                        beginDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        endDate:
                          type:
                            - string
                            - 'null'
                          example: '2024-01-01'
                        user:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        class:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        course:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                            name:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                      required:
                        - sourcedId
                        - status
                        - role
                        - primary
                        - beginDate
                        - endDate
                        - user
                        - class
                        - school
                        - course
                      description: Represents an enrollment.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - enrollments
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/demographics/:
    get:
      operationId: getAllDemographics
      summary: Get all Demographic records
      description: To get all Demographic records on the service provider.
      tags: &ref_50
        - Demographics Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Demographics collection retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  demographics:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        birthDate:
                          type:
                            - string
                            - 'null'
                          pattern: ^\d{4}-\d{2}-\d{2}$
                        sex:
                          type:
                            - string
                            - 'null'
                          enum:
                            - male
                            - female
                            - other
                            - unspecified
                            - null
                        americanIndianOrAlaskaNative:
                          type:
                            - string
                            - 'null'
                        asian:
                          type:
                            - string
                            - 'null'
                        blackOrAfricanAmerican:
                          type:
                            - string
                            - 'null'
                        nativeHawaiianOrOtherPacificIslander:
                          type:
                            - string
                            - 'null'
                        white:
                          type:
                            - string
                            - 'null'
                        demographicRaceTwoOrMoreRaces:
                          type:
                            - string
                            - 'null'
                        hispanicOrLatinoEthnicity:
                          type:
                            - string
                            - 'null'
                        countryOfBirthCode:
                          type:
                            - string
                            - 'null'
                        stateOfBirthAbbreviation:
                          type:
                            - string
                            - 'null'
                        cityOfBirth:
                          type:
                            - string
                            - 'null'
                        publicSchoolResidenceStatus:
                          type:
                            - string
                            - 'null'
                      required:
                        - sourcedId
                        - status
                        - birthDate
                        - sex
                        - americanIndianOrAlaskaNative
                        - asian
                        - blackOrAfricanAmerican
                        - nativeHawaiianOrOtherPacificIslander
                        - white
                        - demographicRaceTwoOrMoreRaces
                        - hispanicOrLatinoEthnicity
                        - countryOfBirthCode
                        - stateOfBirthAbbreviation
                        - cityOfBirth
                        - publicSchoolResidenceStatus
                      description: Represents a student's demographics information.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - demographics
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: postDemographics
      summary: Create a new Demographic record
      description: >-
        To create a new Demographic record. The responding system must return
        the set of sourcedIds that have been allocated to the newly created
        demographic record.
      tags: *ref_50
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                demographics:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: &ref_51
                        - active
                        - tobedeleted
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    birthDate:
                      type:
                        - string
                        - 'null'
                      pattern: ^\d{4}-\d{2}-\d{2}$
                    sex:
                      type:
                        - string
                        - 'null'
                      enum:
                        - male
                        - female
                        - null
                    americanIndianOrAlaskaNative:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    asian:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    blackOrAfricanAmerican:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    nativeHawaiianOrOtherPacificIslander:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    white:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    demographicRaceTwoOrMoreRaces:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    hispanicOrLatinoEthnicity:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    countryOfBirthCode:
                      type:
                        - string
                        - 'null'
                    stateOfBirthAbbreviation:
                      type:
                        - string
                        - 'null'
                    cityOfBirth:
                      type:
                        - string
                        - 'null'
                    publicSchoolResidenceStatus:
                      type:
                        - string
                        - 'null'
                  required:
                    - sourcedId
              required:
                - demographics
      responses:
        '201':
          description: Demographics record created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/demographics/{sourcedId}:
    get:
      operationId: getDemographics
      summary: Get a specific Demographic record
      description: >-
        Get a specific Demographic record on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Demographics record not found.'
      tags: *ref_50
      parameters:
        - name: sourcedId
          description: The unique identifier for the demographics record
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Demographics record retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  demographics:
                    $ref: '#/components/schemas/Demographics'
                required:
                  - demographics
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Demographics record not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putDemographics
      summary: Update a Demographic record
      description: >-
        To update an existing Demographic record. The sourcedId for the record
        to be updated is supplied by the requesting system.
      tags: *ref_50
      parameters:
        - name: sourcedId
          description: The unique identifier for the demographics record to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                demographics:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_51
                      default: active
                    metadata:
                      type:
                        - object
                        - 'null'
                      additionalProperties: {}
                    birthDate:
                      type:
                        - string
                        - 'null'
                      pattern: ^\d{4}-\d{2}-\d{2}$
                    sex:
                      type:
                        - string
                        - 'null'
                      enum:
                        - male
                        - female
                        - null
                    americanIndianOrAlaskaNative:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    asian:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    blackOrAfricanAmerican:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    nativeHawaiianOrOtherPacificIslander:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    white:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    demographicRaceTwoOrMoreRaces:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    hispanicOrLatinoEthnicity:
                      type:
                        - string
                        - 'null'
                      enum:
                        - 'true'
                        - 'false'
                        - null
                    countryOfBirthCode:
                      type:
                        - string
                        - 'null'
                    stateOfBirthAbbreviation:
                      type:
                        - string
                        - 'null'
                    cityOfBirth:
                      type:
                        - string
                        - 'null'
                    publicSchoolResidenceStatus:
                      type:
                        - string
                        - 'null'
                  required:
                    - sourcedId
              required:
                - demographics
      responses:
        '200':
          description: Demographics record updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Demographics'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Demographics record not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteDemographics
      summary: Delete a Demographic record
      description: >-
        Perform a soft delete on a specific Demographic record on the service
        provider. This operation changes the status of the Demographic record to
        'tobedeleted'.
      tags: *ref_50
      parameters:
        - name: sourcedId
          description: The sourcedId of the demographics record to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Demographics record successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Demographics record not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/:
    get:
      operationId: getAllCourses
      summary: Get All Courses
      description: To get all Courses on the service provider.
      tags: &ref_52
        - Courses Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of Courses
          content:
            application/json:
              schema:
                type: object
                properties:
                  courses:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        academicSession:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        schoolYear:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        courseCode:
                          type:
                            - string
                            - 'null'
                        grades:
                          type:
                            - array
                            - 'null'
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type:
                            - array
                            - 'null'
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        subjectCodes:
                          type:
                            - array
                            - 'null'
                          items:
                            type: string
                        org:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        level:
                          type:
                            - string
                            - 'null'
                        gradingScheme:
                          type:
                            - string
                            - 'null'
                        resources:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - status
                        - title
                        - org
                      description: Represents a course.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - courses
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: createCourse
      summary: Create a Course
      description: >-
        To create a new Course. The responding system must return the set of
        sourcedIds that have been allocated to the newly created course record.
      tags: *ref_52
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                course:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    academicSession:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type:
                        - object
                        - 'null'
                      properties:
                        href:
                          type: string
                          format: uri
                        sourcedId:
                          type: string
                        type:
                          type: string
                          enum: *ref_27
                      required:
                        - href
                        - sourcedId
                        - type
                    courseCode:
                      type:
                        - string
                        - 'null'
                    grades:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    subjects:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The subjects of the course
                        enum: *ref_13
                    subjectCodes:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    level:
                      type:
                        - string
                        - 'null'
                    gradingScheme:
                      type:
                        - string
                        - 'null'
                    resources:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - status
                    - title
                    - org
                  description: Represents a course.
              required:
                - course
      responses:
        '201':
          description: Created Course Successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/{courseSourcedId}/classes:
    get:
      operationId: getClassesForCourse
      summary: Get Classes for a Course
      description: >-
        To get all Classes associated with a specific Course. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Course not found.'
      tags: *ref_52
      parameters:
        - name: courseSourcedId
          description: The sourcedId of the course
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of Classes for Course
          content:
            application/json:
              schema:
                type: object
                properties:
                  classes:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        classCode:
                          type:
                            - string
                            - 'null'
                        classType:
                          type: string
                          enum: *ref_11
                        location:
                          type:
                            - string
                            - 'null'
                        grades:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type: array
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        course:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        school:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                          required:
                            - href
                            - sourcedId
                            - type
                        terms:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                        subjectCodes:
                          type: array
                          items:
                            type: string
                        periods:
                          type: array
                          items:
                            type: string
                        resources:
                          type: array
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - classCode
                        - classType
                        - location
                        - course
                        - school
                        - terms
                      description: Represents a class.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - classes
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/{sourcedId}:
    get:
      operationId: getCourse
      summary: Get a specific Course
      description: >-
        Get a specific Course on the service provider. If the corresponding
        record cannot be located, the api will return a 404 error code and
        message 'Course not found.'
      tags: *ref_52
      parameters:
        - name: sourcedId
          description: The sourcedId of the course
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Single Course
          content:
            application/json:
              schema:
                type: object
                properties:
                  course:
                    type: object
                    properties:
                      sourcedId:
                        type: string
                        minLength: 1
                      status:
                        type: string
                        enum: *ref_2
                      dateLastModified:
                        type: string
                        format: date-time
                      metadata:
                        type: object
                        additionalProperties: true
                        nullable: true
                        description: Additional metadata for the object
                      title:
                        type: string
                      academicSession:
                        type:
                          - object
                          - 'null'
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      schoolYear:
                        type:
                          - object
                          - 'null'
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                      courseCode:
                        type:
                          - string
                          - 'null'
                      grades:
                        type:
                          - array
                          - 'null'
                        items:
                          allOf:
                            - $ref: '#/components/schemas/GradeEnum'
                          description: The grades of the course
                          enum: *ref_12
                      subjects:
                        type:
                          - array
                          - 'null'
                        items:
                          allOf:
                            - $ref: '#/components/schemas/SubjectEnum'
                          description: The subjects of the course
                          enum: *ref_13
                      subjectCodes:
                        type:
                          - array
                          - 'null'
                        items:
                          type: string
                      org:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      level:
                        type:
                          - string
                          - 'null'
                      gradingScheme:
                        type:
                          - string
                          - 'null'
                      resources:
                        type:
                          - array
                          - 'null'
                        items:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                    required:
                      - status
                      - title
                      - org
                    description: Represents a course.
                required:
                  - course
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putCourse
      summary: Update a Course
      description: >-
        To update an existing Course. The sourcedId for the record to be updated
        is supplied by the requesting system.
      tags: *ref_52
      parameters:
        - name: sourcedId
          description: The sourcedId of the course to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                course:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    academicSession:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type:
                        - object
                        - 'null'
                      properties:
                        href:
                          type: string
                          format: uri
                        sourcedId:
                          type: string
                        type:
                          type: string
                          enum: *ref_27
                      required:
                        - href
                        - sourcedId
                        - type
                    courseCode:
                      type:
                        - string
                        - 'null'
                    grades:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    subjects:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The subjects of the course
                        enum: *ref_13
                    subjectCodes:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    level:
                      type:
                        - string
                        - 'null'
                    gradingScheme:
                      type:
                        - string
                        - 'null'
                    resources:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - status
                    - title
                    - org
                  description: Represents a course.
              required:
                - course
      responses:
        '200':
          description: Course Updated Successfully
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteCourse
      summary: Delete a Course
      description: >-
        Perform a soft delete on a specific Course on the service provider. This
        operation changes the status of the Course to 'tobedeleted'.
      tags: *ref_52
      parameters:
        - name: sourcedId
          description: The sourcedId of the course to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Course successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/component-resources:
    post:
      operationId: createComponentResource
      summary: Create Component Resource
      description: >-
        To create a new Component Resource. The responding system must return
        the set of sourcedIds that have been allocated to the newly created
        componentResource record.
      tags: &ref_53
        - Courses Management
        - Course Component Resources Management
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                componentResource:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    courseComponent:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    resource:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    title:
                      type: string
                    sortOrder:
                      type: number
                      default: 0
                    lessonType:
                      type:
                        - string
                        - 'null'
                      enum:
                        - powerpath-100
                        - quiz
                        - test-out
                        - placement
                        - unit-test
                        - alpha-read-article
                        - null
                  required:
                    - sourcedId
                    - status
                    - courseComponent
                    - resource
                    - title
                  description: Represents a resource associated with a course component.
              required:
                - componentResource
      responses:
        '201':
          description: Created Component Resource Successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    get:
      operationId: getAllComponentResources
      summary: Get all Component Resources
      description: To get all Component Resources on the service provider.
      tags: *ref_53
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of Component Resources
          content:
            application/json:
              schema:
                type: object
                properties:
                  componentResources:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        courseComponent:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        resource:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        title:
                          type: string
                        sortOrder:
                          type: number
                          default: 0
                        lessonType:
                          type:
                            - string
                            - 'null'
                          enum:
                            - powerpath-100
                            - quiz
                            - test-out
                            - placement
                            - unit-test
                            - alpha-read-article
                            - null
                      required:
                        - sourcedId
                        - status
                        - courseComponent
                        - resource
                        - title
                        - sortOrder
                      description: >-
                        Represents a resource associated with a course
                        component.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - componentResources
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/component-resources/{sourcedId}:
    get:
      operationId: getComponentResource
      summary: Get a specific Component Resource
      description: >-
        Get a specific Component Resource on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Component Resource not found.'
      tags: *ref_53
      parameters:
        - name: sourcedId
          description: The sourcedId of the component resource
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Single Component Resource
          content:
            application/json:
              schema:
                type: object
                properties:
                  componentResource:
                    type: object
                    properties:
                      sourcedId:
                        type: string
                      status:
                        type: string
                        enum: *ref_2
                      dateLastModified:
                        type: string
                        format: date-time
                      metadata:
                        type: object
                        additionalProperties: true
                        nullable: true
                        description: Additional metadata for the object
                      courseComponent:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      resource:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      title:
                        type: string
                      sortOrder:
                        type: number
                        default: 0
                      lessonType:
                        type:
                          - string
                          - 'null'
                        enum:
                          - powerpath-100
                          - quiz
                          - test-out
                          - placement
                          - unit-test
                          - alpha-read-article
                          - null
                    required:
                      - sourcedId
                      - status
                      - courseComponent
                      - resource
                      - title
                      - sortOrder
                    description: Represents a resource associated with a course component.
                required:
                  - componentResource
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Component Resource Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putComponentResource
      summary: Update a Component Resource
      description: >-
        To update an existing Component Resource. The sourcedId for the record
        to be updated is supplied by the requesting system.
      tags: *ref_53
      parameters:
        - name: sourcedId
          description: The sourcedId of the component resource to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                componentResource:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    courseComponent:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    resource:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    title:
                      type: string
                    sortOrder:
                      type: number
                      default: 0
                    lessonType:
                      type:
                        - string
                        - 'null'
                      enum:
                        - powerpath-100
                        - quiz
                        - test-out
                        - placement
                        - unit-test
                        - alpha-read-article
                        - null
                  required:
                    - sourcedId
                    - status
                    - courseComponent
                    - resource
                    - title
                  description: Represents a resource associated with a course component.
              required:
                - componentResource
      responses:
        '200':
          description: Component Resource Updated Successfully
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Component Resource Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteComponentResource
      summary: Delete a Component Resource
      description: >-
        Perform a soft delete on a specific Component Resource on the service
        provider. This operation changes the status of the Component Resource to
        'tobedeleted'.
      tags: *ref_53
      parameters:
        - name: sourcedId
          description: The sourcedId of the component resource to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Component resource successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Component Resource Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/components:
    post:
      operationId: createCourseComponent
      summary: Create Course Component
      description: Used when creating a new course component or module
      tags: &ref_54
        - Courses Management
        - Course Components Management
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                courseComponent:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    course:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    courseComponent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    title:
                      type: string
                    sortOrder:
                      type: number
                      example: 1
                    prerequisites:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    prerequisiteCriteria:
                      type:
                        - string
                        - 'null'
                    unlockDate:
                      type: string
                      description: The date the component is unlocked for the student
                      example: '2021-01-01T00:00:00.000Z'
                  required:
                    - status
                    - course
                    - title
                  description: Represents a component of a course.
              required:
                - courseComponent
      responses:
        '201':
          description: Created Course Component Successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    get:
      operationId: getAllCourseComponents
      summary: Get all Course Components
      description: To get all Course Components on the service provider.
      tags: *ref_54
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of Course Components
          content:
            application/json:
              schema:
                type: object
                properties:
                  courseComponents:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        course:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        courseComponent:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        title:
                          type: string
                        sortOrder:
                          type: number
                          example: 1
                        prerequisites:
                          type:
                            - array
                            - 'null'
                          items:
                            type: string
                        prerequisiteCriteria:
                          type:
                            - string
                            - 'null'
                        unlockDate:
                          type: string
                          description: The date the component is unlocked for the student
                          example: '2021-01-01T00:00:00.000Z'
                      required:
                        - status
                        - course
                        - title
                        - sortOrder
                        - unlockDate
                      description: Represents a component of a course.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - courseComponents
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/components/{sourcedId}:
    get:
      operationId: getCourseComponent
      summary: Get a specific Course Component
      description: >-
        Get a specific Course Component on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Course Component not found.'
      tags: *ref_54
      parameters:
        - name: sourcedId
          description: The sourcedId of the course component
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Single Course Component
          content:
            application/json:
              schema:
                type: object
                properties:
                  courseComponent:
                    type: object
                    properties:
                      sourcedId:
                        type: string
                        minLength: 1
                      status:
                        type: string
                        enum: *ref_2
                      dateLastModified:
                        type: string
                        format: date-time
                      metadata:
                        type: object
                        additionalProperties: true
                        nullable: true
                        description: Additional metadata for the object
                      course:
                        type: object
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      courseComponent:
                        type:
                          - object
                          - 'null'
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      parent:
                        type:
                          - object
                          - 'null'
                        properties:
                          sourcedId:
                            type: string
                        required:
                          - sourcedId
                      title:
                        type: string
                      sortOrder:
                        type: number
                        example: 1
                      prerequisites:
                        type:
                          - array
                          - 'null'
                        items:
                          type: string
                      prerequisiteCriteria:
                        type:
                          - string
                          - 'null'
                      unlockDate:
                        type: string
                        description: The date the component is unlocked for the student
                        example: '2021-01-01T00:00:00.000Z'
                    required:
                      - status
                      - course
                      - title
                      - sortOrder
                      - unlockDate
                    description: Represents a component of a course.
                required:
                  - courseComponent
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Component Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putCourseComponent
      summary: Update a Course Component
      description: >-
        To update an existing Course Component. The sourcedId for the record to
        be updated is supplied by the requesting system.
      tags: *ref_54
      parameters:
        - name: sourcedId
          description: The sourcedId of the course component to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                courseComponent:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    course:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    courseComponent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    title:
                      type: string
                    sortOrder:
                      type: number
                      example: 1
                    prerequisites:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    prerequisiteCriteria:
                      type:
                        - string
                        - 'null'
                    unlockDate:
                      type: string
                      description: The date the component is unlocked for the student
                      example: '2021-01-01T00:00:00.000Z'
                  required:
                    - status
                    - course
                    - title
                  description: Represents a component of a course.
              required:
                - courseComponent
      responses:
        '200':
          description: Course Component Updated Successfully
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Component Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteCourseComponent
      summary: Delete a Course Component
      description: >-
        Perform a soft delete on a specific Course Component on the service
        provider. This operation changes the status of the Course Component to
        'tobedeleted'.
      tags: *ref_54
      parameters:
        - name: sourcedId
          description: The sourcedId of the course component to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Course component successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Course Component Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/courses/structure:
    post:
      operationId: createCourseStructure
      summary: Create Course Structure from QTI Tests
      description: Create a course structure from QTI tests
      tags: *ref_52
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                courseStructure:
                  type: object
                  additionalProperties:
                    type: object
                    properties:
                      url:
                        type: string
                      skillCode:
                        type: string
                      lessonCode:
                        type: string
                      title:
                        type: string
                      unit-title:
                        type: string
                      status:
                        type: string
                      xp:
                        type: number
                      stimulus:
                        type: object
                        properties:
                          title:
                            type: string
                          identifier:
                            type: string
                        required:
                          - title
                          - identifier
                      video:
                        type: object
                        properties:
                          url:
                            type: string
                          title:
                            type: string
                        required:
                          - url
                          - title
                    required:
                      - url
                      - skillCode
                      - lessonCode
                      - title
                      - unit-title
                      - status
                      - xp
                course:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                      minLength: 1
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    academicSession:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type:
                        - object
                        - 'null'
                      properties:
                        href:
                          type: string
                          format: uri
                        sourcedId:
                          type: string
                        type:
                          type: string
                          enum: *ref_27
                      required:
                        - href
                        - sourcedId
                        - type
                    courseCode:
                      type:
                        - string
                        - 'null'
                    grades:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The grades of the course
                        enum: *ref_12
                    subjects:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                        description: The subjects of the course
                        enum: *ref_13
                    subjectCodes:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    level:
                      type:
                        - string
                        - 'null'
                    gradingScheme:
                      type:
                        - string
                        - 'null'
                    resources:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - status
                    - title
                    - org
                  description: Represents a course.
              required:
                - courseStructure
                - course
      responses:
        '201':
          description: Created Course Structure Successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/schools/{schoolSourcedId}/courses:
    get:
      operationId: getCoursesForSchool
      summary: Get all Courses for a School
      description: >-
        To get all Courses for a School on the service provider. If the
        specified school cannot be identified within the service provider, the
        api will return a 404 error code and message 'School not found.'
      tags:
        - Schools Management
        - Courses Management
      parameters:
        - name: schoolSourcedId
          description: School sourced ID
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Collection of courses successfully retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  courses:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                          minLength: 1
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        academicSession:
                          type:
                            - object
                            - 'null'
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        schoolYear:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        courseCode:
                          type:
                            - string
                            - 'null'
                        grades:
                          type:
                            - array
                            - 'null'
                          items:
                            allOf:
                              - $ref: '#/components/schemas/GradeEnum'
                            description: The grades of the course
                            enum: *ref_12
                        subjects:
                          type:
                            - array
                            - 'null'
                          items:
                            allOf:
                              - $ref: '#/components/schemas/SubjectEnum'
                            description: The subjects of the course
                            enum: *ref_13
                        subjectCodes:
                          type:
                            - array
                            - 'null'
                          items:
                            type: string
                        org:
                          type: object
                          properties:
                            sourcedId:
                              type: string
                          required:
                            - sourcedId
                        level:
                          type:
                            - string
                            - 'null'
                        gradingScheme:
                          type:
                            - string
                            - 'null'
                        resources:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - status
                        - title
                        - org
                      description: Represents a course.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - courses
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: School not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/academicSessions/:
    get:
      operationId: getAllAcademicSessions
      summary: Get all Academic Sessions
      description: To get all Academic Sessions on the service provider.
      tags: &ref_55
        - Academic Sessions Management
      parameters:
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
        - in: query
          name: limit
          description: >-
            The maximum number of items to return in the paginated response.
            While the OneRoster specification does not define a maximum limit,
            this implementation enforces a maximum of 3000 to prevent abuse and
            ensure optimal performance.
          schema:
            type: integer
            minimum: 1
            maximum: 3000
            default: 100
            description: >-
              The maximum number of items to return in the paginated response.
              While the OneRoster specification does not define a maximum limit,
              this implementation enforces a maximum of 3000 to prevent abuse
              and ensure optimal performance.
            example: 100
        - in: query
          name: offset
          description: The number of items to skip in the paginated response
          schema:
            type: integer
            minimum: 0
            default: 0
            description: The number of items to skip in the paginated response
            example: 0
        - in: query
          name: sort
          description: The field to sort the response by
          schema:
            type: string
            description: The field to sort the response by
        - in: query
          name: orderBy
          description: The order to sort the response by
          schema:
            type: string
            enum: *ref_1
            description: The order to sort the response by
        - in: query
          name: filter
          description: The filter to apply to the response
          schema:
            type: string
            description: The filter to apply to the response
            example: status='active'
        - in: query
          name: search
          description: >-
            PROPRIETARY EXTENSION: Free-text search across multiple fields.
            Provides convenient text-based querying beyond the standard
            OneRoster filter parameter.
          schema:
            type: string
            description: >-
              PROPRIETARY EXTENSION: Free-text search across multiple fields.
              Provides convenient text-based querying beyond the standard
              OneRoster filter parameter.
            example: john
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  academicSessions:
                    type: array
                    items:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                        status:
                          type: string
                          enum: *ref_2
                        dateLastModified:
                          type: string
                          format: date-time
                        metadata:
                          type: object
                          additionalProperties: true
                          nullable: true
                          description: Additional metadata for the object
                        title:
                          type: string
                        startDate:
                          type: string
                        endDate:
                          type: string
                        type:
                          type: string
                          enum: *ref_28
                        parent:
                          type:
                            - object
                            - 'null'
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        schoolYear:
                          type: number
                        org:
                          type: object
                          properties:
                            href:
                              type: string
                              format: uri
                            sourcedId:
                              type: string
                            type:
                              type: string
                              enum: *ref_27
                          required:
                            - href
                            - sourcedId
                            - type
                        children:
                          type:
                            - array
                            - 'null'
                          items:
                            type: object
                            properties:
                              href:
                                type: string
                                format: uri
                              sourcedId:
                                type: string
                              type:
                                type: string
                                enum: *ref_27
                            required:
                              - href
                              - sourcedId
                              - type
                      required:
                        - sourcedId
                        - status
                        - title
                        - startDate
                        - endDate
                        - type
                        - schoolYear
                        - org
                      description: Represents an academic session.
                  totalCount:
                    type: number
                  pageCount:
                    type: number
                  pageNumber:
                    type: number
                  offset:
                    type: number
                  limit:
                    type: number
                required:
                  - academicSessions
                  - totalCount
                  - pageCount
                  - pageNumber
                  - offset
                  - limit
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    post:
      operationId: postAcademicSession
      summary: Create an Academic Session
      description: >-
        To create a new academic session. The responding system must return the
        set of sourcedIds that have been allocated to the newly created
        academicSession record.
      tags: *ref_55
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                academicSession:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    startDate:
                      type: string
                    endDate:
                      type: string
                    type:
                      type: string
                      enum: *ref_28
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    children:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - sourcedId
                    - status
                    - title
                    - startDate
                    - endDate
                    - type
                    - schoolYear
                    - org
              required:
                - academicSession
      responses:
        '201':
          description: Academic session created
          content:
            application/json:
              schema:
                type: object
                properties:
                  sourcedIdPairs:
                    type: object
                    properties:
                      suppliedSourcedId:
                        type: string
                      allocatedSourcedId:
                        type: string
                    required:
                      - suppliedSourcedId
                      - allocatedSourcedId
                required:
                  - sourcedIdPairs
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
  /ims/oneroster/rostering/v1p2/academicSessions/{sourcedId}:
    get:
      operationId: getAcademicSession
      summary: Get a specific Academic Session
      description: >-
        Get a specific Academic Session on the service provider. If the
        corresponding record cannot be located, the api will return a 404 error
        code and message 'Academic session not found.'
      tags: *ref_55
      parameters:
        - name: sourcedId
          description: The sourcedId of the academic session
          in: path
          required: true
          schema:
            type: string
        - in: query
          name: fields
          description: Comma-separated list of fields to include in the response
          schema:
            type: string
            description: Comma-separated list of fields to include in the response
            example: sourcedId,name
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  academicSession:
                    $ref: '#/components/schemas/AcademicSession'
                required:
                  - academicSession
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Academic session not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    put:
      operationId: putAcademicSession
      summary: Update an Academic Session
      description: >-
        To update an existing Academic Session. The sourcedId for the record to
        be updated is supplied by the requesting system.
      tags: *ref_55
      parameters:
        - name: sourcedId
          description: The sourcedId of the academic session to update
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                academicSession:
                  type: object
                  properties:
                    sourcedId:
                      type: string
                    status:
                      type: string
                      enum: *ref_2
                    dateLastModified:
                      type: string
                      format: date-time
                    metadata:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: Additional metadata for the object
                    title:
                      type: string
                    startDate:
                      type: string
                    endDate:
                      type: string
                    type:
                      type: string
                      enum: *ref_28
                    parent:
                      type:
                        - object
                        - 'null'
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    schoolYear:
                      type: string
                    org:
                      type: object
                      properties:
                        sourcedId:
                          type: string
                      required:
                        - sourcedId
                    children:
                      type:
                        - array
                        - 'null'
                      items:
                        type: object
                        properties:
                          href:
                            type: string
                            format: uri
                          sourcedId:
                            type: string
                          type:
                            type: string
                            enum: *ref_27
                        required:
                          - href
                          - sourcedId
                          - type
                  required:
                    - sourcedId
                    - status
                    - title
                    - startDate
                    - endDate
                    - type
                    - schoolYear
                    - org
              required:
                - academicSession
      responses:
        '200':
          description: Academic session updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcademicSession'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Academic session not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
    delete:
      operationId: deleteAcademicSession
      summary: Delete an Academic Session
      description: >-
        Perform a soft delete on a specific Academic Session on the service
        provider. This operation changes the status of the Academic Session to
        'tobedeleted'.
      tags: *ref_55
      parameters:
        - name: sourcedId
          description: The sourcedId of the academic session to delete
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Academic session successfully deleted
          content: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedRequestResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: Academic session not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Unprocessable Entity / Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorResponse'
components:
  securitySchemes:
    MCP:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: >-
            https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/authorize
          tokenUrl: >-
            https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token
          scopes:
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-core.readonly: Read access to roster core
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster.readonly: Read access to roster
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-demographics.readonly: Read access to roster demographics
            https://purl.imsglobal.org/spec/or/v1p1/scope/resource.readonly: Read access to resource
            https://purl.imsglobal.org/spec/or/v1p1/scope/gradebook.readonly: Read access to gradebook
            https://purl.imsglobal.org/spec/powerpath/v1p1/scope/powerpath.readonly: Read access to powerpath
            https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly: Read your issued badges
            https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.readonly: Read access to CLR
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          scopes:
            https://purl.imsglobal.org/spec/or/v1p1/scope/admin: Admin access to the API
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-core.readonly: Read access to roster core
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster.readonly: Read access to roster
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster.createput: Create and update access to roster
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster.delete: Delete access to roster
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-demographics.readonly: Read access to roster demographics
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-demographics.createput: Create and update access to roster demographics
            https://purl.imsglobal.org/spec/or/v1p1/scope/roster-demographics.delete: Delete access to roster demographics
            https://purl.imsglobal.org/spec/or/v1p1/scope/resource.readonly: Read access to resource
            https://purl.imsglobal.org/spec/or/v1p1/scope/resource.createput: Create and update access to resource
            https://purl.imsglobal.org/spec/or/v1p1/scope/resource.delete: Delete access to resource
            https://purl.imsglobal.org/spec/or/v1p1/scope/gradebook.readonly: Read access to gradebook
            https://purl.imsglobal.org/spec/or/v1p1/scope/gradebook.createput: Create and update access to gradebook
            https://purl.imsglobal.org/spec/or/v1p1/scope/gradebook.delete: Delete access to gradebook
            https://purl.imsglobal.org/spec/powerpath/v1p1/scope/powerpath.readonly: Read access to powerpath
            https://purl.imsglobal.org/spec/powerpath/v1p1/scope/powerpath.createput: Create and update access to powerpath
            https://purl.imsglobal.org/spec/powerpath/v1p1/scope/powerpath.delete: Delete access to powerpath
            https://purl.imsglobal.org/spec/powerpath/v1p1/scope/powerpath.admin: Admin access to powerpath
            https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.readonly: Read your issued badges
            https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.upsert: Store new badges in your account
            https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.delete: Delete access to open badges
            https://purl.imsglobal.org/spec/ob/v3p0/scope/credential.admin: Administrative access to open badges
            https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.readonly: Read access to CLR
            https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.upsert: Create and update access to CLR
            https://purl.imsglobal.org/spec/clr/v2p0/scope/credential.admin: Administrative access to CLR
          tokenUrl: >-
            https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token
  schemas:
    BadRequestResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: invaliddata
                    description: The field value for the minor code
                    example: invaliddata
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    UnauthorizedRequestResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: unauthorisedrequest
                    description: The field value for the minor code
                    example: unauthorisedrequest
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    ForbiddenResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: forbidden
                    description: The field value for the minor code
                    example: forbidden
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    NotFoundResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: unknownobject
                    description: The field value for the minor code
                    example: unknownobject
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    UnprocessableEntityResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: invaliddata
                    description: The field value for the minor code
                    example: invaliddata
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    TooManyRequestsResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: server_busy
                    description: The field value for the minor code
                    example: server_busy
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    InternalServerErrorResponse:
      type: object
      properties:
        imsx_codeMajor:
          type: string
          default: failure
          description: The major response code
          example: failure
        imsx_severity:
          type: string
          default: error
          description: The severity of the response
          example: error
        imsx_description:
          type: string
        imsx_CodeMinor:
          type: object
          properties:
            imsx_codeMinorField:
              type: array
              items:
                type: object
                properties:
                  imsx_codeMinorFieldName:
                    type: string
                    default: TargetEndSystem
                    description: The field name for the minor code
                    example: TargetEndSystem
                  imsx_codeMinorFieldValue:
                    type: string
                    default: internal_server_error
                    description: The field value for the minor code
                    example: internal_server_error
                required:
                  - imsx_codeMinorFieldName
                  - imsx_codeMinorFieldValue
          required:
            - imsx_codeMinorField
        imsx_error_details:
          type: array
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - imsx_codeMajor
        - imsx_severity
        - imsx_description
        - imsx_CodeMinor
    ScoreScale:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        type:
          type: string
        class:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        course:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        scoreScaleValue:
          type: array
          items:
            type: object
            properties:
              itemValueLHS:
                type: string
              itemValueRHS:
                type: string
              value:
                type: string
              description:
                type: string
            required:
              - itemValueLHS
              - itemValueRHS
      required:
        - status
        - title
        - type
        - class
        - scoreScaleValue
      description: Represents a score scale.
    Org:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: {}
        name:
          type: string
        type:
          type: string
          enum: *ref_42
        identifier:
          type: string
        parent:
          type:
            - object
            - 'null'
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
          required:
            - href
            - sourcedId
            - type
        children:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              href:
                type: string
                format: uri
              sourcedId:
                type: string
              type:
                type: string
            required:
              - href
              - sourcedId
              - type
          default: *ref_43
      required:
        - sourcedId
        - status
        - name
        - type
        - identifier
        - children
      description: Represents an organization.
    Result:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        lineItem:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        student:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        class:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        scoreScale:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        scoreStatus:
          type: string
          enum: *ref_9
        score:
          type:
            - number
            - 'null'
        textScore:
          type:
            - string
            - 'null'
        scoreDate:
          type: string
          format: date-time
        comment:
          type:
            - string
            - 'null'
        learningObjectiveSet:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              source:
                type: string
              learningObjectiveResults:
                type: array
                items:
                  type: object
                  properties:
                    learningObjectiveId:
                      type: string
                    score:
                      type: number
                    textScore:
                      type: string
                  required:
                    - learningObjectiveId
            required:
              - source
              - learningObjectiveResults
        inProgress:
          type: string
        incomplete:
          type: string
        late:
          type: string
        missing:
          type: string
      required:
        - status
        - lineItem
        - student
        - scoreStatus
        - scoreDate
      description: Represents a result.
    LineItem:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_7
          default: active
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        description:
          type:
            - string
            - 'null'
        assignDate:
          type: string
          format: date-time
        dueDate:
          type: string
          format: date-time
        class:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        school:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        category:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        gradingPeriod:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        academicSession:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        scoreScale:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        resultValueMin:
          type:
            - number
            - 'null'
        resultValueMax:
          type:
            - number
            - 'null'
        learningObjectiveSet:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              source:
                type: string
              learningObjectiveIds:
                type: array
                items:
                  type: string
            required:
              - source
              - learningObjectiveIds
      required:
        - title
        - assignDate
        - dueDate
        - class
        - school
        - category
      description: Represents a line item.
    GradeEnum:
      type: string
      enum: *ref_12
      description: >-
        Grade levels. -1 is Pre-K, 0 is Kindergarten, 1-12 are grades 1-12, 13
        is AP.
      example: '3'
    SubjectEnum:
      type: string
      enum: *ref_13
    Class:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        classCode:
          type:
            - string
            - 'null'
        classType:
          type: string
          enum: *ref_11
        location:
          type:
            - string
            - 'null'
        grades:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/GradeEnum'
            description: The grades of the course
            enum: *ref_12
        subjects:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SubjectEnum'
            description: The subjects of the course
            enum: *ref_13
        course:
          type:
            - object
            - 'null'
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
          required:
            - href
            - sourcedId
            - type
        school:
          type:
            - object
            - 'null'
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
          required:
            - href
            - sourcedId
            - type
        terms:
          type: array
          items:
            type: object
            properties:
              href:
                type: string
                format: uri
              sourcedId:
                type: string
              type:
                type: string
            required:
              - href
              - sourcedId
              - type
        subjectCodes:
          type: array
          items:
            type: string
        periods:
          type: array
          items:
            type: string
        resources:
          type: array
          items:
            type: object
            properties:
              href:
                type: string
                format: uri
              sourcedId:
                type: string
              type:
                type: string
            required:
              - href
              - sourcedId
              - type
      required:
        - sourcedId
        - status
        - title
        - classCode
        - classType
        - location
        - course
        - school
        - terms
      description: Represents a class.
    Category:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        weight:
          type:
            - number
            - 'null'
      required:
        - status
        - title
      description: Represents a category.
    AssessmentResult:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        assessmentLineItem:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        student:
          type: object
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        score:
          type:
            - number
            - 'null'
        textScore:
          type:
            - string
            - 'null'
        scoreDate:
          type: string
          format: date-time
        scoreScale:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        scorePercentile:
          type:
            - number
            - 'null'
        scoreStatus:
          type: string
          enum: *ref_9
        comment:
          type:
            - string
            - 'null'
        learningObjectiveSet:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              source:
                type: string
              learningObjectiveResults:
                type: array
                items:
                  type: object
                  properties:
                    learningObjectiveId:
                      type: string
                    score:
                      type: number
                    textScore:
                      type: string
                  required:
                    - learningObjectiveId
            required:
              - source
              - learningObjectiveResults
        inProgress:
          type:
            - string
            - 'null'
        incomplete:
          type:
            - string
            - 'null'
        late:
          type:
            - string
            - 'null'
        missing:
          type:
            - string
            - 'null'
      required:
        - status
        - assessmentLineItem
        - student
        - scoreDate
        - scoreStatus
      description: Represents an assessment result.
    LearningObjectiveSet:
      type:
        - array
        - 'null'
      items:
        type: object
        properties:
          source:
            type: string
          learningObjectiveIds:
            type: array
            items:
              type: string
        required:
          - source
          - learningObjectiveIds
      description: Represents a learning objective set.
    AssessmentLineItem:
      type: object
      properties:
        sourcedId:
          type: string
          minLength: 1
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        description:
          type:
            - string
            - 'null'
        class:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
        parentAssessmentLineItem:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
          description: Represents a parent assessment line item.
        scoreScale:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
          description: Represents a score scale.
        resultValueMin:
          type:
            - number
            - 'null'
        resultValueMax:
          type:
            - number
            - 'null'
        component:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
          description: >-
            PROPRIETARY EXTENSION: Reference to the Component that this
            assessment line item is associated with. Enables enhanced curriculum
            mapping.
        componentResource:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
          description: >-
            PROPRIETARY EXTENSION: Reference to the Component Resource that this
            assessment line item is associated with. Supports detailed
            content-to-assessment relationships.
        learningObjectiveSet:
          $ref: '#/components/schemas/LearningObjectiveSet'
        course:
          type:
            - object
            - 'null'
          properties:
            sourcedId:
              type: string
          required:
            - sourcedId
          description: >-
            PROPRIETARY EXTENSION: Reference to the Course that this assessment
            line item is associated with.
      required:
        - status
        - title
      description: Represents an assessment line item.
    FastFailConfig:
      type: object
      properties:
        consecutive_failures:
          type: integer
          minimum: 1
          description: >-
            Number of consecutive incorrect answers that triggers fast-fail.
            Must be >= 1.
          example: 3
        stagnation_limit:
          type: integer
          minimum: 1
          description: >-
            Number of questions without score improvement that triggers
            fast-fail. Must be >= 1.
          example: 5
      description: >-
        Configuration for automatic fast-fail behavior in PowerPath 100 lessons.
        When a student meets one of the thresholds, their attempt is
        automatically finalized.
    Resource:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        roles:
          type: array
          items:
            type: string
            enum: *ref_18
        importance:
          type: string
          enum: *ref_19
        vendorResourceId:
          type: string
        vendorId:
          type:
            - string
            - 'null'
        applicationId:
          type:
            - string
            - 'null'
      required:
        - sourcedId
        - status
        - title
        - vendorResourceId
      description: Represents a digital resource of some kind.
    Demographics:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        birthDate:
          type:
            - string
            - 'null'
          pattern: ^\d{4}-\d{2}-\d{2}$
        sex:
          type:
            - string
            - 'null'
          enum:
            - male
            - female
            - other
            - unspecified
            - null
        americanIndianOrAlaskaNative:
          type:
            - string
            - 'null'
        asian:
          type:
            - string
            - 'null'
        blackOrAfricanAmerican:
          type:
            - string
            - 'null'
        nativeHawaiianOrOtherPacificIslander:
          type:
            - string
            - 'null'
        white:
          type:
            - string
            - 'null'
        demographicRaceTwoOrMoreRaces:
          type:
            - string
            - 'null'
        hispanicOrLatinoEthnicity:
          type:
            - string
            - 'null'
        countryOfBirthCode:
          type:
            - string
            - 'null'
        stateOfBirthAbbreviation:
          type:
            - string
            - 'null'
        cityOfBirth:
          type:
            - string
            - 'null'
        publicSchoolResidenceStatus:
          type:
            - string
            - 'null'
      required:
        - sourcedId
        - status
        - birthDate
        - sex
        - americanIndianOrAlaskaNative
        - asian
        - blackOrAfricanAmerican
        - nativeHawaiianOrOtherPacificIslander
        - white
        - demographicRaceTwoOrMoreRaces
        - hispanicOrLatinoEthnicity
        - countryOfBirthCode
        - stateOfBirthAbbreviation
        - cityOfBirth
        - publicSchoolResidenceStatus
      description: Represents a student's demographics information.
    User:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        userMasterIdentifier:
          type:
            - string
            - 'null'
        username:
          type:
            - string
            - 'null'
        userIds:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              identifier:
                type: string
            required:
              - type
              - identifier
        enabledUser:
          type: string
          enum: *ref_30
        givenName:
          type: string
        familyName:
          type: string
        middleName:
          type:
            - string
            - 'null'
        roles:
          type: array
          items:
            type: object
            properties:
              roleType:
                type: string
                enum: *ref_21
              role:
                type: string
                enum: *ref_22
              org:
                type: object
                properties:
                  href:
                    type: string
                    format: uri
                  sourcedId:
                    type: string
                  type:
                    type: string
                required:
                  - href
                  - sourcedId
                  - type
              userProfile:
                type: string
              metadata:
                type:
                  - object
                  - 'null'
                additionalProperties: {}
              beginDate:
                type:
                  - string
                  - 'null'
              endDate:
                type:
                  - string
                  - 'null'
            required:
              - roleType
              - role
              - org
          default: *ref_31
        agents:
          type: array
          items:
            type: object
            properties:
              href:
                type: string
                format: uri
              sourcedId:
                type: string
              type:
                type: string
                enum: *ref_27
            required:
              - href
              - sourcedId
              - type
          default: *ref_32
        userProfiles:
          type: array
          items:
            type: object
            properties:
              profileId:
                type: string
              profileType:
                type: string
              vendorId:
                type: string
              applicationId:
                type: string
              description:
                type:
                  - string
                  - 'null'
              app:
                type: object
                properties:
                  sourcedId:
                    type: string
                  name:
                    type: string
                  description:
                    type:
                      - string
                      - 'null'
                  domain:
                    type: array
                    items:
                      type: string
                  metadata:
                    type:
                      - object
                      - 'null'
                    additionalProperties: {}
                required:
                  - sourcedId
                  - name
                  - domain
              credentials:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    type:
                      type: string
                    username:
                      type: string
                    password:
                      type:
                        - string
                        - 'null'
                  required:
                    - id
                    - type
                    - username
                default: *ref_33
            required:
              - profileId
              - profileType
              - vendorId
              - applicationId
              - app
              - credentials
          default: *ref_34
        primaryOrg:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
            name:
              type:
                - string
                - 'null'
          required:
            - href
            - sourcedId
            - type
        identifier:
          type:
            - string
            - 'null'
        email:
          type: string
          format: email
          description: Must be unique across all users.
        preferredFirstName:
          type:
            - string
            - 'null'
        preferredMiddleName:
          type:
            - string
            - 'null'
        preferredLastName:
          type:
            - string
            - 'null'
        pronouns:
          type:
            - string
            - 'null'
        grades:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/GradeEnum'
            description: The grades of the course
            enum: *ref_12
        password:
          type:
            - string
            - 'null'
        sms:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        demographics:
          oneOf:
            - $ref: '#/components/schemas/Demographics'
            - type: 'null'
      required:
        - sourcedId
        - status
        - enabledUser
        - givenName
        - familyName
        - roles
        - agents
        - userProfiles
        - email
      description: >-
        Represents a user of the system. Can be a student, teacher, guide,
        parent etc.
    AcademicSession:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        title:
          type: string
        startDate:
          type: string
        endDate:
          type: string
        type:
          type: string
          enum: *ref_28
        parent:
          type:
            - object
            - 'null'
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
              enum: *ref_27
          required:
            - href
            - sourcedId
            - type
        schoolYear:
          type: number
        org:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
              enum: *ref_27
          required:
            - href
            - sourcedId
            - type
        children:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              href:
                type: string
                format: uri
              sourcedId:
                type: string
              type:
                type: string
                enum: *ref_27
            required:
              - href
              - sourcedId
              - type
      required:
        - sourcedId
        - status
        - title
        - startDate
        - endDate
        - type
        - schoolYear
        - org
      description: Represents an academic session.
    Enrollment:
      type: object
      properties:
        sourcedId:
          type: string
        status:
          type: string
          enum: *ref_2
        dateLastModified:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata for the object
        role:
          type: string
          enum: *ref_48
        primary:
          type:
            - string
            - 'null'
          enum:
            - 'true'
            - 'false'
            - null
          default: 'false'
        beginDate:
          type:
            - string
            - 'null'
          example: '2024-01-01'
        endDate:
          type:
            - string
            - 'null'
          example: '2024-01-01'
        user:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
            name:
              type: string
          required:
            - href
            - sourcedId
            - type
        class:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
            name:
              type: string
          required:
            - href
            - sourcedId
            - type
        school:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
            name:
              type: string
          required:
            - href
            - sourcedId
            - type
        course:
          type: object
          properties:
            href:
              type: string
              format: uri
            sourcedId:
              type: string
            type:
              type: string
            name:
              type: string
          required:
            - href
            - sourcedId
            - type
      required:
        - sourcedId
        - status
        - role
        - primary
        - beginDate
        - endDate
        - user
        - class
        - school
        - course
      description: Represents an enrollment.
